空 SPARQL 查询结果
Empty SPARQL Query Result
正在尝试 运行 针对本地 ttl 文件的 SPARQL 查询。我以前成功地做到了这一点,但不是这个。我怀疑它与名称空间有关。
尝试打印出查询内容,但我得到的只是 "rdflib.plugins.sparql.processor.SPARQLResult at 0x1fbe05d3400" 所以那里有东西。
这是ttl文件
# filename: ex050.ttl
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
<http://www.learningsparql.com/ns/demo#i93234>
foaf:nick "Dick" ;
foaf:givenname "Richard" ;
foaf:mbox "richard49@hotmail.com" ;
foaf:surname "Mutt" ;
foaf:workplaceHomepage <http://www.philamuseum.org/> ;
foaf:aimChatID "bridesbachelor" .
这是触发 SPARQL 查询的 python 代码
filename = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/ex050.ttl"
import rdflib
g = rdflib.Graph()
result = g.parse(filename, format='ttl')
query = """
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?propertyLabel ?value
WHERE
{
?s ?property ?value .
?property rdfs:label ?propertyLabel .
}
"""
results=g.query(query)
print('Results!')
for row in results:
print(row)
我知道我搞砸了一些基本的事情。请帮忙!
好的 - 仔细阅读 RDFILB 规范 (https://buildmedia.readthedocs.org/media/pdf/rdflib/4.2.1/rdflib.pdf),我发现您可以一个接一个地解析多个 files/urls。结果是一个合并文件。所以知道我感兴趣的 foaf 文件可以在
http://www.xmlns.com/foaf/spec/index.rdf
我得到了文件,然后将程序修改为:
filename = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/ex050.ttl"
filename2 = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/index.rdf"
g = rdflib.Graph()
g.parse(filename, format='ttl')
g.parse(filename2)
query = """
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?propertyLabel ?value
WHERE
{
?s ?property ?value .
?property rdfs:label ?propertyLabel .
}
"""
results=g.query(query)
print('Results!')
for row in results:
print(row)
然后成功了,打印出来:
Results!
(rdflib.term.Literal('Given name'), rdflib.term.Literal('Richard'))
(rdflib.term.Literal('Surname'), rdflib.term.Literal('Mutt'))
(rdflib.term.Literal('AIM chat ID'), rdflib.term.Literal('bridesbachelor'))
(rdflib.term.Literal('personal mailbox'), rdflib.term.Literal('richard49@hotmail.com'))
(rdflib.term.Literal('workplace homepage'), rdflib.term.URIRef('http://www.philamuseum.org/'))
(rdflib.term.Literal('nickname'), rdflib.term.Literal('Dick'))
打印出原始数据文件中所有人类可读属性的标签,即使我没有定义这些属性。
我想直接在第二个解析语句中使用URL可以跳过下载文件的步骤。但是我不能这样做,因为我在公司环境中,而且我没有看到将解析语句与代理一起使用的方法。
正在尝试 运行 针对本地 ttl 文件的 SPARQL 查询。我以前成功地做到了这一点,但不是这个。我怀疑它与名称空间有关。
尝试打印出查询内容,但我得到的只是 "rdflib.plugins.sparql.processor.SPARQLResult at 0x1fbe05d3400" 所以那里有东西。
这是ttl文件
# filename: ex050.ttl
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
<http://www.learningsparql.com/ns/demo#i93234>
foaf:nick "Dick" ;
foaf:givenname "Richard" ;
foaf:mbox "richard49@hotmail.com" ;
foaf:surname "Mutt" ;
foaf:workplaceHomepage <http://www.philamuseum.org/> ;
foaf:aimChatID "bridesbachelor" .
这是触发 SPARQL 查询的 python 代码
filename = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/ex050.ttl"
import rdflib
g = rdflib.Graph()
result = g.parse(filename, format='ttl')
query = """
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?propertyLabel ?value
WHERE
{
?s ?property ?value .
?property rdfs:label ?propertyLabel .
}
"""
results=g.query(query)
print('Results!')
for row in results:
print(row)
我知道我搞砸了一些基本的事情。请帮忙!
好的 - 仔细阅读 RDFILB 规范 (https://buildmedia.readthedocs.org/media/pdf/rdflib/4.2.1/rdflib.pdf),我发现您可以一个接一个地解析多个 files/urls。结果是一个合并文件。所以知道我感兴趣的 foaf 文件可以在 http://www.xmlns.com/foaf/spec/index.rdf
我得到了文件,然后将程序修改为:
filename = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/ex050.ttl"
filename2 = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/index.rdf"
g = rdflib.Graph()
g.parse(filename, format='ttl')
g.parse(filename2)
query = """
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?propertyLabel ?value
WHERE
{
?s ?property ?value .
?property rdfs:label ?propertyLabel .
}
"""
results=g.query(query)
print('Results!')
for row in results:
print(row)
然后成功了,打印出来:
Results!
(rdflib.term.Literal('Given name'), rdflib.term.Literal('Richard'))
(rdflib.term.Literal('Surname'), rdflib.term.Literal('Mutt'))
(rdflib.term.Literal('AIM chat ID'), rdflib.term.Literal('bridesbachelor'))
(rdflib.term.Literal('personal mailbox'), rdflib.term.Literal('richard49@hotmail.com'))
(rdflib.term.Literal('workplace homepage'), rdflib.term.URIRef('http://www.philamuseum.org/'))
(rdflib.term.Literal('nickname'), rdflib.term.Literal('Dick'))
打印出原始数据文件中所有人类可读属性的标签,即使我没有定义这些属性。
我想直接在第二个解析语句中使用URL可以跳过下载文件的步骤。但是我不能这样做,因为我在公司环境中,而且我没有看到将解析语句与代理一起使用的方法。