有没有一种方法可以快速访问OWL(RDF / XML)文件中的所有注释和子注释?

时间:2019-11-26 20:08:23

标签: xml python-3.6 rdf ontology rdflib

所以我有一个在Protege中构建的本体,其中包含注释和子注释。我的意思是,一个概念可能有一个定义,而该定义可能有一个注释。

所以您可能会遇到(s,p,o):

'http://purl.fakeiri.org/ONTO/1111' --> 'label' --> 'Term'

'Term' --> 'comment' --> 'Comment about term.'

我正在尝试使用Flask应用程序使本体易于探索(我正在使用Python解析本体文件),而且我似乎无法快速获取所有的注释和子注释。

我开始使用owlready2包,但是它要求您自定义每个单独的注释属性(您不能仅获取所有注释属性的列表,因此,如果添加诸如{{1} },您必须返回代码并添加random_identifier,否则它将不会被提取)。可以,很快,但是子注释需要加载IRI,然后按以下方式搜索它:

entity.random_identifier

这非常慢,加载大约5到10分钟即可搜索大约140种子注释类型,而仅使用注释需要3-5秒。

我决定从此处废弃random_prop = IRIS['http://schema.org/fillerName'] sub_annotation = x[entity, random_prop, annotation_label] 并尝试owlready2。但是,似乎子注释只是作为BNode附加的,我不知道如何通过它们的“父”注释访问它们,或者甚至不可能。

TL; DR:有人知道如何访问一个条目并快速将其所有注释和子注释收集到XML / RDF本体文件中吗?

编辑1:

如所建议的,这是本体的一个片段:

rdflib

非常感谢大家!

3 个答案:

答案 0 :(得分:1)

从您的问题中我可以得出结论,“子注释”级别只有一个深度。在这种情况下,您可以执行以下SPARQL查询:

SELECT ?annProp ?annValue ?subAnn ?subValue
WHERE { 
   ?annProp a owl:AnnotationProperty .
   <the:concept> ?annProp ?annValue . 
   OPTIONAL { ?annValue ?subAnn ?subValue . }
}

这将检索给定概念the:concept的所有注释属性及其值,并且,可选地,如果该注释具有“子注释”,则还将检索该子注释。

答案 1 :(得分:1)

所以我忽略了明显的...我将owlready2从0.18更新为0.22,现在闪电般快了。

答案 2 :(得分:0)

“ XPath表达式”(一种将搜索指定为XML结构的方式)可能能够完成工作。

请参阅:

How to use Xpath in Python?

https://docs.python.org/2/library/xml.etree.elementtree.html#xpath-support

如果数据具有XML结构,则XPath可能可以遍历树(为您...)并检索感兴趣的节点。