gpt4 book ai didi

python - 为什么我的查询无法使用 RDFlib 运行

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:23 25 4
gpt4 key购买 nike

我一直在尝试使用 RDFlib (SPARQL) 查询 OWL 数据,但我不明白为什么它不起作用。我在 Protege(SPARQL 查询)中测试了相同的查询,它运行得很好!这是我的代码:

import rdflib
from rdflib import plugin
from rdflib.graph import Graph

g = Graph()
g.parse("/localPath/a.owl")

from rdflib.namespace import Namespace
ns = Namespace("http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf#")

plugin.register(
'sparql', rdflib.query.Processor,
'rdfextras.sparql.processor', 'Processor')
plugin.register(
'sparql', rdflib.query.Result,
'rdfextras.sparql.query', 'SPARQLQueryResult')
#
qres = g.query(
"""
SELECT DISTINCT ?varClass ?varSubClass ?varSubClassComment ?varProperty ?varPropComment
WHERE {
{
?varClass rdf:type owl:Class .
?varProperty rdf:type owl:ObjectProperty ; rdfs:domain ?varClass . OPTIONAL{?varProperty rdfs:comment ?varPropComment} .
OPTIONAL{?varSubClass rdfs:subClassOf ?varClass ; rdfs:comment ?varSubClassComment} .
}
UNION
{
?varClass rdf:type owl:Class .
?varProperty rdf:type owl:DatatypeProperty ; rdfs:domain ?varClass . OPTIONAL{?varProperty rdfs:comment ?varPropComment}.
}
}
"""
, initNs=dict(
ns=Namespace("http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf#")
)
)

for row in qres.result:
#print ("%s %s %s %s %s" % row) # %s represent the fields selected in the query
print row

print (len(qres.result))

我的结果是什么都没有。没有错误,但是结果文件的长度为0。我究竟做错了什么?有人可以帮助我吗?

最佳答案

当我在 sparql.org's query processor 运行此查询(定义了前缀)时,我得到了一堆结果:

PREFIX ns: <http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT DISTINCT ?varClass ?varSubClass ?varSubClassComment ?varProperty ?varPropComment
FROM <http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf>
WHERE {
{
?varClass rdf:type owl:Class .
?varProperty rdf:type owl:ObjectProperty ; rdfs:domain ?varClass . OPTIONAL{?varProperty rdfs:comment ?varPropComment} .
OPTIONAL{?varSubClass rdfs:subClassOf ?varClass ; rdfs:comment ?varSubClassComment} .
}
UNION
{
?varClass rdf:type owl:Class .
?varProperty rdf:type owl:DatatypeProperty ; rdfs:domain ?varClass . OPTIONAL{?varProperty rdfs:comment ?varPropComment}.
}
}

我注意到,您可以使用显着简化此查询,因为您使用union只是为了指定owl:ObjectProperty并且owl:数据类型属性:

PREFIX ns: <http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT DISTINCT ?varClass ?varSubClass ?varSubClassComment ?varProperty ?varPropComment
FROM <http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf>
WHERE {
VALUES ?propertyType { owl:ObjectProperty owl:DatatypeProperty }

?varClass rdf:type owl:Class .
?varProperty rdf:type ?propertyType ;
rdfs:domain ?varClass .
OPTIONAL{ ?varProperty rdfs:comment ?varPropComment }
OPTIONAL{ ?varSubClass rdfs:subClassOf ?varClass ;
rdfs:comment ?varSubClassComment }
}

我不认为您需要在查询中为 http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf 定义任何前缀,因为您在查询中不使用任何此类 namespace 。我假设这就是您要查询的数据集,或者您可能希望结果以该前缀开头(因此定义命名空间可能会使它们的打印输出更好)。

这强烈表明问题在于您实际从 /localPath/a.owl 查询的图表与该数据集不同,或者您正在运行一些过时的数据集RDFlib、rdfextras 或两者的版本。我能够使用 RDFlib 版本 4.0.1 和 rdfextras 0.4 在本地运行您的 Python 代码。

关于python - 为什么我的查询无法使用 RDFlib 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19862430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com