[英]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" .
這是 python 代碼觸發 SPARQL 查詢
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 ),我發現您可以一個接一個地解析多個文件/網址。 結果是一個合並的文件。 所以知道我感興趣的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 可以跳過下載文件的步驟。 但是我不能這樣做,因為我在公司環境中,並且我看不到將 parse 語句與代理一起使用的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.