2016-07-26 51 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 " ") . 
    } 
}