如何创建一个 owl:intersectionOf 两个 owl:Classes?
How can I create an owl:intersectionOf two owl:Classes?
对于学校练习,我有一个 RDF 文件和一个 OWL 文件。
有一个owl:Class Lecturer
和一个owl:Class Researcher
。两者的交集应该是教授。我已将我的 RDF 和 OWL 文件放在下面。
问题是:当我进行查询时,没有资源类型为 Professor,而在 RDF 文件中我们可以看到 Laura 应该是 Professor。
rdf 文件的缩减版本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
<!ENTITY humans "http://www.inria.fr/2007/09/11/humans.rdfs">
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#"> ]>
<rdf:RDF
xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd ="&xsd;"
xmlns ="&humans;#"
xml:base ="&humans;-instances" >
<Person rdf:ID="Laura">
<name>Laura</name>
</Person>
<Lecturer rdf:about="#Laura"/>
<Researcher rdf:about="#Laura">
<name>Laura</name>
</Researcher>
</rdf:RDF>
owl 文件的缩减版本:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://www.inria.fr/2007/09/11/humans.rdfs"
xmlns:owl="http://www.w3.org/2002/07/owl#">
<owl:Class rdf:ID="Person">
</owl:Class>
<owl:Class rdf:ID="Lecturer">
<subClassOf rdf:resource="#Person"/>
</owl:Class>
<owl:Class rdf:ID="Researcher">
<subClassOf rdf:resource="#Person"/>
</owl:Class>
<owl:Class rdf:id="Professor">
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Lecturer"/>
<owl:Class rdf:about="#Researcher"/>
</owl:intersectionOf>
</owl:Class>
</rdf:RDF>
我使用的查询是默认查询:
select * where {
?x ?p ?y
}
但我实际上希望做的是:
select * where {
?x a <http://www.inria.fr/2007/09/11/humans.rdfs#Professor>
}
我确实看过这个答案: 但我不明白它应该以何种方式用于我的特定问题。
我希望有人能提供帮助。顺便说一下,这是我第一次 post 来这里,如果有什么遗漏请告诉我。
转述自 by @stanislav-kralin:
使用 rdf:ID
的正确大写(而不是 rdf:id
),并在将 RDF 加载到 GraphDB 时启用 "OWL-Max" 推理。
对于学校练习,我有一个 RDF 文件和一个 OWL 文件。
有一个owl:Class Lecturer
和一个owl:Class Researcher
。两者的交集应该是教授。我已将我的 RDF 和 OWL 文件放在下面。
问题是:当我进行查询时,没有资源类型为 Professor,而在 RDF 文件中我们可以看到 Laura 应该是 Professor。
rdf 文件的缩减版本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
<!ENTITY humans "http://www.inria.fr/2007/09/11/humans.rdfs">
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#"> ]>
<rdf:RDF
xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd ="&xsd;"
xmlns ="&humans;#"
xml:base ="&humans;-instances" >
<Person rdf:ID="Laura">
<name>Laura</name>
</Person>
<Lecturer rdf:about="#Laura"/>
<Researcher rdf:about="#Laura">
<name>Laura</name>
</Researcher>
</rdf:RDF>
owl 文件的缩减版本:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://www.inria.fr/2007/09/11/humans.rdfs"
xmlns:owl="http://www.w3.org/2002/07/owl#">
<owl:Class rdf:ID="Person">
</owl:Class>
<owl:Class rdf:ID="Lecturer">
<subClassOf rdf:resource="#Person"/>
</owl:Class>
<owl:Class rdf:ID="Researcher">
<subClassOf rdf:resource="#Person"/>
</owl:Class>
<owl:Class rdf:id="Professor">
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Lecturer"/>
<owl:Class rdf:about="#Researcher"/>
</owl:intersectionOf>
</owl:Class>
</rdf:RDF>
我使用的查询是默认查询:
select * where {
?x ?p ?y
}
但我实际上希望做的是:
select * where {
?x a <http://www.inria.fr/2007/09/11/humans.rdfs#Professor>
}
我确实看过这个答案:
我希望有人能提供帮助。顺便说一下,这是我第一次 post 来这里,如果有什么遗漏请告诉我。
转述自
使用 rdf:ID
的正确大写(而不是 rdf:id
),并在将 RDF 加载到 GraphDB 时启用 "OWL-Max" 推理。