[英]SPARQL - how to get individual data property from linked individual
我建立这个本体论是为了保护。 我有这个个人ev001
,有这些类型Room
, hasRoom only {rm001}
Room
hasRoom only {rm001}
和rm001
有数据属性roomName "room 1"^^xsd:string
。
现在我有一个返回的SPARQL查询
Event Room RoomName
ev001 {rm001}
我的问题是,如何从那里获取房间名称,这是我的查询到目前为止
SELECT ?event ?room ?roomname
WHERE { ?x owl:onProperty base:hasRoom .
?event a base:FilmScreening ;
a ?x .
?x owl:allValuesFrom ?room .
}
非常感谢任何建议,非常感谢
一般来说,看起来你只需要:
SELECT ?event ?room ?roomname
WHERE {
?event base:hasRoom ?room .
?room base:roomName ?roomname.
}
您不需要使用owl:onProperty等检索所有公理内容。但是,在您的情况下,本体的结构有点奇怪。 例如,你有以下内容:
<!-- http://www.example.org/ontologies/loncon3#pi00314001 -->
<owl:NamedIndividual rdf:about="http://www.example.org/ontologies/loncon3#pi00314001">
<!-- ... -->
<rdf:type>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.example.org/ontologies/loncon3#hasRoom"/>
<owl:allValuesFrom>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.example.org/ontologies/loncon3#rm03005"/>
</owl:oneOf>
</owl:Class>
</owl:allValuesFrom>
</owl:Restriction>
</rdf:type>
<!-- ... -->
</owl:NamedIndividual>
在曼彻斯特语法中,说pi00314001具有以下类型:
仅限房间{rm03005}
根据你的问题,听起来像你期望的那样
pi00314001 hasRoom rm03005
在您的数据中,或至少可以从中推断出来。 不幸的是,这并不是它实际意味着什么。 当你说个人X有这种类型时
p只有D.
它表示如果 X具有属性p的任何值,则该值必须是D的实例。 同样,您的本体中的内容表示如果 pi00314001具有属性hasRoom的值,则该值必须来自类{rm03005}。 它并没有说pi00314001实际上具有该属性的值,因此您实际上并不知道它是否具有rm03005作为hasRoom的值。
如果它在你的控制之下,我想你想要为你的本体添加一些实际的对象属性断言,这样我上面提到的查询就可以了。 现在,你的本体论告诉你更多关于什么是可能的,而不是实际情况。
也就是说,如果您确实希望从现在的结构数据中检索房间,您可以按照数据结构进行操作。 它是这样的:
select ?event ?roomName {
?event a [ owl:onProperty base:hasRoom ;
owl:allValuesFrom/owl:oneOf/rdf:rest*/rdf:first ?room ] .
?room base:roomName ?roomName .
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.