簡體   English   中英

無法通過本地定義的謂詞提取RDF三元組

[英]Cannot extract RDF triple by locally defined predicate

可能我只是無法掌握本體背后的一些基本思想,但這是我的問題。 我正在嘗試從RDF存儲中提取三元組(使用4store,但也嘗試使用XML ArmyKnife),並使用SPARQL查詢指定謂詞並獲取空結果。

為了確保我沒有使用RDF語法弄亂任何東西,我使用LUBM生成的數據(剝離到適合的示例大小)。

<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
  xml:base = "http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl"
  xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
  xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:ub="univ-bench.owl#"
>

<owl:DatatypeProperty rdf:ID="name">
  <rdfs:label>name</rdfs:label>
</owl:DatatypeProperty>

<owl:Class rdf:ID="Organization">
  <rdfs:label>organization</rdfs:label>
</owl:Class>

<owl:Class rdf:ID="University">
  <rdfs:label>university</rdfs:label>
  <rdfs:subClassOf rdf:resource="#Organization" />
</owl:Class>

<ub:University rdf:about="http://www.University0.edu">
   <ub:name>University0</ub:name>
</ub:University>

</rdf:RDF>

然后我運行一個查詢來查看導入后我的數據庫實際包含的三元組:

SELECT * WHERE {?s ?p ?o} ORDERBY ?s

這是結果:

<http://www.University0.edu>    <univ-bench.owl#name>   "University0"
<http://www.University0.edu>    <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <univ-bench.owl#University>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization>         <http://www.w3.org/2000/01/rdf-schema#label>    "organization"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization>     <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <http://www.w3.org/2002/07/owl#Class>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University>       <http://www.w3.org/2000/01/rdf-schema#subClassOf>       <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University>       <http://www.w3.org/2000/01/rdf-schema#label>    "university"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University>       <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <http://www.w3.org/2002/07/owl#Class>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#name>     <http://www.w3.org/2000/01/rdf-schema#label>    "name"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#name>     <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <http://www.w3.org/2002/07/owl#DatatypeProperty>

很明顯我將<univ-bench.owl#name>謂詞作為第一個三元組的一部分。

然而,以下查詢返回沒有結果:

SELECT * WHERE {?s <univ-bench.owl#name> ?o}

我已經嘗試了幾十種組合,使用名稱空間和沒有,但無法使其工作。 任何人都可以解釋為什么RDF引擎找不到明顯存在的謂詞嗎?

順便說一句,用OBJECT =“University0”提取相同的三元組工作正常。

這是無效的:

xmlns:ub="univ-bench.owl#"

名稱空間URI在RDF / XML中必須是絕對的。 (它們可以是其他語法中的相對,如Turtle,但不能在RDF / XML中。)如果您的示例確實是由LUBM直接生成的,那么LUBM就會被破壞。 這應該工作:

xmlns:ub="http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#"

當然,你需要在SPARQL查詢中匹配該URI,如@RobV所說。

我懷疑您的問題是您沒有嘗試匹配查詢中的正確URI:

SELECT * WHERE {?s <univ-bench.owl#name> ?o}

括號中包含的任何內容都被視為URI,因為您使用了相對 URI,SPARQL處理器可以根據某個任意基礎解析它,導致絕對 URI與數據中的URI不同,因此您的查詢將不匹配任何內容。

您需要做的是指定完整的URI,如下所示:

SELECT * WHERE {?s <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#name> ?o}

或者像這樣使用前綴:

PREFIX ub: <univ-bench.owl#>
SELECT * WHERE { ?s ub:name ?o }

如果這些都不起作用,那么我懷疑它是相對URI的一些問題。 我的建議永遠不會使用相對URI,盡可能使用絕對URI。 如果必須使用相對URI,請始終明確指定基本URI,即確保您的數據使用絕對URI,將其重新加載到商店中並重試。

您可以使用RDF / XML中的xml:base="http://example.org"或SPARQL中的BASE <http://example.org/> 如果使用4store,我相信他們的importer命令行有參數,可用於設置何時指定none的默認基URI。

您可能想要做的另一件事是嘗試將您的數據放入不同的三元組商店,看看您是否遇到相同的行為,如果您這樣做,這將意味着相對於絕對URI的問題,正如我所建議的那樣。 如果其他商店回復查詢很好,這表明可能存在4store的錯誤,在這種情況下,您應該在他們的郵件列表上聯系他們 - http://groups.google.com/group/4store-support

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM