当前位置: 首页 > 知识库问答 >
问题:

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

卓正业
2023-03-14

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

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

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

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

我开始使用owlready2包,但它要求您html" target="_blank">自定义每个单独的注释属性(您不能仅仅获得所有注释属性的列表,因此如果添加类似random_identifier的属性,您必须返回代码并添加entity.random_identifier,否则将不会获得它)。这工作正常,它非常快,但是子注释需要加载IRI,然后搜索它:

random_prop = IRIS['http://schema.org/fillerName']
sub_annotation = x[entity, random_prop, annotation_label]

这是非常慢的,加载搜索大约140个子注释类型需要5-10分钟,而只搜索注释大约需要3-5秒。

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

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

    <!-- 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>

太感谢你们了!

共有1个答案

祁柏
2023-03-14

从你的问题中,我认为“次注释”的层次只有一个深。如果是这种情况,您可以执行SPARQL查询,如下所示:

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

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

 类似资料:
  • 问题内容: 我对Java 5注释有点陌生,我很好奇这两种方法是否可行: 此注释将为您生成一个简单的getter和setter。 该注解表明变量是粗野,空,这样你就不必每次都写样板代码。 这些都可以吗?如果可能的话,它们似乎是我要为其编写注释的第一件事。由于我在阅读文档时对这些内容了解不多,因此我假设注释并不是真正的含义。这里的任何方向将不胜感激。 问题答案: 注释处理发生在抽象语法树上。这是解析器

  • c#中的等价物是: 我只评论了一行的一部分,这样我就不会忘记我做的小加法,我可以通过删除/*和*/来重新激活它 我想在Excel的VBA中也这样做: 我认为没有办法直接做到这一点。尽管如此,能够评论部分内容还是非常有用的。。。 有没有办法至少模拟一下?

  • 我正试图写一个程序,可以下载视频从Reddit帖子。我相信Reddit会分别存储每个帖子的音频和视频,所以我现在正在下载mp3和mp4,然后将它们结合起来制作最终的视频文件。我不太熟悉音频或视频文件或它们是如何存储的,但我认为将两者结合起来会很快计算出来。 然而,合并部分是非常缓慢的,我想知道是否有一个更快的方式,将无声的视频剪辑与音频文件结合,并将其写入我的驱动器? 我目前正在使用moviepy

  • 是否允许在一个方法中使用多个@scheduled注释?

  • 给定项目Reactor的通量或Mono,有没有办法让通量或Mono打印出操作链的样子。例如,下面给出了代码。 有没有办法让flux打印出处理管道中链接的所有操作员的列表?一些漂亮的ascii格式文本或大理石图? printTheFlux(通量)应该制作一个很好的打印输出,显示上面示例中所有运算符的结构。我不期望在lambda中生成代码只是一种查看哪些运算符链接在一起的方式。

  • 问题内容: 我在Service类中看到了一种被标记为的方法,但是它也在同一类中调用了其他未标为的方法。 这是否意味着对单独方法的调用导致应用程序打开与DB的单独连接或暂停父事务等? 不带任何注释的方法的默认行为是什么,而另一个带有注释的方法调用该方法的默认行为是什么? 问题答案: 当你调用没有事务块之内的方法时,父事务将继续使用新方法。它将使用与父方法(with )相同的连接,以及在调用的方法中导