繁体   English   中英

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

[英]How can one extract rdf:about or rdf:ID properties from triples using SPARQL?

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

我通过在WHERE子句中编写语句尝试了朴素的方法,例如:

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

我希望我很精确。

您正在犯一个典型的错误:将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>

将其插入验证器 ,您将获得:

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社区通常首选Turtle。

PS rdfs:about在任何地方都不存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM