数据格式
首先,我们需要明确查询的是什么数据。SPARQL 查询 RDF 图。RDF 图是一组三元组(Jena 将 RDF 图称为 “模型”,将三元组称为 “语句”,因为在设计 Jena API 之初就是这么称呼它们的)。
重要的是要认识到,重要的是三元组,而不是序列化。序列化只是写下三元组的一种方式。RDF/XML 是 W3C 推荐的方式,但在序列化形式下很难看到三元组,因为有多种方式可以对同一图形进行编码。 在本教程中,我们使用一种更 "类似于三元组 "的序列化,称为 Turtle(另见 W3C 语义网入门中描述的 N3 语言)。
我们将从 vc-db-1.rdf 中的简单数据开始:该文件包含了许多关于人物的 vCard 描述的 RDF。vCard 在 RFC2426 中进行了描述,RDF 的转换方式在 W3C 的注释《在 RDF/XML 中表示 vCard 对象》中进行了说明。我们的示例数据库只包含一些姓名信息。
从图表上看,数据是这样的:
在三元组中,这可能是这样的
@prefix vCard: <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <#> .
<http://somewhere/MattJones/>
vCard:FN "Matt Jones" ;
vCard:N [ vCard:Family
"Jones" ;
vCard:Given
"Matthew"
] .
<http://somewhere/RebeccaSmith/>
vCard:FN "Becky Smith" ;
vCard:N [ vCard:Family
"Smith" ;
vCard:Given
"Rebecca"
] .
<http://somewhere/JohnSmith/>
vCard:FN "John Smith" ;
vCard:N [ vCard:Family
"Smith" ;
vCard:Given
"John"
] .
<http://somewhere/SarahJones/>
vCard:FN "Sarah Jones" ;
vCard:N [ vCard:Family
"Jones" ;
vCard:Given
"Sarah"
] .
或者更明确地说是三元组:
@prefix vCard: <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
<http://somewhere/MattJones/> vCard:FN "Matt Jones" .
<http://somewhere/MattJones/> vCard:N _:b0 .
_:b0 vCard:Family "Jones" .
_:b0 vCard:Given "Matthew" .
<http://somewhere/RebeccaSmith/> vCard:FN "Becky Smith" .
<http://somewhere/RebeccaSmith/> vCard:N _:b1 .
_:b1 vCard:Family "Smith" .
_:b1 vCard:Given "Rebecca" .
<http://somewhere/JohnSmith/> vCard:FN "John Smith" .
<http://somewhere/JohnSmith/> vCard:N _:b2 .
_:b2 vCard:Family "Smith" .
_:b2 vCard:Given "John" .
<http://somewhere/SarahJones/> vCard:FN "Sarah Jones" .
<http://somewhere/SarahJones/> vCard:N _:b3 .
_:b3 vCard:Family "Jones" .
_:b3 vCard:Given "Sarah" .
RDF数据中使用的 :b0、:b1、_:b2 等形式的节点标识是用于表示匿名节点的一种方式。在RDF数据中,有时我们需要表示一些没有具体URI标识的节点,这些节点在数据中仅用于建立关系和连接。由于这些节点没有具体的URI,所以使用 _:b0 这样的形式来表示,其中 _ 是表示匿名节点的前缀,b0 是该节点的标识符。
在RDF数据中,这些匿名节点通常用于描述复杂的关系或属性,而不需要给它们分配一个具体的URI。这种方式可以帮助简化数据表示,特别是当我们关注的是关系和连接时,而不是节点的具体标识。
重要的是要认识到,这些都是同一个 RDF 图,图中的三元组没有特定的顺序。 它们只是以相关组的形式写在上面,供人类读者阅读,机器并不关心。
Jena 官方文档:https://jena.apache.org/tutorials/sparql_data.html