我有一个类ABC
,它是一个subClassOf
类XYZ
,定义为A
,B
,C
的交集,如下所示:
<Class rdf:about="&clink;ABC">
<equivalentClass>
<Class>
<intersectionOf rdf:parseType="Collection">
<Restriction>
<onProperty rdf:resource="&clink;affects"/>
<someValuesFrom rdf:resource="&clink;A"/>
</Restriction>
<Restriction>
<onProperty rdf:resource="&clink;hasMarker"/>
<someValuesFrom rdf:resource="&clink;B"/>
</Restriction>
<Restriction>
<onProperty rdf:resource="&clink;hasPathologicalProcess"/>
<someValuesFrom rdf:resource="&clink;C"/>
</Restriction>
</intersectionOf>
</Class>
</equivalentClass>
<rdfs:subClassOf rdf:resource="&clink;XYZ"/>
</Class>
如何使用RDFLib中的SPARQL查询通过类XYZ
访问A
、B
和{
下面的查询返回一个空节点rdflib.term.BNode('_L')
,我不知道如何处理bNode。在
我需要一个接收XYZ
并返回以下内容的查询:
A
B
C
首先,
XYZ
既不是subClassOf
A
,B
,C
,也不是subClassOf
它们的交集A and B and C
(我使用的是manchester syntaax (see here))。在在您的代码片段中,您将
XYZ
定义为equivalentTo
(这意味着它也是subClassOf
)的三个anynomous (see here)类的交集;它们是(affects some A) and (hasMaker some B) and (hasPathologicalProcess some C)
。这个交集并不等同于A and B and C
(Manchester语法中some
代表someValuesFrom
)。在要理解
someValuesFrom
限制的含义,请参阅OWL的documentation (see here):编辑2:
既然您已经理解了}!应首先检索限制,然后访问属性及其定义的类,如下所示:
owl:someValuesFrom
的含义,并且正如@AKSW所建议的那样,这里有一个简单明了的SPARQL查询。但是,您不能仅仅使用rdfs:subClassOf
来检索A
、B
和{编辑2结束
通过修改数据模型来解决其他问题。
因此,首先,您的查询应该返回匿名类
^{pr2}$(affects some A) and (hasMaker some B) and (hasPathologicalProcess some C)
,这是您定义的交集。但是,由于它是一个匿名类,它将返回一个空节点B_node
,而不是一个具体的类。要返回一个具体的类,您应该将这个匿名交集定义为这个交集的本体中的一个类;例如,您可以创建类anyn_intersection
,如下所示:因此,您的查询将获得该类^ {< CD2>}而不是空白节点。在
现在,如果你想在结果中得到所有的},你应该首先确保推理器正在运行,因为这是一个隐式知识,第二个你应该对每个匿名交集类,以与上面的
^{3}$(affects some A)
,(hasMaker some B)
,和{anyn_intersection
相似的方式定义一个具体的交集类。例如,可以为匿名限制类定义anyn_AffectsSomeA
,如下所示:然后必须定义两个类似的类}。最后,将}的交集。在
anyn_hasMakerSomeB
和{anyn_intersection
定义为anyn_AffectsSomeA
、anyn_hasMakerSomeB
和{编辑1:
我不知道
rdfLib
中是否有一些特定的功能可以让您检索匿名类定义。这可能会解决你的问题,而不必按照我建议的方式来定义。另外,您应该确保reasoner正在运行。在编辑1结束:
相关问题 更多 >
编程相关推荐