有没有办法从OWL(RDF/XML)文件快速访问所有注释和子注释?

有没有办法从OWL(RDF/XML)文件快速访问所有注释和子注释?,xml,python-3.6,rdf,ontology,rdflib,Xml,Python 3.6,Rdf,Ontology,Rdflib,所以我在Protege中构建了一个本体,它有注释和子注释。我的意思是,一个概念可能有一个定义,这个定义可能有一个注释 所以你可能会有(s,p,o): 我试图使用Flask应用程序使本体易于探索(我使用Python解析本体文件),但我似乎无法快速获得所有注释和子注释 我开始使用owlready2包,但它要求您自定义每个注释属性(您不能只获得所有注释属性的列表,因此如果您添加类似random\u identifier的属性,您必须返回到代码中并添加实体。random\u identifier或它将不

所以我在Protege中构建了一个本体,它有注释和子注释。我的意思是,一个概念可能有一个定义,这个定义可能有一个注释

所以你可能会有(s,p,o):

我试图使用Flask应用程序使本体易于探索(我使用Python解析本体文件),但我似乎无法快速获得所有注释和子注释

我开始使用
owlready2
包,但它要求您自定义每个注释属性(您不能只获得所有注释属性的列表,因此如果您添加类似
random\u identifier
的属性,您必须返回到代码中并添加
实体。random\u identifier
或它将不会被拾取)。这工作正常,速度相当快,但子注释需要加载IRI,然后按以下方式搜索:

random_prop = IRIS['http://schema.org/fillerName']
sub_annotation = x[entity, random_prop, annotation_label]
这是非常缓慢的,需要5-10分钟来加载以搜索大约140个子注释类型,而仅注释大约需要3-5秒

从那以后,我决定放弃
owlready2
,尝试
rdflib
。然而,看起来子注释只是作为bNode附加的,我不知道如何通过它们的“父”注释访问它们,或者如果可能的话

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

编辑1:

正如所建议的,以下是本体的一个片段:

    <!-- http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C42610 -->

    <owl:Class rdf:about="http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C42610">
        <rdfs:subClassOf rdf:resource="http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C42698"/>
        <obo:IAO_0000115 xml:lang="en">A shortened form of a word or phrase.</obo:IAO_0000115>
        <oboInOwl:hasDbXref rdf:datatype="http://www.w3.org/2001/XMLSchema#anyURI">https://en.wikipedia.org/wiki/Abbreviation</oboInOwl:hasDbXref>
        <rdfs:label xml:lang="en">abbreviation</rdfs:label>
        <schema:alternateName xml:lang="en">abbreviations</schema:alternateName>
        <Property:P1036 rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">411</Property:P1036>
    </owl:Class>
    <owl:Axiom>
        <owl:annotatedSource rdf:resource="http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#C42610"/>
        <owl:annotatedProperty rdf:resource="https://www.wikidata.org/wiki/Property:P1036"/>
        <owl:annotatedTarget rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">411</owl:annotatedTarget>
        <schema:bookEdition rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">20</schema:bookEdition>
    </owl:Axiom>

单词或短语的缩写形式。
https://en.wikipedia.org/wiki/Abbreviation
缩写
缩写
411
411
20
非常感谢大家

“XPath表达式”是一种指定对XML结构进行搜索的方法,可能能够完成这项工作

见:

如果您有XML结构中的数据,XPath可能会遍历树(对您来说…)并检索感兴趣的节点。

“XPath表达式”是一种指定XML结构搜索的方法,可能能够完成任务

见:


如果您有XML结构中的数据,XPath可能会遍历树(对您来说…)并检索感兴趣的节点。

从您的问题中,我推断“子注释”级别只有一个深度。如果是这种情况,您可以按如下方式执行SPARQL查询:

SELECT ?annProp ?annValue ?subAnn ?subValue
WHERE { 
   ?annProp a owl:AnnotationProperty .
   <the:concept> ?annProp ?annValue . 
   OPTIONAL { ?annValue ?subAnn ?subValue . }
}
SELECT?annProp?annValue?subAnn?subValue
何处{
?annProp a owl:AnnotationProperty。
?annProp?annValue。
可选{?annValue?subAnn?subValue.}
}

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

根据您的问题,我推断“子注释”级别只有一个深度。如果是这种情况,您可以按如下方式执行SPARQL查询:

SELECT ?annProp ?annValue ?subAnn ?subValue
WHERE { 
   ?annProp a owl:AnnotationProperty .
   <the:concept> ?annProp ?annValue . 
   OPTIONAL { ?annValue ?subAnn ?subValue . }
}
SELECT?annProp?annValue?subAnn?subValue
何处{
?annProp a owl:AnnotationProperty。
?annProp?annValue。
可选{?annValue?subAnn?subValue.}
}

这将检索给定概念
的所有注释属性及其值:concept
,如果该注释有“子注释”,它也会检索该子注释。

因此我忽略了明显的。。。我将owlready2从0.18更新到了0.22,现在速度非常快。

所以我忽略了显而易见的。。。我将owlready2从0.18更新到了0.22,现在速度非常快。

这可能是一个脆弱的问题,因为OWL本体可以以多种不同的方式序列化,Protege可以在编辑本体时选择重新排序。通常,在处理OWL本体时,XML不是正确的抽象级别。这可能是一个脆弱的抽象级别,因为OWL本体可以以多种不同的方式序列化,而Protege可以在编辑本体时选择重新排序。通常,在处理OWL本体时,XML不是正确的抽象级别。在OWL2中,实体可以有两种注释:注释断言和批量注释(带有
OWL:Axiom
rdf类型的b节点),这个答案只处理第一种可能性。此外,它不考虑子注释的子注释。。。在java中,有一些API用于处理注释。有python的类似物吗?@ssz我从问题中的示例中假设OP只处理注释断言,正如我在回答中所说的:这确实假设只有一个级别的子注释,同样是因为我有OPs的印象。但是我在这里做一些猜测,因为问题中没有足够的细节。至于Python中的API:我不确定。我个人在Python中没有做过太多语义Web工作。在OWL2中,实体可以有两种注释:注释断言和批量注释(带有
owl:Axiom
rdf类型的b节点),这个答案只处理第一种可能性。此外,它不考虑子注释的子注释。。。在java中,有一些API用于处理注释。有python的类似物吗?@ssz我从问题中的示例中假设OP只处理注释断言,正如我在回答中所说的:这确实假设只有一个级别的子注释,同样是因为我有OPs的印象。但是我在这里做一些猜测,因为问题中没有足够的细节。至于Python中的API:我不确定。我个人在Python中没有做太多语义Web工作。你能从Protege生成的本体中添加一个片段来显示注释和su吗