当标签不在本体中,但可以在URI中找到时,从owl本体中提取标签。

问题描述 投票:0回答:1

由于我是语义技术的新手,请耐心等待。

我正在尝试使用 rdflib 来从本体的类中提取标签。然而有些本体并不包含标签本身,而是有其他本体的类的URI。如何从外部本体的URI中提取标签呢?

我的尝试背后的直觉集中在识别本地不包含标签的类(如果这是正确的说法的话),然后 "跟踪 "它们的URI到外部本体来提取标签。然而我实现的方式并不奏效。

import rdflib

g = rdflib.Graph()

# I have no trouble extracting labels from this ontology:
# g.load("http://purl.obolibrary.org/obo/po.owl#")
# However, this ontology contains no labels locally:
g.load("http://www.bioassayontology.org/bao/bao_complete.owl#")


owlClass = rdflib.namespace.OWL.Class
rdfType = rdflib.namespace.RDF.type

for s in g.subjects(predicate=rdfType, object=owlClass):
    # Where label is present...
    if g.label(s) != '':
        # Do something with label...
        print(g.label(s))

    # This is what I have added to try to follow the URI to the external ontology.
    elif g.label(s) == '':
        g2 = rdflib.Graph()
        g2.parse(location=s)
        # Do something with label...
        print(g.label(s))


我是否采取了完全错误的方法?感谢所有的帮助! 谢谢您的帮助。

python-3.x owl rdflib
1个回答
1
投票

我认为你可以比这更有效。你试图做一个网络请求,远程本体下载和搜索。每次 中没有给定标签的URI。http://www.bioassayontology.org/bao/bao_complete.owl 这是其中的大部分,而且是一个非常大的数字。所以,你的脚本会花很长时间,并且会让交付这些远程本体的web服务器崩溃。

看一下 http://www.bioassayontology.org/bao/bao_complete.owl我看到那里大多数没有标签的URI都来自OBO,也许还有一些其他的本体,但大多数是OBO。

你应该做的是下载一次OBO,然后用RDFlib加载它。然后,如果你在加入(联合)图上运行上面的脚本,就会发现 http://www.bioassayontology.org/bao/bao_complete.owl &OBO,你将拥有OBO所有的内容,让你的指尖上。g.label(s) 会发现标签的比例更高。

也许还有其他几个源头本体提供标签,为 http://www.bioassayontology.org/bao/bao_complete.owl 你可能也需要,但我快速浏览后发现只有OBO。

© www.soinside.com 2019 - 2024. All rights reserved.