如何使用SPARQL从triples中提取rdf:about或rdf:ID属性?

时间:2010-05-03 20:12:49

标签: java rdf semantic-web triplestore rdfs

一开始这似乎是一件小事,但到目前为止,我还没有设法使用SPARQL获取给定资源的唯一标识符。我的意思是,例如rdf:Description rdf:about="http://...",然后是一些标识此资源的属性,我想要做的是首先找到这个资源,然后检索所有给出一些URI的三元组。

我通过在WHERE条款中编写语句来尝试天真的方法,例如:

?x rdf:about ?y and ?x rdfs:about ?y

我希望我是准确的。

1 个答案:

答案 0 :(得分:6)

你犯了一个经典的错误:将RDF(这是SPARQL查询的)与其序列化(一个)混淆,即RDF / XML。 rdf:about(和rdf:IDrdf:Descriptionrdf:resource)是RDF / XML的一部分,这是RDF写下来的一种方式。您可以使用RDF Validator来查看RDF / XML的RDF三元组。

在你的情况下,让我们从:

开始
<?xml version="1.0"?>
<rdf:RDF 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/terms/">
  <rdf:Description rdf:about="http://www.example.org/">
    <dc:title>Example for Donal Fellows</dc:title> 
  </rdf:Description>
</rdf:RDF>

将其插入the validator即可获得:

Number      Subject                      Predicate                        Object
1           http://www.example.org/      http://purl.org/dc/terms/title   "Example for Donal Fellows"

(你也可以要求图片表示)

请注意,rdf:about不存在:其值提供三元组的主题。

如何查询以查找与http://www.example.org相关联的属性?像这样:

select * {
    <http://www.example.org/> ?predicate ?object
}

你会得到:

?predicate                        ?object
<http://purl.org/dc/terms/title>  "Example for Donal Fellows"

您会注意到,在我们要查找值的位置,查询是与变量(?v)的三重匹配。我们还可以通过询问:

询问谓词链接http://www.example.org/"Example for..."
select * {
    <http://www.example.org/> ?predicate "Example for Donal Fellows"
}

此模式匹配是SPARQL的核心。

RDF / XML是一个棘手的野兽,您可能会发现更容易使用N-Triples,这是非常详细但很清楚,或turtle,就像N-Triples有大量的简写和缩写。 rdf社区通常更喜欢海龟。

P.S。 <{1}}在任何地方都不存在。