SPARQL - 如何从链接的个人获取个人数据 属性

SPARQL - how to get individual data property from linked individual

我在 protege 中构建了这个 ontology。我有这个人 ev001 有这些类型 Room,hasRoom only {rm001}rm001 有数据 属性 roomName "room 1"^^xsd:string.

现在我有一个 SPARQL 查询 returns

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 等检索所有公理内容。但是,在您的情况下,ontology 的结构有点奇怪。例如,您的内容如下:

<!-- 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 的类型为:

只有 hasRoom { rm03005 }

根据您的问题,听起来您希望

pi00314001 hasRoom rm03005

在您的数据中,或者至少可以从中推断出来。不幸的是,这并不是它的真正含义。当你说一个人 X 的类型是

仅 D

这意味着它 if X 对 属性 p 有任何值],则该值必须是 D 的一个实例。同样,您 ontology 中的内容表示 if pi00314001 具有 属性 hasRoom 的值,那么该值必须来自 class { rm03005}。 不会 说 pi00314001 实际上 那个 属性 的值,所以你实际上不知道它是否有 rm03005是否作为 hasRoom 的值。

如果它在您的控制之下,我想您会想要向 ontology 添加一些实际的对象 属性 断言,这样我上面提到的查询就会起作用。现在,您的 ontology 告诉您更多关于 可能 的事情,而不是实际情况。

就是说,如果您确实希望按照现在的结构从数据中检索房间,您可以遵循数据的结构并使之生效。它会是这样的:

select ?event ?roomName {
  ?event a [ owl:onProperty base:hasRoom ;
             owl:allValuesFrom/owl:oneOf/rdf:rest*/rdf:first ?room ] .
  ?room base:roomName ?roomName .
}