【发布时间】:2014-04-27 17:13:16
【问题描述】:
我有以下两个人的 OWL 课程:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#">
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#">
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">
]>
<rdf:RDF xmlns="http://www.example.org/message#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd ="http://www.w3.org/2001/XMLSchema#">
<owl:Ontology rdf:about="">
<rdfs:comment>The Common Alerting Protocol Ontology</rdfs:comment>
<rdfs:label>CAP Ontology</rdfs:label>
</owl:Ontology>
<owl:Class rdf:ID="Message">
<rdfs:label>CAP alert message</rdfs:label>
<rdfs:comment>...</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="AlertStatus">
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="#Actual" />
<owl:Thing rdf:about="#Exercise" />
<owl:Thing rdf:about="#System" />
<owl:Thing rdf:about="#Test" />
<owl:Thing rdf:about="#Draft" />
</owl:oneOf>
</owl:Class>
<owl:DatatypeProperty rdf:ID="hasSender">
<rdfs:domain rdf:resource="#Message" />
<rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty>
<owl:ObjectProperty rdf:ID="hasStatus">
<rdfs:domain rdf:resource="#Message"/>
<rdfs:range rdf:resource="#AlertStatus"/>
</owl:ObjectProperty>
<Message rdf:ID="KSTO1055887203">
<hasSender>KSTO</hasSender>
<hasStatus rdf:resource="#Actual"/>
</Message>
<Message rdf:ID="KAR0-0306112239-SW">
<hasSender>KARO</hasSender>
<hasStatus rdf:resource="#Actual"/>
</Message>
</rdf:RDF>
如果我查询:
PREFIX foo: <http://www.example.org/message#>
SELECT * WHERE { ?subject foo:hasSender ?object }
,我明白了:
----------------------------------
| subject | object |
==================================
| KAR0-0306112239-SW | "KARO"@ |
| KSTO1055887203 | "KSTO"@ |
----------------------------------
当我尝试仅检索带有hasSender 值“KARO”的消息时:
PREFIX foo: <http://www.example.org/message#>
SELECT * WHERE { ?subject foo:hasSender "KARO"}
,查询不返回任何结果。我的 RDF/OWL 有什么问题吗?我错过了命名空间还是什么?
编辑:我使用 Protege v4.3.0,无论是否启动推理器 (HermiT),我都没有得到任何结果。我还编辑了我的第一个查询的输出。有一个尾随的“@”符号,我不确定它是否有意义。我没有在任何地方声明所涉及的字符串的语言(我提到这一点是因为我的理解是@符号用于声明字符串的语言,如"KARO"@en)。
【问题讨论】:
-
会是你的引擎吗?我已尝试使用 Jena 对您的文件进行查询,结果返回
KAR0-0306112239-SW。 -
试试“KARO”^^xsd:string。本体将 hasSender 的范围定义为 xsd:string,因此您的引擎可能需要它。
-
@scozy 这可能是我使用的引擎。我编辑了我的帖子以提及 Protege。我不知道耶拿,我应该试试看。
-
@AndyS 我确实在某个时候尝试过 "KARO"^^xsd:string,但不幸的是它也没有用。
-
@lalibi,如果你想玩弄 Jena,Twinkle 是一个很好的工具。