【发布时间】:2017-08-16 00:34:13
【问题描述】:
我在 Protege 中指定了一个“isPartOf”对象属性,并断言
“Room_1 是 Apartment_1 的一部分”。
“Room_1”和“Apartment_1”都是个人。 OWL文件中的相关代码如下:
<rdf:RDF xmlns="http://www.xxx.come/example#"
xml:base="http://www.xxx.come/example"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<!-- http://www.xxx.come/example#isPartOf -->
<owl:ObjectProperty rdf:about="http://www.xxx.come/example#isTemporalPartOf">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#AsymmetricProperty"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#TransitiveProperty"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ReflexiveProperty"/>
<rdfs:domain rdf:resource="http://www.xxx.come/example#Room"/>
<rdfs:range rdf:resource="http://www.xxx.come/example#Apartment"/>
</owl:ObjectProperty>
<!-- http://www.xxx.come/example#Room_1 -->
<owl:NamedIndividual rdf:about="http://www.xxx.come/example#Room_1">
<rdf:type rdf:resource="http://www.xxx.come/example#Room"/>
<isPartOf rdf:resource="http://http://www.xxx.come/example#Apartment_1"/>
<hasSize rdf:datatype="http://www.w3.org/2001/XMLSchema#double">99.6</hasSize>
<hasSize rdf:datatype="http://www.w3.org/2001/XMLSchema#double">145.5</hasSize>
</owl:NamedIndividual>
</rdf:RDF>
您将如何使用 Prolog 查询这样的三元组?我以为会是这样的:
is_part_of(Ind1, Ind2):-
rdf(Ind1,
"http://www.w3.org/1999/02/22-rdf-syntax-ns#isPartOf,
Ind2).
这显然行不通。
我还从 rdf 库中看到了 rdf_has(S,P,O,RealP),它看起来有点可用,但规范很模糊。
根据这个问题,如果两个人是班级怎么办?如果对象属性是数据类型属性怎么办?
我认为我被困在一个简单的问题上,但我已经搜索了很长时间的示例或类似问题,但没有找到任何东西。
提前致谢!
【问题讨论】:
-
完全不清楚您使用哪个 SWI Prolog 包来处理 RDF 数据...
-
?- rdf(Ind1, 'http://www.xxx.come/example#isPartOf', Ind2).和?- rdf(Ind1, 'http://www.xxx.come/example#hasSize', Ind2).都为我工作。 -
在他的查询中,
rdf:typeURI 周围的引号有问题 - 也许这就是问题所在。 -
@AKSW,是的。此外,@vw511 尝试使用
rdf:isPartOf之类的东西,而不是http://www.xxx.come/example#isPartOf。
标签: xml rdf owl swi-prolog protege