2016-07-26 54 views
0

我試圖使用函數apf:strsplit來拆分數據類型屬性的值。我尋找了一些例子,但是,在我的情況下fuseki返回一個錯誤。如何在Jena中使用apf:strsplit:fuseki

我的查詢:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX dbo: <http://dbpedia.org/> 
PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX apf: <http://jena.hpl.hp.com/ARQ/property#> 
prefix xsd: <http://www.w3.org/2001/XMLSchema#> 

select ?s ?member 
where{ 
    ?s a dbo:MusicalArtist . 
    ?s dbp:hometown ?p . 
    {select ?member 
    where{ 
     ?member apf:strSplit(?p " ") . 
    } 
    } 
} 

結果:

Error 500: ?/p is not a literal node 
Fuseki - version 2.3.1 (Build date: 2015-12-08T09:24:07+0000) 

我的情況的呢?例如:

<http://example.com/resource/6> 
    rdf:type dbo:Actor ; 
    rdf:type dbo:MusicalArtist ; 
    rdf:type dbo:Person ; 
    rdf:type owl:NamedIndividual ; 
    dbo:bloodGroup "n"@en ; 
    dbo:spouse <http://example.com/resource/11> ; 
    dbo:spouseName "Angelina Jolie" ; 
    dbp:hometown "Dallas"^^xsd:string ; 
    foaf:name "Brad Pettitt" ; 
. 
<http://example.com/resource/17> 
    rdf:type dbo:MusicalArtist ; 
    rdf:type owl:NamedIndividual ; 
    dbp:hometown "El Paço"^^xsd:string ; 
    foaf:name "Harrison Ford" ; 
. 

當我變化p由 「其他文本」,它的工作原理和結果在:

1 <http://example.com/resource/6> "other" 
2 <http://example.com/resource/6> "text" 
3 <http://example.com/resource/3> "other" 
4 <http://example.com/resource/3> "text" 

我試過把str(?p),?p ^^ xsd:string?p ^^ xsd:literal但是沒什麼用。 我在網上看了一下,但我沒有找到任何可以使用的東西。

有人有一些建議如何解決這個問題?我不知道:-(任何幫助將非常感激。在進步

感謝,

問候,

瓦萊裏婭

+0

我猜'dbp:hometown'的值並不總是一個文字。如果你從DBpedia獲取數據,你應該知道'http:// dbpedia.org/property /'命名空間的屬性沒有輸入,即對象和數據屬性沒有區別,因此,該值可以是一個URI和一個文字。 – AKSW

+0

您是否需要使用子選擇或者是什麼原因?如果你使用'apf:strSplit(str(?p)「),會發生什麼情況。 ' – AKSW

+0

我認爲在使用strSplit時有必要使用嵌套查詢。我錯了。 – ValQc

回答

2

你有一個嵌套的選擇將進行評估,結果相結合與前面的部分 - SELECT ?member隱藏?p裏面 - 實際上它是一個不同的變量(和ARQ重命名爲?/p

只需刪除內部SELECT:

select ?s ?member 
where{ 
    ?s a dbo:MusicalArtist . 
    ?s dbp:hometown ?p . 
    ?member apf:strSplit(?p " ") . 
    } 
}