我已經從Fuseki 1中加載了一小部分三元組到我的Fuseki 2並分析了網絡日誌。
執行查詢,定式(或相當ARQ)發送到DBpedia的這種(實際上,前綴擴展)的許多疑問:
SELECT *
WHERE
{ { ?personParent dbp:children viaf:58991016 }
UNION
{ viaf:58991016 dbp:parents ?personParent }
}
突然,定式發送此查詢:
SELECT *
WHERE
{ { ?personParent dbp:children <Barack Obama> }
UNION
{ <Barack Obama> dbp:parents ?personParent }
}
上述查詢中的這個奇怪的URI無效。你可以自己查看,點擊「Barack Obama」this page。
Virtuoso返回一個錯誤,Fuseki停止執行。
如果LIMIT
子句沒有被省略,那麼Fuseki在發送錯誤的上述查詢之前從DBpedia中檢索到足夠數量的結果(並且無誤地停止執行)。
我建議一些過濾條件添加到您的查詢:
PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
SELECT DISTINCT ?parentName ?childName
WHERE {
?child owl:sameAs ?personChild ;
foaf:name ?childName .
FILTER (afn:namespace(?personChild) = str(dbpedia:))
SERVICE <http://dbpedia.org/sparql> {
{ ?personParent dbpprop:children ?personChild . }
UNION
{ ?personChild dbpprop:parents ?personParent . }
FILTER (isIRI(?personParent))
}
?parent owl:sameAs ?personParent ;
foaf:name ?parentName .
}
Run it!
結果應該是:
+-------------------------------+----------------------+
| parentName | childName |
+-------------------------------+----------------------+
| "Marie Curie, née Sklodowska" | "Irène Joliot-Curie" |
| "Pierre Curie" | "Irène Joliot-Curie" |
| "Karl Manne Georg Siegbahn" | "Kai M. Siegbahn" |
+-------------------------------+----------------------+
在上面的查詢:
PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
- afn:
前綴declaration Fuseki 1;
FILTER (afn:namespace(?personChild) = str(dbpedia:))
- 過濾掉不正確的URI(以及非DBpedia URI,減少查詢次數);
FILTER (isIRI(?personParent))
- 過濾掉屬性的偶然字面值,稍微減少DBpedia響應大小。
現在我明白了,你爲什麼不直接使用有關諾貝爾獎DBpedia的數據。炫技7條蟲子似乎的DBpedia的數據質量斯庫拉和卡律布狄斯之間的最短路徑,如下所示:
SELECT DISTINCT ?dbpediaChild ?dbpediaParent {
VALUES (?award2) { (dbr:Nobel_Prize_in_Chemistry)
(dbr:Nobel_Prize_in_Physics)
(dbr:Nobel_Peace_Prize)
(dbr:Nobel_Prize_in_Physiology_or_Medicine)
(dbr:Nobel_Prize_in_Literature) }
VALUES (?award1) { (dbr:Nobel_Prize_in_Chemistry)
(dbr:Nobel_Prize_in_Physics)
(dbr:Nobel_Peace_Prize)
(dbr:Nobel_Prize_in_Physiology_or_Medicine)
(dbr:Nobel_Prize_in_Literature) }
?award1 a dbo:Award .
?award2 a dbo:Award .
?dbpediaChild dbo:award/(dbo:wikiPageRedirects*) ?award1 .
?dbpediaParent dbo:award/(dbo:wikiPageRedirects*) ?award2 .
?dbpediaChild dbp:parents|^dbp:children ?dbpediaParent .
}
Run it!
然而,其結果將是唯一的:
+-------------------------+--------------------+
| dbpediaChild | dbpediaParent |
+-------------------------+--------------------+
| dbr:Kai_Siegbahn | dbr:Manne_Siegbahn |
| dbr:Irène_Joliot-Curie | dbr:Marie_Curie |
+-------------------------+--------------------+
這是不是相同的查詢只是沒有'LIMIT'?三重商店是'Fuseki - 版本1.1.0'也許它失敗了,因爲沒有'LIMIT'因爲聯合查詢太昂貴,也許導致超時。實際上,根據實現的不同,在「SERVICE」子句中調用的遠程服務也可能存在問題。 – AKSW
我建議設置您自己的三重商店並在本地加載數據。然後你可以得到更好的錯誤日誌並完全控制。至少加載諾貝爾獎的RDF轉儲不應該那麼耗時。 – AKSW
@AKSW謝謝我要試試這個。 – winter