RDF是一种有向的、有标签的图形数据格式,用于表示信息在网络中。该规范定义了RDF的SPARQL查询语言。SPARQL可用于表示查询跨不同的数据源,无论数据是以RDF的形式本地存储还是通过中间件被视为RDF。SPARQL包含查询功能必需和可选图形模式及其连接词和分离。SPARQL还支持可扩展的值测试和通过源RDF图约束查询。SPARQL查询的结果可以是结果集或RDF图。
RDF是一种有向的、有标签的图形数据格式,用于表示信息在Web上。RDF通常用于表示个人信息信息、社交网络、数字制品元数据,以及提供不同信息源的集成方法。该规范定义了SPARQL查询的语法和语义RDF语言。
RDF的SPARQL查询语言旨在满足用例和需求由RDF数据访问工作组在
RDF数据访问使用案例和要求[UCNR公司].
SPARQL查询语言与以下规范密切相关:
除非章节标题中另有说明,否则本文件中的所有章节和附录均为规范性文件。
文件的这一节,第1部分,介绍SPARQL查询语言规范。它介绍了本规范的组织结构文件和整个规范中使用的约定。
第2节规范的介绍了SPARQL查询语言本身通过一系列示例查询和查询结果。第3节继续SPARQL查询语言的介绍以及更多示例演示SPARQL表达RDF术语约束的能力出现在查询结果中。
第4节显示了SPARQL查询语言语法的详细信息。它是一个与语言的完整语法配套,并定义语法构造表示IRI、空白节点、文字和变量。第4节还定义了用作语法糖更详细的表达。
第5节介绍了基本图形模式和组图形模式更复杂的SPARQL查询模式的构建块构建。第6、7和8节提供了结合SPARQL的构造将图形模式转换为更大的图形模式。特别地,第6节引入了使部分查询成为可选的功能;第7节介绍了表示可选图析取的能力模式;和第8节引入了约束查询特定的源图形。第8节还介绍了SPARQL定义查询源图的机制。
第9节通过定义影响查询解决方案的构造从解决方案的顺序。
第10节定义生成结果的四种SPARQL查询类型以不同的形式。
第11节定义了SPARQL的可扩展价值测试框架显示了可用于约束出现在查询结果中的值。
第12节是SPARQL图求值的形式化定义模式和解决方案修改器。
附录A包含SPARQL查询的规范定义语言的语法,由EBNF符号表示的语法给出。
在本文档中,示例假设以下命名空间前缀绑定,除非另有说明:
前缀 |
爱尔兰共和国 |
rdf: |
http://www.w3.org/1999/02/22-rdf-syntax-ns# |
关系型文件: |
http://www.w3.org/2000/01/rdf-schema# |
xsd格式: |
http://www.w3.org/2001/XMLSchema# |
fn: |
http://www.w3.org/2005/xpath-functions网站# |
本文档使用乌龟[乌龟]数据格式以显式显示每个三元组。Turtle允许IRI缩写为前缀:
@前缀dc:<http://purl.org/dc/elements/1.1/> .@前缀:<http://example.org/book/> .:book1 dc:title“SPARQL教程”。
结果集以表格形式显示。
“绑定”是一对(变量,RDF术语). 在这个结果集中,有三个变量:x个
,年
和z(z)
(显示为列标题)。每个解决方案在表体中显示为一行。这里有一张单人床解决方案,其中变量x个
已绑定到“爱丽丝”
,变量年
已绑定到<http://示例/a>
、和变量z(z)
未绑定到RDF术语。变量不需要绑定在解决方案。
1.2.4术语
SPARQL语言包括IRI,这是RDFURI引用的子集,省略了空格。请注意,所有IRI在SPARQL中,查询是绝对的;它们可以包含也可以不包含片段标识符[RFC3987号文件第3.1节]。IRI包括URI[RFC3986协议]和URL。缩写表格(相对IRI和前缀名称)在SPARQL语法中,解析为生成绝对值个人退休保险。
以下术语定义于RDF公司概念和抽象语法 [概念]和已使用在SPARQL中:
大多数形式的SPARQL查询都包含一组称为基本图形模式三元组模式与RDF三元组类似,只是主语、谓语和宾语中的每一个都可能是变量。基本图形模式比赛RDF数据的子图,当RDF术语从该子图可以替换变量,结果是RDF图等价于子图。
下面的示例显示了一个SPARQL查询,用于从给定数据图。查询由两部分组成:这个选择
子句标识显示在查询结果中的变量,以及哪里
条款提供与数据图匹配的基本图形模式。本例中的基本图形模式由单一变量的单一三重模式组成(?标题
)在对象位置。
数据:
<http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title>“SPARQL教程”。
查询:
选择?标题哪里{<http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> ?标题。}
针对上述数据的此查询有一个解决方案:
查询结果:
查询的结果是溶液序列,对应于查询的图形模式与数据匹配。可能有查询的一个、零个、一个或多个解决方案。
数据:
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Johnny Lee Outlaw”。_:a foaf:mbox<mailto:jlow@example.com> ._:b foaf:姓名“Peter Goodguy”。_:b foaf:mbox<邮寄地址:peter@example.org> ._:c foaf:mbox<mailto:carol@example.org> .
查询:
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购哪里{?x foaf:name?name。?foaf:mbox?管理层收购}
查询结果:
名称 |
管理层收购 |
“约翰尼·李出逃” |
<邮寄地址:jlow@example.com> |
“彼得·古德盖伊” |
<邮寄地址:peter@example.org> |
每个解决方案都提供了一种绑定所选变量的方法以使查询模式与数据匹配。结果集给出所有可能的解决方案。在上述示例中,以下两个数据子集提供了这两个匹配项。
_:a foaf:name“Johnny Lee Outlaw”。_:a foaf:box<邮箱:jlow@example.com> .
_:b foaf:姓名“Peter Goodguy”。_:b foaf:box<邮寄地址:peter@example.org> .
这是一个基本图形模式匹配; 所有的每个解决方案中都必须绑定查询模式中使用的变量。
以下数据包含三个RDF文本:
@前缀dt:<http://example.org/datatype#> .@前缀ns:<http://example.org/ns#> .@前缀:<http://example.org/ns#> .@前缀xsd:<http://www.w3.org/2001/XMLSchema#> .
:x ns:p“猫”@en。:y ns:p“42”^^xsd:integer。:z ns:p“abc”^^dt:特殊数据类型。
注意,在海龟中,“猫”@en
是具有词法形式“cat”和语言的RDF文本英语
;“42”^^xsd:integer
是具有数据类型的类型化文字http://www.w3.org/2001/XMLSchema#integer
; 和“abc”^^dt:特殊数据类型
是具有数据类型的类型化文字http://example.org/datatype#specialDatatype
.
此RDF数据是第2.3.1–2.3.3节中查询示例的数据图。
SPARQL中的语言标记使用@
和语言标记,如中所定义最佳惯例47[第47页].
以下查询没有解决方案,因为“猫”
不是与相同的RDF文本“猫”@en
:
选择?v何处{?v?p“cat”}
但下面的查询将找到一个解决方案,其中变量v(v)
已绑定到:x
因为指定了语言标记并与给定数据相匹配:
选择?v何处{?v?p“cat”@en}
v(v) |
<http://example.org/ns#x> |
SPARQL查询中的整数表示数据类型为RDF类型的文字xsd:整数
。例如:42
是缩写形式第页,共页"42"^^<http://www.w3.org/2001/XMLSchema#integer>
.
以下查询中的模式有一个带变量的解决方案v(v)
绑定到:y
.
选择?v何处{?v?p 42}
v(v) |
<http://example.org/ns#y> |
第4.1.2节为定义SPARQL缩写形式xsd:浮点
和xsd:双精度
.
以下查询的解决方案包含变量v(v)
绑定到:z
。查询处理者不必了解数据类型空间中的值。因为词汇形式和数据类型IRI都匹配,文字匹配。
选择?v何处{?v?p“abc”^^<http://example.org/datatype#specialDatatype> }
v(v) |
<http://example.org/ns#z> |
查询结果可以包含空白节点。示例中的空白节点本文档中的结果集以以下形式编写“_:”后跟一个空白节点标签。
空白节点标签的作用域为结果集(如“SPARQL公司查询结果XML格式“)或,对于施工
查询形式,结果图。在结果集指示相同的空白节点。
数据:@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:b foaf:名称“Bob”。
查询:前缀foaf:<http://xmlns.com/foaf/0.1/>选择?x?个?名称WHERE{?x foaf:name?name}
上面的结果同样可以用不同的空白节点标签给出,因为结果中的标签仅指示解决方案中的RDF项是否相同或不同。
这两个结果具有相同的信息:用于匹配两种解决方案中的查询不同。在标签_:a
结果集中和数据图中的空白节点标签相同。
应用程序编写器不应期望查询中的空白节点标签引用数据中的特定空白节点。
SPARQL有几个查询表单.这个选择
查询表单返回变量绑定。这个施工
查询表单返回RDF图。图形是基于模板构建的用于根据匹配结果生成RDF三元组查询的图形模式。
数据:
@前缀org:<http://example.com/ns#> ._:a org:employeeName“Alice”。_:a组织:employeeId 12345。_:b org:employeeName“Bob”。_:b org:employeeId 67890。
查询:
前缀foaf:<http://xmlns.com/foaf/0.1/>PREFIX组织:<http://example.com/ns#>构造{?x foaf:name?name}WHERE{?x org:employeeName?name}
结果:
@前缀组织:<http://example.com/ns#> ._:x foaf:名称“Alice”。_:y foaf:name“鲍勃”。
可以在中序列化RDF/XML作为:
<rdf:rdfxmlns:rdf=“http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:foaf=“http://xmlns.com/foaf/0.1/"><rdf:说明>Alice(爱丽丝)</rdf:说明><rdf:说明>鲍勃</rdf:说明></rdf:rdf>
图形模式匹配产生一个解决方案序列,其中每个解决方案都有一组变量到RDF术语的绑定。SPARQL公司过滤器
秒将解决方案限制为筛选器表达式计算结果为的解决方案真的
.
本节对SPARQL进行了非正式介绍过滤器
s;它们的语义在中定义第11条。测试值。本节中的示例共享一个输入图:
数据:@前缀dc:<http://purl.org/dc/elements/1.1/> .@前缀:<http://example.org/book/> .@前缀ns:<http://example.org/ns#> .:book1 dc:title“SPARQL教程”。:book1ns:价格42。:book2 dc:title“语义网”。:book2 ns:价格23。
SPARQL公司过滤器
功能,如正则表达式
可以测试RDF文本。正则表达式
仅匹配普通没有语言标记的文字。正则表达式
可以用来匹配其他文字的词汇形式使用字符串功能。
查询:
前缀dc:<http://purl.org/dc/elements/1.1/>选择?标题WHERE{?x dc:title?titleFILTER正则表达式(?title,“^SPARQL”)}
查询结果:
使用“我
" 标志。
查询:
前缀dc:<http://purl.org/dc/elements/1.1/>选择?标题WHERE{?x dc:title?title过滤器正则表达式(?title,“web”,“i”)}
查询结果:
正则表达式语言是由XQuery 1.0和XPath 2.0函数和运算符定义并且基于XML架构正则表达式.
SPARQL公司过滤器
s可以限制算术表达式。
查询:
前缀dc:<http://purl.org/dc/elements/1.1/>前缀ns:<http://example.org/ns#>选择?标题?价格WHERE{?x ns:价格?价格。过滤器(价格<30.5)?x dc:标题?标题。}
查询结果:
通过约束价格
变量,仅限:书籍2
比赛查询,因为只有:书籍2
价格低于30.5
, 根据过滤条件的要求。
除了数字类型,SPARQL支持类型xsd:string
,xsd:布尔值
和xsd:dateTime(日期时间)
(请参见11.1操作数数据类型).11.3操作员映射列出了一组测试功能,包括绑定
,是文学
和语言匹配
和访问器,包括STR公司
,郎
和数据类型
.11.5构造函数功能列出了SPARQL语言中的一组XML模式构造函数函数,用于将值从一种类型转换为另一种类型。
本节介绍SPARQL用于RDF术语和三重模式.完整语法在中给出附录A.
这个IRI参考生产指定一组IRI[RFC3987号文件]; IRI是URI的泛化[RFC3986协议]和与URI和URL完全兼容前缀名称production指定带前缀的名称。下面描述了从前缀名称到IRI的映射。IRI参考(相对或绝对IRI)由IRI_参考生产,其中“<”和“>”分隔符不构成IRI引用的一部分。相对IRI与第2.2节ABNF中IRI参考和IRI的相对参考相匹配[RFC3987号文件]并按如下所述解析为IRI。
RDF概念和抽象语法中定义的RDF术语集包含RDF URI引用,而SPARQL术语包含IRI.RDF URI包含“<
", ">
", '"
'(双引号),空格,“{
", "}
", "|
","\
", "^
“、和"`
“不是IRI。针对RDF的SPARQL查询的行为未定义由此类RDF URI引用组成的语句。
这个前缀
关键字将前缀标签与IRI关联。前缀name是前缀标签和本地部分,由冒号分隔“:
". 通过连接与前缀相关联的IRI和本地部分,前缀名称被映射到IRI。前缀标签或本地部分可能为空。请注意SPARQL本地名称允许前导数字XML本地名称不要。
相对IRI与基础IRI组合如下统一资源标识符(URI):通用语法[RFC3986协议]只使用基本第5.2节中的算法。既不是基于语法的规范化,也不是基于模式的规范化(如RFC3986第6.2.2和6.2.3节所述)。其他字符IRI引用中允许的字符与未保留字符的处理方式相同根据第6.5节,在URI引用中处理国际化资源标识符(IRI)[RFC3987号文件].
这个基础
关键字定义用于解析相对IRI的基本IRI根据RFC3986第5.1.1节“嵌入内容中的基本URI”。第5.1.2节,“基础来自封装实体的URI“定义了基本IRI如何来自封装文档,例如带有xml:base指令或mime多部分的SOAP信封具有“内容位置”标头的文档。5.1.3中确定的“检索URI”,Base“URI from the Retrieval URI”是特定SPARQL查询的URL已检索到。如果以上都没有指定基本URI,则默认的基本URI(第5.1.4节,“默认基本URI”)。
以下是编写相同IRI的一些不同方法:
<http://example.org/book/book1>
基础<http://example.org/book/><书籍1>
前缀书:<http://example.org/book/>书本:书本1
文字的一般语法是一个字符串(用双精度字符括起来引用,"..."
,或单引号,'...'
),带有可选的语言标签(由引入@
)或可选数据类型IRI或前缀名称(由介绍^^
).
为了方便起见,可以直接写入整数(不带引号和显式数据类型IRI),并将其解释为类型化数据类型的文字xsd:整数
; 有“.”的十进制数在数字中,但没有指数被解释为xsd:十进制
; 和带指数的数字解释为xsd:双精度
。的值类型xsd:布尔值
也可以写成真的
或假
.
为了便于编写本身包含引号的文字值或是包含换行符的长字符,SPARQL提供了一个额外的将文字括在三个单引号或双引号中的引号结构标志。
SPARQL中的文字语法示例包括:
“聊天”
“聊天”@fr
带有语言标记“fr”
“xyz”^^<http://example.org/ns/userDatatype>
“abc”^^appNS:appDataType
图书管理员说:“也许你会喜欢《战争与和平》。”
1
,与“1”^^xsd:integer
1.3
,与“1.3”^^xsd:十进制
1.300
,与“1.300”^^xsd:十进制
1.0电子6
,与“1.0e6”^^xsd:double
真的
,与“true”^^xsd:boolean
假
,与“false”^^xsd:boolean
与产品匹配的令牌整数,十进制的,双倍和布尔文字等同于类型标记的词汇值和相应的数据类型(xsd:整数
,xsd:十进制
,xsd:双精度
,xsd:布尔值
).
SPARQL查询中的查询变量具有全局范围;使用给定变量name在查询中的任意位置标识相同的变量。变量的前缀为“?”或“$”;“?”或“$”不是变量名的一部分。在查询中,abc美元
和?美国广播公司
确定相同的变量。这个可能的名称变量的SPARQL语法.
空白节点在图中,模式充当非区分变量,而不是对中特定空白节点的引用正在查询的数据。
空白节点由标签表单指示,例如“_:abc
“,或缩写形式”[]
“.空白在查询语法中仅在一个位置使用的节点可以用表示[]
。将使用唯一的空白节点来形成三元组模式。空白节点标签写为“_:abc
“对于具有的空白节点标签“美国广播公司
“。不能使用相同的空白节点标签在同一查询中使用两种不同的基本图形模式。
这个[:p:v]
构造可以用于三重模式。它创造了空白节点标签,用作所有包含谓词对象的主题对。创建的空白节点还可以用于主语和宾语位置。
以下两种形式
[:p“v”]。
[]:p“v”。
分配唯一的空白节点标签(此处“第57页
“)和等效写入:
_:b57:p“v”。
此分配的空白节点标签可以用作进一步的主题或对象三重模式。例如,作为主题:
[:p“v”]:q“w”。
相当于两个三元组:
_:b57:p“v”。_:b57:q“w”。
作为对象:
:x:q[:p“v”]。
相当于两个三元组:
:x:q_:b57。_:b57:p“v”。
缩写的空白节点语法可以与其他缩写组合共同的,共同的学科和公共谓词.
[foaf:名称?名称;foaf:mbox<mailto:alice@example.org> ]
这与为一些唯一的分配的空白节点标签,“b18号
":
_:b18 foaf:名称?名称。_:b18 foaf:mbox<邮寄地址:alice@example.org> .
三重模式写为主题的空白列表,谓语和宾语;有一些常用的三重模式的缩写书写方式结构。
以下示例表达了相同的查询:
前缀dc:<http://purl.org/dc/elements/1.1/>选择?标题此处{<http://example.org/book/book1>dc:标题?标题}
前缀dc:<http://purl.org/dc/elements/1.1/>前缀:<http://example.org/book/>选择$标题WHERE{:book1 dc:title$title}
基础<http://example.org/book/>前缀dc:<http://purl.org/dc/elements/1.1/>选择$标题何处{<book1>dc:title?title}
可以编写具有共同主题的三重模式,以便主题仅为写一次,并通过使用“;
" 符号。
?x foaf:姓名?名称;foaf:mbox?千桶油当量。
这与写三重模式是一样的:
?x foaf:姓名?名称。?foaf:mbox?千桶油当量。
如果三重模式共享主语和谓语,则对象可能会被分离由“,
".
?x foaf:昵称“Alice”,“Alice_”。
与写三重模式相同:
?x小马驹:尼克“爱丽丝”。?x foaf:昵称“Alice_”。
对象列表可以与谓词对象列表组合:
?x foaf:姓名?名称;foaf:昵称“Alice”,“Alice_”。
等于:
?x foaf:姓名?名称。?x foaf:昵称“Alice”。?x foaf:昵称“Alice_”。
RDF集合可以使用语法“(element1 element2…)”以三重模式编写。这个形式”()
“是IRI的替代方案
http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
. 与集合元素一起使用时,例如(1?x 34)
,三重模式为集合分配空白节点。头部的空白节点集合中的可以用作其他三重模式中的主题或对象。集合语法分配的空白节点不会出现在查询中的其他位置。
(1?x 34):p“w”。
是语法糖(注意b0(b0)
,b1号机组
,b2型
和b3号机组
不要发生在查询):
_:b0-rdf:第一个1;rdf:休息_:b1。_:b1 rdf:第一个?x;rdf:休息:b2。_:b2-rdf:前3个;rdf:休息_:b3。_:b3-rdf:前4个;rdf:休息rdf:零。_:b0:p“w”。
RDF集合可以嵌套,并且可以涉及其他语法形式:
(1[:p:q](2))。
是以下内容的语法糖:
_:b0-rdf:第一个1;rdf:休息_:b1。_:b1 rdf:第一个_:b2。_:b2:p:q。_:b1 rdf:休息_:b3。_:b3 rdf:第一个_:b4。_:b4 rdf:第一个2;rdf:休息rdf:零。_:b3 rdf:rest rdf:零。
关键词“一
“可以在三元组模式中用作谓词,并且是IRI的替代方案
http://www.w3.org/1999/02/22-rdf-syntax-ns#类型
. 此关键字区分大小写。
?x a:1级。[a:appClass]:p“v”。
是以下内容的语法糖:
?x rdf:类型:Class1。_:b0 rdf:类型:appClass。_:b0:p“v”。
SPARQL基于图形模式匹配。更复杂的图形模式可以通过以各种方式组合较小的图案来形成:
在本节中,我们描述了通过以下方式组合模式的两种形式连接:基本的图形模式,它结合了三元组模式和组图形模式,它结合了所有其他图形模式。
查询中最外层的图形模式称为查询模式。它的语法标识为GroupGraphPattern(组图模式)
在里面
基本图形模式是三重模式的集合。SPARQL图形模式匹配是根据组合匹配基本图形模式的结果来定义的。
由滤波器中断的三重模式序列包括单个基本图形模式。任何图形模式都会终止基本图形模式。
使用表单的空白节点时_:abc
,空白标签节点的作用域是基本的图形模式。标签只能用于任何查询中的单个基本图形模式。
SPARQL是为将RDF图与简单的蕴涵进行匹配而定义的。SPARQL可以在特定条件下,扩展到其他形式的蕴涵如下所述.
在SPARQL查询字符串中,组图形模式用大括号分隔:{}
例如,此查询的查询模式是一个基本的组图模式图形模式。
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购何处{ ?x foaf:姓名?名称。 ?foaf:mbox?千桶油当量。 }
从对三种模式进行分组的查询中可以获得相同的解决方案分为两种基本的图形模式。例如,下面的查询具有不同的结构,但会产生与前一个查询相同的解决方案:前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购WHERE{{?x foaf:name?name。}{?x foaf:mbox?mbox.} }
群体模式:
{ }
将任何图(包括空图)与一个不绑定任何变量。例如:
选择?x个此处{}
与其中变量的一个解决方案匹配x个
未绑定。
由关键字表示的约束过滤器
,是一个对筛选器所在的整个组的解决方案的限制。这个以下模式都有相同的解决方案:
{?x foaf:name?name。?foaf:mbox?千桶油当量。FILTER正则表达式(?name,“Smith”)}
{FILTER正则表达式(?name,“Smith”)?x foaf:姓名?名称。?foaf:mbox?mbox公司。 }
{?x foaf:name?name。FILTER正则表达式(?name,“Smith”)?foaf:mbox?mbox公司。}
{ ?x foaf:姓名?名称。 ?foaf:mbox?千桶油当量。 }
是一组由一个基本图形模式组成的基本图形模式两种三重模式。
{ ?x foaf:姓名?名称。FILTER正则表达式(?name,“Smith”) ?foaf:mbox?千桶油当量。 }
是由一个基本图形模式和一个过滤器组成的组,以及该基本图形图案由两个三重图案组成;过滤器不会破坏基本图形模式分为两种基本图形模式。
{ ?x foaf:姓名?名称。 {} ?foaf:mbox?千桶油当量。 }
是一组三个元素、一个三重模式的基本图形模式,一个空组,以及一个三重模式的另一个基本图形模式。
基本图形模式允许应用程序在整个查询模式必须匹配才能有解决方案。对于只包含具有至少一个基本图形模式的组图形模式的查询的每个解决方案,每个变量都绑定到解决方案中的RDF项。然而,常规,不能在所有RDF图中假设完整的结构。能够具有允许将信息添加到解决方案中的查询,其中信息可用,但不要因为查询的某些部分而拒绝解决方案模式不匹配。可选匹配提供了此功能:如果可选部分不匹配,它不会创建绑定,但不会消除解决方案。
图形模式的可选部分可以用Optional语法指定应用于图形模式的关键字:
图案可选{图案}
句法形式:
{可选{图案} }
等于:
{{}可选{图案} }
这个可选
关键字是左关联的:
图案可选{图案}可选{图案}
与以下内容相同:
{图案可选{图案}}可选{模式}
在可选匹配中,可选图形模式与图形匹配,因此定义绑定并将其添加到一个或多个解决方案,否则将保持解决方案不变,而不添加任何其他绑定。
数据:
@前缀foaf:<http://xmlns.com/foaf/0.1/> .@前缀rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> ._:a rdf:type foaf:Person。_:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@example.com> ._:a foaf:mbox<mailto:alice@work.example> ._:b rdf:键入foaf:Person。_:b foaf:名称“Bob”。
查询:前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购WHERE{?x foaf:name?name。可选{?x foaf:mbox?mbox}}
根据以上数据,查询结果为:
名称 |
管理层收购 |
“爱丽丝” |
<邮寄地址:alice@example.com> |
“爱丽丝” |
<邮寄地址:alice@work.example> |
“鲍勃” |
|
没有值管理层收购
在名称为的解决方案中“鲍勃”
.
此查询查找数据中的人名。如果有带谓词的三元组管理层收购
同一个主题,一个解决方案将包含该三元组的对象也。在这个例子中,在可选匹配中只给出了一个三重模式查询的一部分,但一般来说,可选部分可以是任何图形模式。整个可选图形模式必须与可选图形模式匹配才能影响查询解决方案。
约束可以在可选的图形模式中给定。例如:
@前缀dc:<http://purl.org/dc/engins/1.1/> .@前缀:<http://example.org/book/> .@前缀ns:<http://example.org/ns#> .:book1 dc:title“SPARQL教程”。:book1ns:价格42。:book2 dc:title“语义网”。:book2 ns:价格23。
前缀dc:<http://purl.org/dc/engins/1.1/>前缀ns:<http://example.org/ns#>选择?标题?价格其中{?x dc:title?title。可选{?x ns:price?price.FILTER(?price<30)}}
标题 |
价格 |
“SPARQL教程” |
|
“语义网” |
23 |
标题为“SPARQL教程”的书没有价格,因为可选图形模式没有导致涉及变量的解决方案”价格
".
图形模式是递归定义的。图形模式可以有零个或多个可选的图形模式,查询模式的任何部分都可以有可选的部分。在这个示例中,有两种可选的图形模式。
数据:@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:主页<http://work.example.org/alice/> ._:b foaf:名称“Bob”。_:b foaf:mbox<邮寄地址:bob@work示例> .
查询:前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?mbox?hpage(页)WHERE{?x foaf:name?name。可选{?x foaf:mbox?mbox}。可选{?x foaf:homepage?hpage}}
查询结果:
名称 |
管理层收购 |
百帕热 |
“爱丽丝” |
|
<http://work.example.org/alice/> |
“鲍勃” |
<邮寄地址:bob@work.example> |
|
SPARQL提供了一种组合图形模式的方法,以便图形模式可能匹配。如果有多个备选方案匹配,则所有找到了可能的模式解决方案。
模式替代项在语法上用联合国
关键字。
数据:@前缀dc10:<http://purl.org/dc/elements/1.0/> .@前缀dc11:<http://purl.org/dc/elements/1.1/> ._:a dc10:title“SPARQL查询语言教程”。_:a dc10:creator“Alice”。_:b dc11:title“SPARQL协议教程”。_:b dc11:创建者“Bob”。_:c dc10:title“SPARQL”。_:c dc11:title“SPARQL(更新)”。
查询:前缀dc10:<http://purl.org/dc/engins/1.0/>前缀dc11:<http://purl.org/dc/elements/1.1/>选择?标题WHERE{?book dc10:title?title}联合{?book dc11:title?标题}}
查询结果:
标题 |
“SPARQL协议教程” |
“SPARQL” |
“SPARQL(更新)” |
“SPARQL查询语言教程” |
此查询查找数据中书籍的标题,无论标题是否记录使用都柏林核心元数据集属性从版本1.0或版本1.1开始。要确定信息的确切方式记录,查询可以对这两个备选方案使用不同的变量:
前缀dc10:<http://purl.org/dc/elements/1.0/>前缀dc11:<http://purl.org/dc/elements/1.1/>选择?x?个?年WHERE{?book dc10:title?x}联合{?book dc11:title?y}}
x个 |
年 |
|
“SPARQL(更新)” |
|
“SPARQL协议教程” |
“SPARQL” |
|
“SPARQL查询语言教程” |
|
这将返回带有变量的结果x个
从联合国
、和年
绑定从正确的分支获取解决方案。如果联合国
模式匹配,则图形模式将不匹配。
这个联合国
模式结合图形模式;每个替代可能性可以包含更多超过三分之一图案:
前缀dc10:<http://purl.org/dc/elements/1.0/>前缀dc11:<http://purl.org/dc/engins/1.1/>选择?标题?作者WHERE{?book dc10:title?title.?book dc10:creator?author}联合国{?book dc11:title?title.?book dc11:创建者?作者}}
作者 |
标题 |
“爱丽丝” |
“SPARQL协议教程” |
“鲍勃” |
“SPARQL查询语言教程” |
只有当一本书同时具有标题和创建者谓词时,此查询才会匹配该书来自同一版本的都柏林核心。
RDF数据模型将信息表示为由带有主语、谓语和宾语。许多RDF数据存储包含多个RDF图和记录每个图形的信息,允许应用程序进行查询包含来自多个图形的信息。
对RDF数据集表示图形集合。RDF数据集由一个图形(默认图形)组成,该图形没有名称,并且有零个或多个命名图,其中每个命名图由IRI.SPARQL查询可以根据不同的图匹配查询模式的不同部分第节中描述8.3查询数据集.
RDF数据集可能包含零个命名图;RDF数据集始终包含一个默认图形。查询不需要涉及匹配默认图形;查询可以只涉及匹配命名图。
用于匹配基本图形模式的图形是活动图表。在前面的部分中,所有查询都已执行对于单个图形,RDF数据集的默认图形作为活动图形。这个图形
关键字用于使活动图成为所有部分查询的数据集中的命名图。
RDF数据集的定义不限制命名和默认图形。信息可以在不同的图形中重复;之间的关系可以公开图形。两种有用的安排是:
- 在默认图形中包含来源信息关于命名图
- 将命名图中的信息也包含在默认图中。
示例1:#默认图形@前缀dc:<http://purl.org/dc/elements/1.1/> .<http://example.org/bob>dc:publisher“Bob”。<http://example.org/alice>dc:publisher“Alice”。
#命名图形:http://example.org/bob@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“鲍勃”。_:a foaf:mbox<mailto:bob@oldcorp.example.org> .
#命名图形:http://example.org/alice@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example.org> .
在本例中,默认图形包含两个发布者的名称命名图。命名图中的三元组在默认图中不可见在本例中。
示例2:
RDF数据可以通过RDF合并[RDF-MT公司]图的数量。图的一种可能排列方式RDF数据集的默认图形是部分或全部的RDF合并命名图中的信息。
在下一个示例中,命名图包含与之前相同的三元组。这个RDF数据集包括默认图形中命名图形的RDF合并,即重新标记空白节点以保持它们的不同。
#默认图形@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:x foaf:name“Bob”。_:x foaf:mbox<邮寄地址:bob@oldcorp.example.org> ._:y foaf:名称“Alice”。_:y foaf:mbox<邮箱:alice@work.example.org> .
#命名图形:http://example.org/bob@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“鲍勃”。_:a foaf:mbox<mailto:bob@oldcorp.example.org> .
#命名图形:http://example.org/alice@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:一个foaf:mbox<邮寄地址:alice@work.example> .
在RDF合并中,合并图中的空白节点不与空白共享要合并的图中的节点。
SPARQL查询可以通过使用发件人
条款和来自NAMED
子句来描述RDF数据集。如果查询提供了这样的数据集描述,则在如果没有数据集描述,查询服务将使用的任何数据集的位置在查询中提供。RDF数据集也可以是在SPARQL协议请求中指定,在这种情况下,协议描述覆盖查询本身中的任何描述。查询服务可以拒绝查询请求服务是否接受数据集描述。
这个发件人
和来自NAMED
关键字允许查询指定引用RDF数据集;它们表明数据集应该包括图形从给定的IRI(即给定IRI参考的绝对形式)。生成的数据集来自发件人
和来自NAMED
条款是:
- 一个默认图,由中引用的图的RDF合并组成
发件人
条款,以及
- 一组(IRI,图形)对,每个对一个
来自NAMED
条款。
如果没有发件人
子句,但有一个或多个来自NAMED
子句,则数据集包含默认图形的空图形。
每个发件人
子句包含一个IRI,该IRI指示要用于形成默认图形。这不会将图形作为命名图形放入。
在此示例中,RDF数据集包含一个默认图,但没有命名图:
#默认图形(存储在http://example.org/foaf/aliceFoaf)@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> .
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称发件人<http://example.org/foaf/aliceFoaf>WHERE{?x foaf:name?name}
如果查询提供多个发件人
条款,提供超过一个IRI表示默认图形,然后默认图形基于RDF合并的从给定IRI标识的资源表示中获得的图形。
查询可以使用来自NAMED
条款。每个IRI用于在RDF数据集。在两个或多个中使用相同的IRI来自NAMED
子句结果在一个命名图中,IRI出现在数据集中。
#图表:http://example.org/bob@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“鲍勃”。_:a foaf:mbox<mailto:bob@oldcorp.example.org> .
#图表:http://example.org/alice@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> .
...来自NAMED<http://example.org/alice>来自NAMED<http://example.org/bob>...
这个来自NAMED
语法表明IRI标识相应的图,但IRI和RDF数据集中的图之间的关系是间接的。IRI标识资源,该资源由图形(或者更准确地说:通过序列化图形的文档)。对于更多详细信息参见[WEBARCH公司].
这个发件人
条款和来自NAMED
子句可以用于相同的查询。
#默认图形(存储在http://example.org/dft.ttl)@前缀dc:<http://purl.org/dc/elements/1.1/> .<http://example.org/bob>dc:publisher“Bob Hacker”。<http://example.org/alice>dc:publisher“Alice Hacker”。
#命名图形:http://example.org/bob@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“鲍勃”。_:a foaf:mbox<mailto:bob@oldcorp.example.org> .
#命名图形:http://example.org/alice@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example.org> .
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀dc:<http://purl.org/dc/engins/1.1/>选择?谁?克?管理层收购发件人<http://example.org/dft.ttl>来自NAMED<http://example.org/alice>来自NAMED<http://example.org/bob>哪里{?g dc:出版商?谁。图形?g{?x foaf:mbox?mbox}}
此查询的RDF数据集包含一个默认图和两个命名图。这个图形
关键字描述如下。
构造数据集所需的操作不是由数据集描述。如果在数据集中给出两次IRI描述,可以使用两个发件人
子句,或发件人
条款和a来自NAMED
子句,则它不会假定进行了两次尝试以获得与IRI相关联的RDF图。因此,不能假设从数据集描述中的两个事件中获得的三元组。一般来说,不能对图的等价性作出任何假设。
查询图形集合时图形
使用了关键字根据命名图匹配模式。图形
可以提供IRI来选择一个图或使用一个变量,该变量的范围将超过查询的RDF数据集中所有命名图的IRI。
使用图形
更改活动图以匹配基本查询部分中的图形模式。在使用之外图形
, 默认图形由基本图形模式匹配。
示例中将使用以下两个图形:
#命名图形:http://example.org/foaf/aliceFoaf@前缀foaf:<http://xmlns.com/foaf/0.1/> .@前缀rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@前缀rdfs:<http://www.w3.org/2000/01/rdf-schema#> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> ._:a foaf:知道:b。_:b foaf:name“鲍勃”。_:b foaf:mbox<邮寄地址:bob@work.example> ._:b foaf:尼克“波比”。_:b rdfs:另请参见<http://example.org/foaf/bobFoaf> .<http://example.org/foaf/bobFoaf>rdf:键入foaf:PersonalProfileDocument。
#命名图形:http://example.org/foaf/bobFoaf@前缀foaf:<http://xmlns.com/foaf/0.1/> .@前缀rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@前缀rdfs:<http://www.w3.org/2000/01/rdf-schema#> ._:z foaf:mbox<邮寄地址:bob@work.example> ._:z rdfs:另请参见<http://example.org/foaf/bobFoaf> ._:z foaf:昵称“罗伯特”。<http://example.org/foaf/bobFoaf>rdf:键入foaf:PersonalProfileDocument。
下面的查询根据数据集和表单解决方案型钢混凝土
变量绑定到要匹配的图形的IRI。图形模式与活动图是数据集中的每个命名图。
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?src?波布尼克来自NAMED<http://example.org/foaf/aliceFoaf>来自NAMED<http://example.org/foaf/bobFoaf>哪里{图形?型钢混凝土{?x foaf:mbox<mailto:bob@work.example> .?x foaf:尼克?波布尼克}}
查询结果给出了找到信息的图形的名称以及Bob的昵称值:
型钢混凝土 |
波布尼克 |
<http://example.org/foaf/aliceFoaf> |
“鲍比” |
<http://example.org/foaf/bobFoaf> |
“罗伯特” |
查询可以通过提供图IRI。这会将活动图设置为由IRI命名的图。此查询查找图中给定的Bob的昵称http://example.org/foaf/bobFoaf
.
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀数据:<http://example.org/foaf/>选择?尼克来自NAMED<http://example.org/foaf/aliceFoaf>来自已命名<http://example.org/foaf/bobFoaf>哪里{图形数据:bobFoaf{?x foaf:mbox<邮寄地址:bob@work示例> .?x foaf:尼克?缺口}}
产生单一解决方案:
中使用的变量图形
子句也可以用于另一个图形
子句或在与默认图形匹配的图形模式中在数据集中。
下面的查询使用图形带有IRIhttp://example.org/foaf/aliceFoaf
查找配置文件文档对于Bob;然后根据该图匹配另一个模式。中的模式第二图形
子句查找空白节点(变量w个
) 对于拥有相同邮箱的人(由变量给出管理层收购
)作为第一次发现图形
子句(变量谁
),因为用于匹配变量的空白节点谁
来自Alice的FOAF文件与配置文件文档中的空白节点不同(它们位于不同的图表)。
前缀数据:<http://example.org/foaf/>前缀泡沫:<http://xmlns.com/foaf/0.1/>前缀rdfs:<http://www.w3.org/2000/01/rdf-schema#>选择?mbox?尼克?购买力平价来自NAMED<http://example.org/foaf/aliceFoaf>来自NAMED<http://example.org/foaf/bobFoaf>哪里{图形数据:aliceFoaf{?alice foaf:mbox<邮箱:alice@work.example> ;foaf:知道吗?谁。?谁是foaf:mbox?mbox;rdfs:请参见?第页,共页。?ppd a foaf:个人档案文档。} .图形?购买力平价{?w-foaf:mbox?mbox;福夫:尼克?尼克}}
管理层收购 |
尼克 |
购买力平价 |
<邮寄地址:bob@work.example> |
“罗伯特” |
<http://example.org/foaf/bobFoaf> |
Alice的FOAF文件中的任何三元组都会给出Bob的尼克
不习惯于为Bob提供了一个昵称,因为涉及变量的模式尼克
受以下限制购买力平价
到特定的个人档案文档。
查询模式可以涉及默认图和命名图。在这个例如,聚合器在两个不同的场合读取了Web资源。每个当一个图被读入聚合器时,本地系统会给它一个IRI。图表几乎相同,但“Bob”的电子邮件地址已更改。
在本例中,使用默认图来记录产地信息和实际读取的RDF数据保存在两个单独的图中,每个图都有一个系统不同的IRI。RDF数据集由两个命名图和有关他们的信息。
RDF数据集:
#默认图形@前缀dc:<http://purl.org/dc/elements/1.1/> .@前缀g:<tag:example.org,2005-06-06:>。@前缀xsd:<http://www.w3.org/2001/XMLSchema#> .g: graph1 dc:publisher“Bob”。g: graph1 dc:date“2004-12-06”^^xsd:date。g: graph2 dc:publisher“Bob”。g: graph2 dc:date“2005-01-10”^^xsd:date。
#图:本地分配的IRI:tag:example.org,2005-06-06:graph1@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> ._:b foaf:名称“Bob”。_:b foaf:mbox<邮寄地址:bob@oldcorp.example.org> .
#图:本地分配的IRI:tag:example.org,2005-06-06:graph2@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> ._:b foaf:名称“Bob”。_:b foaf:mbox<邮寄地址:bob@newcorp.example.org> .
此查询查找电子邮件地址,其中详细列出了此人的姓名和信息被发现的日期。
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀dc:<http://purl.org/dc/elements/1.1/>选择?姓名?mbox?日期哪里{?g dc:publisher?名称;dc:日期?日期。图形?克{?个人foaf:name?name;foaf:mbox?mbox}}
结果显示“Bob”的电子邮件地址已更改。
名称 |
管理层收购 |
日期 |
“鲍勃” |
<邮寄地址:bob@oldcorp.example.org> |
“2004-12-06”^^xsd:date |
“鲍勃” |
<邮寄地址:bob@newcorp.example.org> |
“2005-01-10”^^xsd:date |
为了清晰起见,结果中已缩写了日期数据类型的IRI。
查询模式生成一个无序的解决方案集合,每个解决方案是从变量到RDF项的部分函数。然后,这些解决方案被视为一个序列(解决方案序列),最初没有特定的顺序;然后应用任何序列修饰符来创建另一个序列。最后,这个后一个序列用于生成SPARQL查询表单.
A类溶液序列修改器是以下之一:
- 订单修饰符:按顺序排列溶液
- 投影修饰符:选择特定变量
- 与众不同修饰符:确保解决方案序列是唯一的
- 减少修饰符:允许消除某些非唯一解决方案
- 抵消修改器:控制解决方案的位置从解决方案的总体顺序开始
- 限制修饰符:限制解决方案的数量
修改器按上面列表中给出的顺序应用。
这个订购依据
子句建立解决方案序列的顺序。
遵循订购依据
子句是顺序比较器的序列,由表达式和可选的顺序修饰符(或ASC()
或DESC()
). 每个排序比较器都是升序的(由ASC()
修饰语或不修饰语)或降序(由描述()
修饰符)。
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称WHERE{?x foaf:name?name}订购依据?名称
前缀:<http://example.org/ns#>前缀foaf:<http://xmlns.com/foaf/0.1/>前缀xsd:<http://www.w3.org/2001/XMLSchema#>选择?名称WHERE{?x foaf:name?name;:empId?emp}按DESC订购(emp)
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称WHERE{?x foaf:name?name;:empId?emp}订购依据?名称DESC(emp)
这个“<”运算符(请参见操作员映射和11.3.1操作员可扩展性)定义成对的相对顺序数值
,简单文字
,xsd:字符串
,xsd:布尔
和xsd:dateTimes(日期时间)
。通过将IRI对比较为简单文字
.
SPARQL还修复了某些RDF术语之间的顺序,这些术语在其他情况下是不会排序的:
- (最低)此解决方案中没有为变量或表达式赋值。
- 空白节点
- 个人退休保险
- RDF文字
普通文本低于类型为的RDF文本xsd:string
具有相同的词汇形式。
SPARQL并没有定义所有可能的RDF术语的总排序。以下是一些未定义相对顺序的术语对示例:
- “a”和“a”@en_gb(简单文字和带有语言标记的文字)
- “a”@en_gb和“b”@en-gb(两个带有语言标记的文字)
- “a”和“a”^^xsd:string(简单文本和xsd:strin)
- “a”和“1”^^xsd:integer(简单文本和支持数据类型的文本)
- “1”^^my:integer和“2”^^my:intege(两种不支持的数据类型)
- “1”^^xsd:integer和“2”^^my:integer(支持的数据类型和不支持的数据种类)
此变量绑定列表按升序排列:
RDF术语 | 原因 |
| 未绑定结果最早排序。 |
_:z | 空白节点跟随未绑定节点。 |
_:a | 空白节点没有相对顺序。 |
<http://script.example/拉丁语> | IRI遵循空白节点。 |
<http://script.example/Кириллица> | 第23位的字符“К”有一个unicode码位0x41A,高于0x4C(“L”)。 |
<http://script.example/字幕> | 第23个位置的字符“漢”的unicode代码点为0x6F22,高于0x41A(“К”)。 |
"http://script.example/拉丁语" | 简单文字跟随IRI。 |
"http://script.example/拉丁语“^^xsd:string | xsd:strings跟随简单的文字。 |
通过将解决方案绑定替换到表达式中并与“<”运算符。降序与升序相反。
两个解的相对顺序是两个解相对于序列中第一个排序比较器的相对顺序。对于解决方案绑定的替换产生相同RDF项的解决方案,顺序是两个解决方案相对于下一个排序比较器的相对顺序。如果没有为这两个解决方案计算的顺序表达式产生不同的RDF项,则这两个方案的相对顺序是未定义的。
对一系列解决方案进行排序总是会得到一个具有相同编号的序列解决方案。
使用订购依据
关于a的解序列施工
或描述
查询没有直接影响,因为选择
收益一系列结果。与结合使用极限
和抵消
,订购依据
可用于返回从解决方案序列的不同部分生成的结果。安提问
查询不包括订购依据
,极限
或抵消
.
解序列可以转换为只涉及变量。对于序列中的每个解决方案,使用使用SELECT查询表单指定的变量选择。
下面的示例显示了一个仅提取所描述人员姓名的查询在使用FOAF属性的RDF图中。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> ._:b foaf:名称“Bob”。_:b foaf:mbox<邮寄地址:bob@work.example> .
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称哪里{?x foaf:name?name}
没有的解决方案序列明显的
或减少
查询修饰符将保留重复的解决方案。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:x foaf:名称“Alice”。_:x foaf:mbox<发送至:alice@example.com> ._:y foaf:名称“Alice”。_:y foaf:mbox<邮箱:asmith@example.com> ._:z foaf:name“Alice”。_:z foaf:mbox<邮寄地址:alice.smith@example.com> .
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?name WHERE{?x foaf:name?name}
修饰符明显的
和减少
影响查询结果中是否包含重复项。
这个明显的
溶液改进剂可以消除重复的溶液。具体来说,将相同变量与另一个解决方案绑定到相同RDF项的每个解决方案都会从解决方案集中删除。
前缀foaf:<http://xmlns.com/foaf/0.1/>选择DISTINCT?name WHERE{?x foaf:name?name}
请注意,根据溶液顺序修饰符,在应用限制或偏移之前消除重复项。
9.3.2减少
而明显的
修改器确保从解决方案集中消除重复的解决方案,减少
只是允许他们被淘汰。The cardinality of any set of variable bindings in an减少
解决方案集至少是一个且不超过没有的解决方案集的基数明显的
或减少
修改器。例如,使用上面的数据,查询
前缀foaf:<http://xmlns.com/foaf/0.1/>选择REDUCED?name WHERE{?x foaf:name?name}
可能有一个、两个(此处显示)或三个解决方案:
抵消
使生成的解决方案在指定的解决方案的数量。安抵消
0的值没有影响。
使用极限
和抵消
选择查询解决方案的不同子集除非通过使用订购依据
.
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称WHERE{?x foaf:name?name}订购依据?名称限制5偏移10
这个极限
子句设置返回的解决方案数的上限。如果实际解的数目大于极限,则最多为极限数将返回个解决方案(共个)。
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称WHERE{?x foaf:name?name}限制20
A类极限
0将导致不返回任何结果。限额不能为负数。
SPARQL有四种查询形式。这些查询表单使用来自模式匹配以形成结果集或RDF图。查询表格包括:
- 选择
- 返回查询模式匹配中绑定的所有变量或其子集。
- 施工
- 返回通过替换一组三元组中的变量而构造的RDF图模板。
- 提问
- 返回一个布尔值,指示查询模式是否匹配。
- 描述
- 返回描述找到的资源的RDF图。
这个SPARQL变量绑定结果XML格式可以用于从选择
查询或的布尔结果提问
查询。
结果的SELECT形式直接返回变量及其绑定。语法选择*
是一个缩写,用于选择查询中的所有变量。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:知道:b。_:a foaf:知道_:c。_:b foaf:名称“Bob”。_:c foaf:name“克莱尔”。_:c foaf:刻痕“CT”。
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名X?姓名是吗?镍Y哪里{?x foaf:知道吗?y;foaf:名字?名称X。?y foaf:名字?姓名Y。可选{?y foaf:nick?nickY}}
名称X |
名称Y |
镍Y |
“爱丽丝” |
“鲍勃” |
|
“爱丽丝” |
“克莱尔” |
“CT” |
结果集可以由本地API访问,也可以序列化为XML或RDF图。XML格式如所述SPARQL查询结果XML格式,并为此示例给出:
<?xml版本=“1.0”?><sparql-xmlns=“http://www.w3.org/2005/sparql-results#"><头部><variable name=“nameX”/><variable name=“nameY”/><variable name=“nickY”/></头><结果><结果><binding name=“nameX”><literal>爱丽丝</literal></绑定><binding name=“nameY”><literal>Bob</literal></绑定></result><结果><binding name=“nameX”><literal>爱丽丝</literal></绑定><binding name=“nameY”>克莱尔</绑定><binding name=“nickY”><literal>CT</literal></绑定></result></结果></sparql>
这个施工
查询表单返回由图形模板。结果是通过采用每个查询解决方案形成RDF图在求解序列中,替换图形模板中的变量,并通过集合并将三元组组合成单个RDF图。
如果任何此类实例化生成包含未绑定变量或非法的RDF构造,例如主语或谓语位置中的文字,则输出RDF图中不包含该三元组。图形模板可以包含没有变量的三元组(称为基本或显式三元组),这些也会出现在CONSTRUCT查询表单返回的输出RDF图中。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@example.org> .
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀卡片:<http://www.w3.org/2001/vcard-rdf/3.0#>构造{<http://example.org/person#爱丽丝>vcard:FN?名称}WHERE{?x foaf:name?name}
根据FOAF信息创建vcard属性:
@前缀vcard:<http://www.w3.org/2001/vcard-rdf/3.0#> .<http://example.org/person#Alice>vcard:FN“Alice”。
模板可以创建包含空白节点的RDF图。空白节点标签每个解决方案的作用域都是模板。如果同一标签在一个模板,然后将为每个查询解决方案创建一个空白节点,但是对于不同查询生成的三元组,将有不同的空白节点解决。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:给名字“Alice”。_:a foaf:family_name“黑客”。_:b foaf:名字“Bob”。_:b foaf:姓“黑客”。
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀卡片:<http://www.w3.org/2001/vcard-rdf/3.0#>构造{?x卡片:N_:v。_:v vcard:givenName?格纳姆。_:v vcard:familyName?fname(名称)}哪里{{?x foaf:firstname?gname}联合{?xfoaf:givenname?gname}。{?x foaf:surname?fname}联合{?xfoaf:family_name?fname}。}
创建与FOAF信息对应的vcard属性:
@前缀vcard:<http://www.w3.org/2001/vcard-rdf/3.0#> ._:v1 vcard:N _:x。_:x vcard:给定名称“Alice”。_:x vcard:familyName“黑客”。_:v2卡:N _:z。_:z vcard:给定名称“Bob”。_:z vcard:familyName“黑客”。
变量的使用x个
在模板中,在本例中将绑定到带有标签的空白节点_:a
和_:b
在数据中,导致不同的空白节点标签(_:v1
和_:v2
)在生成的RDF图中。
使用施工
,可以提取部分或全部来自目标RDF数据集的图。第一个示例返回图形(如果位于数据集中),带有IRI标签http://example.org/a图表
; 否则,它返回一个空图。
构造{?s?p?o}WHERE{图形<http://example.org/aGraph(http://example.org/aGraph)>{?s?p?o}。}
对图形的访问可能取决于其他信息。例如,如果默认图包含关于数据集中命名图的元数据,然后是查询像下面一样,可以根据有关命名的图表:
前缀dc:<http://purl.org/dc/elements/1.1/>PREFIX应用程序:<http://example.org/ns#>在哪里建造{?s?p?o}{图形?g{?s?p?o}。{?g dc:发布者<网址:http://www.w3.org/> } .{?g dc:date?date}。过滤器(app:customDate(?date)>“2005-02-28T00:00:00Z”^^xsd:dateTime)。}
哪里app:自定义日期
识别了一个可拓函数将数据格式转换为xsd:dateTime(日期时间)
RDF术语。
查询的解决方案修饰符影响施工
查询。在本例中施工
模板是由图模式匹配的两个解决方案形成的。查询输出根据点击率排名前两位的网站的人名图表。三人组在RDF图中没有排序。
@前缀foaf:<http://xmlns.com/foaf/0.1/> .@前缀站点:<http://example.org/stats#> ._:a foaf:name“Alice”。_:a网站:点击2349。_:b foaf:名称“Bob”。_:b站点:点击105。_:c foaf:name“Eve”。_:c站点:点击181。
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀站点:<http://example.org/stats#>构造{[]foaf:name?name}哪里{[]foaf:名称?名称;网站:点击?击打。}按描述排序(点击次数)限制2
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:x foaf:名称“Alice”。_:y foaf:name“Eve”。
应用程序可以使用提问
表单来测试查询是否模式有解决方案。没有返回有关可能的查询解决方案的信息,无论是否存在解决方案。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:主页<http://work.example.org/alice/> ._:b foaf:name“鲍勃”。_:b foaf:mbox<mailto:bob@work.example> .
前缀泡沫:<http://xmlns.com/foaf/0.1/>提问{?x foaf:name“Alice”}
这个SPARQL公司查询结果XML格式此结果集的形式给出:
<?xml版本=“1.0”?><sparql-xmlns=“http://www.w3.org/2005/sparql-results#"><头部><结果><boolean>true</boolean></结果></sparql>
对于相同的数据,以下返回不匹配,因为Alice的管理层收购
未提及。
前缀foaf:<http://xmlns.com/foaf/0.1/>提问{?x foaf:name“Alice”;foaf:mbox<mailto:alice@work.example> }
10.4描述(信息性)
这个描述
表单返回包含RDF的单个结果RDF图有关资源的数据。此数据不是由SPARQL查询指定的,其中查询客户端需要知道数据源中RDF的结构,由SPARQL查询处理器确定。查询模式用于创建结果集。这个描述
表单采用确定的每个资源在解决方案中,与IRI直接命名的任何资源一起,并进行汇编通过获取可以来自任何包括目标RDF数据集在内的可用信息。这个描述由查询服务确定。语法描述*
是描述查询中所有变量的缩写。
这个描述
子句本身可以使用IRI来标识资源。最简单的描述
查询只是中的IRI描述
条款:
要描述的资源也可以从结果集中查询变量的绑定中获取。这将启用描述资源,无论它们是由IRI还是由数据集中的空白节点标识的:
前缀foaf:<http://xmlns.com/foaf/0.1/>描述?x个其中{?x foaf:mbox<mailto:爱丽丝@org> }
财产foaf:mbox公司
定义为反函数属性在FOAF词汇表中。如果这样处理,此查询将返回有关最多一个人。然而,如果查询模式有多个解决方案,则RDF每个数据都是所有RDF图形描述的联合。
前缀foaf:<http://xmlns.com/foaf/0.1/>描述?x个WHERE{?x foaf:name“Alice”}
可以给出多个IRI或变量:
前缀foaf:<http://xmlns.com/foaf/0.1/>描述?x?个?年<http://example.org/>哪里{?x foaf:知道?y}
返回的RDF由信息发布者确定。它是有用的服务具有的关于资源的信息。它可能包括其他参考资料:例如,一本书的RDF数据可能还包括作者的详细信息。
一个简单的查询,例如
前缀ent:<http://org.example.com/employees网站#>描述?x地点{?x ent:employeeId“1234”}
可能会返回员工的描述和其他可能有用的信息细节:
@前缀foaf:<http://xmlns.com/foaf/0.1/> .@前缀vcard:<http://www.w3.org/2001/vcard-rdf/3.0> .@前缀exOrg:<http://org.example.com/employees网站#> .@前缀rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@前缀owl:<http://www.w3.org/2002/07/owl#>
_:a exOrg:employeeId“1234”;foaf:mbox_sha1sum“ABCD1234”;
vcard:否[vcard:史密斯家族;vcard:给定“约翰”]。foaf:mbox_sha1sum rdf:type owl:InverseFunctionalProperty。
其中包括的空白节点闭包名片词汇卡:N。决定返回哪些信息的其他可能机制包括简明限定描述[中央商务区].
对于FOAF这样的词汇表,其中的资源通常是空白节点,返回足够的信息以标识节点,如InverseFunctionalPropertyfoaf:mbox_sha1sum
以及姓名和其他记录的详细信息将是合适的。在该示例中,返回了与WHERE子句的匹配,但这不是必需的。
SPARQL公司过滤器
根据给定的条件限制图模式匹配的解表达具体来说,过滤器
消除在表达式中替换时会导致有效布尔值为的任何解决方案假
或产生错误。有效布尔值在第节中定义11.2.2有效布尔值和错误在XQuery 1.0中定义:XML查询语言[XQUERY公司]截面2.3.1,错误的种类。这些错误在之外没有影响过滤器
评价。
RDF文本可以有数据类型IRI:
@前缀a:<http://www.w3.org/2000/10/注释#> .@前缀dc:<http://purl.org/dc/elements/1.1/> ._:a a:注释<http://www.w3.org/TR/rdf-sparql-query/> ._:a dc:date“2004-12-31T19:00:00-05:00”。_:b a:注释<http://www.w3.org/TR/rdf-sparql-query/> ._:b dc:date“2004-12-31T19:01:00-05:00”^^<http://www.w3.org/2001/XMLSchema#dateTime> .
第一个的对象dc:日期
三元组没有类型信息。第二个具有数据类型xsd:dateTime(日期时间)
.
SPARQL表达式是根据语法构造的,并提供对函数(由IRI命名)和操作符函数(由PARQL语法中的关键字和符号调用)的访问。SPARQL运算符可用于比较类型化文字的值:
前缀a:<http://www.w3.org/2000/10/annotation-ns#>前缀dc:<http://purl.org/dc/elements/1.1/>前缀xsd:<http://www.w3.org/2001/XMLSchema#>选择?不能其中{?annot a:注释<http://www.w3.org/TR/rdf-sparql-query/> .?不是dc:date吗?日期。过滤器(?日期>“2005-01-01T00:00:00Z”^^xsd:dateTime)}
SPARQL运算符列在第11.3条和与语法中的结果相关联。
此外,SPARQL还提供了调用任意函数的功能,包括XPath强制转换函数的子集,如第11.5节。这些函数在SPARQL查询中按名称(IRI)调用。例如:
…FILTER(xsd:dateTime(?date)<xsd:dateTime(“2005-01-01T00:00:00Z”))。。。
本节使用了以下印刷惯例:
- XPath运算符用前缀标记
操作:
.XPath运算符没有命名空间;操作:
是一种标签约定。
- 本规范中引入的操作员用SPARQLoperator类.
SPARQL函数和运算符操作RDF术语和SPARQL-变量。这些函数和运算符的子集取自XQuery 1.0和XPath 2.0函数和运算符[FUNCOP公司]和具有XML架构键入的值参数和返回类型。RDF公司键入的文字
作为参数传递给这些函数和运算符,并使用字符串值的词汇形式
和一个原子数据类型对应于数据类型IRI。返回的类型化值映射回RDF键入的文字
同样的方式。
SPARQL有额外的运算符,它们对RDF术语的特定子集进行操作。当引用类型时,以下术语表示类型文字
具有相应的XML架构[XSDT公司]数据类型IRI:
以下术语确定了SPARQL值测试中使用的其他类型:
- 数字表示
键入的文字
具有数据类型xsd:整数
,xsd:十进制
,xsd:浮动
、和xsd:双精度
.
- 简单文字表示
平凡文字
没有语言标签
.
- RDF术语表示类型
爱尔兰共和国
,字面意义的
、和空白节点
.
- 变量表示SPARQL变量。
以下类型派生自数字类型和是函数和运算符的有效参数数字论据:
SPARQL语言扩展可以将其他类型视为派生自XML模式数据类型。
SPARQL提供了XQuery定义的函数和运算符的子集操作员映射.XQuery 1.0部分2.2.3表达式处理描述了XPath函数的调用。以下规则适用于XQuery和SPARQL之间的数据和执行模型差异:
- 与XPath/XQuery不同,SPARQL函数不处理节点序列。在解释XPath函数的语义时,假设每个参数都是单个节点的序列。
- 使用错误类型的参数调用的函数将生成类型错误。有效的布尔值参数(在下面的运算符映射表中标记为“xsd:boolean(EBV)”)被强制为
xsd:布尔值
使用EBV规则第11.2.2节。
- 除了绑定,所有函数和运算符都在RDF Terms上操作,如果任何参数未绑定,则会产生类型错误。
- 除以下任何表达式逻辑或(
||
)或逻辑和(&&
)遇到错误将产生该错误。
- A类逻辑或仅在一个分支上遇到错误的,如果另一个分支为TRUE,则返回TRUE;如果另一分支为FALSE,则返回错误。
- A类逻辑和如果只在一个分支上遇到错误,则如果另一个分支为TRUE,则返回错误;如果另一分支为FALSE,则返回FALSE。
- A类逻辑或或逻辑和如果在两个分支上都遇到错误,将生成任何一个共个错误。
真的逻辑与逻辑或真值表(T型),错误(F类)、和错误(E类)如下所示:
A类 | B类 | A||B类 | A和B |
T型 | T型 | T型 | T型 |
T型 | F类 | T型 | F类 |
F类 | T型 | T型 | F类 |
F类 | F类 | F类 | F类 |
T型 | E类 | T型 | E类 |
E类 | T型 | T型 | E类 |
F类 | E类 | E类 | F类 |
E类 | F类 | E类 | F类 |
E类 | E类 | E类 | E类 |
11.2.1调用
SPARQL定义了用于调用的语法功能和操作员在参数列表中。这些调用如下:
- 对参数表达式求值,生成参数值。未定义参数求值的顺序。
- 数字参数根据需要进行升级,以适合该函数或运算符的预期类型。
- 对参数值调用函数或运算符。
如果这些步骤中的任何一个失败,调用将生成错误。错误的影响定义见过滤器评估.
11.2.2有效布尔值(EBV)
有效布尔值用于计算逻辑函数的参数逻辑和,逻辑或、和fn:不以及评估过滤器
表达式。
XQuery有效布尔值规则依赖于XPath的定义fn:布尔值。以下规则反映了以下规则fn:布尔值
应用于SPARQL查询中的参数类型:
- 类型为的任何文本的EBV
xsd:布尔值
或数字如果词法形式对该数据类型无效(例如“abc”^^xsd:integer),则为false。
- 如果参数是类型文字用一个数据类型属于
xsd:布尔值
,EBV是该参数的值。
- 如果参数是平凡文字或a类型文字用一个数据类型属于
xsd:string
,如果操作数值的长度为零,则EBV为假;否则EBV为真。
- 如果参数是数字类型或a类型文字数据类型派生自数字类型,如果操作数值为NaN或数值等于零,则EBV为false;否则EBV为真。
- 所有其他参数(包括未绑定的参数)都会产生类型错误。
EBV真的
表示为类型文字数据类型为xsd:布尔值
词汇值为true;假EBV表示为类型文字数据类型为xsd:布尔值
词法值为“false”。
SPARQL语法标识一组运算符(例如,&&,*,isIRI公司)用于构造约束。下表将这些语法产物与适当的操作数和由以下两者定义的运算符函数相关联XQuery 1.0和XPath 2.0函数和运算符[功能]或中指定的SPARQL运算符第11.4条。为给定参数集选择运算符定义时,将应用具有最具体参数的定义。例如,在评估xsd:integer=xsd:signedInt
,的定义=
有两个数字
参数适用,而不是带有两个参数的参数RDF术语.桌子的布置使最上层的可行烛台最具针对性。在没有适当操作数的情况下调用运算符会导致类型错误。
SPARQL遵循XPath的数字类型提升和数字运算符参数的子类型替换方案。这个XPath运算符映射的规则数字操作数(xsd:整数
,xsd:十进制
,xsd:浮点
,xsd:双精度
和派生自数字type)也适用于SPARQL运算符(请参阅XML路径语言(XPath)2.0[XPATH20系列]用于定义数字型促销和亚型替换). 一些运算符与嵌套函数表达式相关联,例如。fn:不(操作:数值等于(A,B))
注意,根据XPath定义,fn:不
和op:数字等式
如果他们的论点有误,就会产生错误。
的排序规则fn:比较
是由XPath定义并由http://www.w3.org/2005/xpath-functions/collation/codepoint
。此排序规则允许基于代码点值进行字符串比较。可以使用测试码点字符串等效性RDF术语等效性。
SPARQL三元运算符
操作员 |
类型(A) | 类型(B) | 类型(C) | 功能 | 结果类型 |
SPARQL测试,定义于第11.4条 |
REGEX公司(字符串、图案、标记) |
简单文字 | 简单文字 | 简单文字 | fn:匹配项(字符串、图案、标记) | xsd:布尔值 |
标记为“(EBV)”的xsd:boolean函数参数通过计算该参数的有效布尔值。
SPARQL语言扩展可以在操作符和操作符函数之间提供额外的关联;这相当于向上表中添加行。除了上面定义的语义中的类型错误之外,任何其他运算符都不能生成替换任何结果的结果。此规则的结果是SPARQL扩展将产生至少与未扩展的实现相同的解决方案,对于某些查询,可能会产生更多的解决方案。
“<”运算符的其他映射应控制操作数的相对顺序,特别是在订购人
条款。
本节定义了SPARQL查询语言引入的运算符。示例显示了适当语法结构调用的运算符的行为。
11.4.1跳跃
xsd:布尔值
跳跃
(变量
无功功率,无功功率
)
退换商品真的
如果无功功率,无功功率
已绑定到值。否则返回false。值为NaN或INF的变量被认为是绑定的。
数据:
@前缀foaf:<http://xmlns.com/foaf/0.1/> .@前缀dc:<http://purl.org/dc/elements/1.1/> .@前缀xsd:<http://www.w3.org/2001/XMLSchema#> ._:a foaf:给我起个名字“爱丽丝”。_:b foaf:给定名称“Bob”。_:b dc:date“2005-04-04T04:04:04Z”^^xsd:dateTime。
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀dc:<http://purl.org/dc/elements/1.1/>前缀xsd:<http://www.w3.org/2001/XMLSchema#>选择?名称WHERE{?x foaf:givenName?givenName。可选{?x dc:date?date}。过滤器(装订日期)}
查询结果:
可以测试图形模式是否不通过指定可选
图形模式它引入了一个变量并进行测试,以确保该变量不
跳跃
。这称为否定为失败在逻辑编程中。
此查询将人员与名称
但是不表达日期
:
前缀泡沫:<http://xmlns.com/foaf/0.1/>前缀dc:<http://purl.org/dc/elements/1.1/>选择?名称WHERE{?x foaf:givenName?name。可选{?x dc:date?date}。筛选器(!bound(?date))}
查询结果:
因为鲍勃dc:日期
已知,“鲍勃”
不是查询的解决方案。
xsd:布尔值
isIRI公司
(RDF术语
学期
)xsd:布尔值
国际标准URI
(RDF术语
学期
)
退换商品真的
如果学期
是一个爱尔兰共和国.退货假
否则。国际标准URI
是isIRI公司
操作员。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> ._:b foaf:名称“Bob”。_:b foaf:mbox“bob@work示例" .
此查询将人员与名称
和一个管理层收购
这是一个IRI:
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购WHERE{?x foaf:name?name;foaf:mbox?千桶油当量。过滤器是IRI(?mbox)}
查询结果:
名称 |
管理层收购 |
“爱丽丝” |
<邮寄地址:alice@work.example> |
xsd:布尔值
为空白
(RDF术语
学期
)
退换商品真的
如果学期
是一个空白节点.退货假
否则。
@前缀a:<http://www.w3.org/2000/10/annotation-ns#> .@前缀dc:<http://purl.org/dc/engins/1.1/> .@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a a:注释<http://www.w3.org/TR/rdf-sparql-query/> ._:a dc:creator“Alice B.Toeclips”。_:b a:注释<http://www.w3.org/TR/rdf-sparql-query网站/> ._:b dc:creator _:c。_:c foaf:给定“Bob”。_:c foaf:“史密斯”家族。
此查询将人员与dc:创建者
它使用表示名称的FOAF词汇表中的谓词。
前缀a:<http://www.w3.org/2000/10/annotation-ns#>前缀dc:<http://purl.org/dc/elements/1.1/>前缀foaf:<http://xmlns.com/foaf/0.1/>选择?鉴于?家庭WHERE{?注释a:注释<http://www.w3.org/TR/rdf-sparql-query/> .?不是dc:creator吗?c、。可选{?c foaf:given?given;foaf:family?family}。过滤器空白(?c)}
查询结果:
在这个示例中,有两个对象foaf:知道
谓词,但只有一个(_:c
)是空白节点。
xsd:布尔值
是文字
(RDF术语
学期
)
退换商品真的
如果学期
是一个字面意义的.退货假
否则。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work示例> ._:b foaf:名称“Bob”。_:b foaf:mbox“bob@work.example" .
此查询与中的查询类似11.4.2除非这是与人匹配的名称
和一个管理层收购
这是一个文字。这可用于查找错误数据(foaf:mbox公司
应该只有一个IRI作为其目标)。
前缀泡沫:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购WHERE{?x foaf:name?name;foaf:mbox?千桶油当量。过滤器为文字(?mbox)}
查询结果:
名称 |
管理层收购 |
“鲍勃” |
"bob@work.example" |
简单文字
字符串
(字面意义的
液化石油气
)简单文字
字符串
(爱尔兰共和国
钢筋混凝土
)
返回词汇形式
属于液化石油气
(a)字面意义的);返回的代码点表示rsrc公司
(一)爱尔兰共和国). 这对于检查IRI的某些部分非常有用,例如主机名。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> ._:b foaf:名称“Bob”。_:b foaf:mbox<邮寄地址:bob@home.example> .
此查询选择使用其工作示例
foaf配置文件中的地址:
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购WHERE{?x foaf:name?name;foaf:mbox?千桶油当量。FILTER正则表达式(str(?mbox),“@work.example”)}
查询结果:
名称 |
管理层收购 |
“爱丽丝” |
<邮寄地址:alice@work.example> |
11.4.6朗
简单文字
朗
(字面意义的
ltrl公司
)
返回语言标签
属于ltrl公司
,如果有的话。它会返回""
如果ltrl公司
没有语言标签
。请注意,RDF数据模型不包括带空的文本语言标签
.
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Robert”@EN。_:a foaf:name“Roberto”@ES。_:a foaf:mbox<mailto:bob@work.example> .
此查询查找西班牙语foaf:名称
和foaf:mbox公司
:
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?姓名?管理层收购WHERE{?x foaf:name?name;foaf:mbox?千桶油当量。过滤器(lang(?name)=“ES”)}
查询结果:
名称 |
管理层收购 |
“罗伯托”@ES |
<邮寄地址:bob@work.example> |
爱尔兰共和国
数据类型
(类型文字
键入Lit
)爱尔兰共和国
数据类型
(简单文字
simpleLit(简单照明)
)
返回数据类型IRI
属于键入Lit
; 收益xsd:string字符串
如果参数是简单文字.
@前缀foaf:<http://xmlns.com/foaf/0.1/> .@前缀例如:<http://biometrics.example/ns#> .@前缀xsd:<http://www.w3.org/2001/XMLSchema#> ._:a foaf:name“Alice”。_:a例如:shoeSize“9.5”^^xsd:float。_:b foaf:名称“Bob”。_:b例如:shoeSize“42”^^xsd:integer。
此查询查找foaf:名称
和foaf:鞋尺寸
每个穿着鞋子的人的尺码是一个整数:
前缀泡沫:<http://xmlns.com/foaf/0.1/>前缀xsd:<http://www.w3.org/2001/XMLSchema#>前缀,例如:<http://biometrics.example/ns#>选择?姓名?鞋子尺寸WHERE{?x foaf:name?name;例如:shoeSize?shoeSize。FILTER(数据类型(?shoeSize)=xsd:integer)}
查询结果:
xsd:布尔值
xsd:布尔值
左边
||
xsd:布尔值
正确的
返回逻辑或
属于左边
和正确的
。请注意逻辑或
在上操作有效布尔值它的论点。
注:见第11.2节,过滤器评估,用于这个||
操作员对错误的处理。
xsd:布尔值
xsd:布尔值
左边
&&
xsd:布尔值
正确的
返回逻辑和
属于左边
和正确的
。请注意逻辑和
在上操作有效布尔值它的论点。
注:见第11.2节,过滤器评估,用于这个&&
操作员对错误的处理。
xsd:布尔值
RDF术语
术语1
=
RDF术语
第2学期
如果术语1
和第2学期
与中定义的RDF术语相同资源描述框架(RDF):概念和抽象语法[概念]; 如果参数都是文字,但不是同一个RDF术语,则会产生类型错误; 否则返回FALSE。术语1
和第2学期
如果以下任一项为真,则相同:
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:a foaf:mbox<mailto:alice@work.example> ._:b foaf:name“A女士”。_:b foaf:mbox<mailto:alice@work.example> .
此查询查找具有多个foaf:名称
三元组:
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称1?名称2WHERE{?x foaf:name?name1;foaf:mbox?mbox1。?y foaf:名字?名称2;foaf:mbox?mbo2。过滤器(?mbox1=?mbox2&&?name1!=?name2)}
查询结果:
名称1 |
名称2 |
“爱丽丝” |
“A女士” |
“A女士” |
“爱丽丝” |
在对元旦(2004年或2005年)注释的文档的查询中,RDF术语不相同,但具有相同的值:
@前缀a:<http://www.w3.org/2000/10/annotation-ns#> .@前缀dc:<http://purl.org/dc/elements/1.1/> ._:b a:注释<http://www.w3.org/TR/rdf-sparql-query/> ._:b dc:date“2004-12-31T19:00:00-05:00”^^<http://www.w3.org/2001/XMLSchema#dateTime> .
前缀a:<http://www.w3.org/2000/10/annotation-ns#>前缀dc:<http://purl.org/dc/elements/1.1/>前缀xsd:<http://www.w3.org/2001/XMLSchema#>选择?注释WHERE{?annot a:注释?注释。?不知道日期?日期。过滤器(?date=xsd:dateTime(“2005-01-01T00:00:00Z”)}
注释 |
<http://www.w3.org/TR/rdf-sparql-query/> |
对的两个类型文本测试调用RDFterm-equal等效值。扩展实现可能支持其他数据类型。一个处理查询的实现在不支持的数据类型(以及不相同的词法形式和数据类型IRI)上测试等价性时返回一个错误,表明它无法确定这些值是否等价。例如,一个未扩展的实现在测试“iii”^^my:romanNumeral=“iv”^^my:romanNumeral
或“iii”^^my:romanNumeral!=“iv”^^my:罗马数字
.
xsd:布尔值
同一条款
(RDF术语
术语1
,RDF术语
第2学期
)
如果返回TRUE术语1
和第2学期
与中定义的RDF术语相同资源描述框架(RDF):概念和抽象语法[概念]; 否则返回FALSE。
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:一只小马驹:叫“爱丽丝”。_:a foaf:mbox<mailto:alice@work示例> ._:b foaf:name“A女士”。_:b foaf:mbox<邮寄地址:alice@work.example> .
此查询查找具有多个foaf:名称
三元组:
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称1?名称2WHERE{?x foaf:name?name1;foaf:mbox?mbox1。?y foaf:名字?名称2;foaf:mbox?mbo2。过滤器(相同术语(?mbox1,?mbox2)&&!相同术语(名称1,名称2)}
查询结果:
名称1 |
名称2 |
“爱丽丝” |
“A女士” |
“A女士” |
“爱丽丝” |
不同于RDF术语等价
,同一条款
可用于测试非等效键入的文字具有不支持的数据类型:
@前缀:<http://example.org/WMterms网站#> .@前缀t:<http://example.org/types#> ._:c1:标签“容器1”。_:c1:weight“100”^^t:千克。_:c1:排量“100”^^t:升。_:c2:标签“容器2”。_:c2:weight“100”^^t:千克。_:c2:排量“85”^^t:升。_:c3:label“Container 3”(容器3)。_:c3:重量“85”^^t:千克。_:c3:排量“85”^^t:升。
前缀:<http://example.org/WMterms网站#>前缀t:<http://example.org/types#>选择?a标签1?b标签WHERE{?a:label?aLabel。?a:重量?a重量。?a:位移?a显示。?b:标签?b标签。?b:重量?b重量。?b:位移?b显示。过滤器(相同术语(aWeight,bWeight)&&!相同术语(?aDisp,?bDisp)}
a标签 |
b标签 |
“容器1” |
“容器2” |
“容器2” |
“容器1” |
对于重量相同的箱子,也可以使用“=”操作符进行测试(RDF术语等价)作为测试“100”^^t:kilos=“85”^^t:kilos
将导致错误,从而消除潜在的解决方案。
xsd:布尔值
语言匹配
(简单文字
语言标签
,简单文字
语言范围
)
退换商品真的
如果语言标签
(第一个参数)匹配项语言范围
(第二个参数)根据中定义的基本过滤方案[RFC4647协议]第3.3.1节。语言范围
是基本语言范围语言标签的匹配[RFC4647协议]第2.1节。A类语言范围
的“*”匹配任何非空语言标签
字符串。
@前缀dc:<http://purl.org/dc/elements/1.1/> ._:a dc:title“那场七十年代的秀”@en。_:a dc:title“Cette Série des Anneées Soixante-dix”@fr。_:a dc:title“Cette Série des Années Septante”@fr-BE。_:b dc:title“Il Buono,Il Bruto,Il Cattivo”。
此查询使用语言匹配
和朗
(如所述第11.2.3.8条)查找英文名称为“That Seventies show”的节目的法语标题:
前缀dc:<http://purl.org/dc/elements/1.1/>选择?标题WHERE{?x dc:title“那场七十年代的秀”@en;dc:标题?标题。FILTER语言匹配(lang(?title),“FR”)}
查询结果:
标题 |
“Cette Série des Années Soixante dix”@fr |
“Cette Série des Anneées Septante”@fr-BE |
这个成语langMatches(lang(?v),“*”)
将不匹配没有语言标记的文字作为朗(?v)
将返回空字符串,因此
前缀dc:<http://purl.org/dc/elements/1.1/>选择?标题其中{?x dc:title?title。FILTER语言匹配(lang(?title),“*”)}
将使用语言标记报告所有标题:
标题 |
“那场七十年代的演出”@en |
“Cette Série des Anneées Soixante-dix”@fr |
“Cette Série des Anneées Septante”@fr-BE |
xsd:布尔值
正则表达式
(简单文字
文本
,简单文字
图案
)xsd:布尔值
正则表达式
(简单文字
文本
,简单文字
图案
,简单文字
旗帜
)
调用XPathfn:匹配项要匹配的函数文本
针对正则表达式图案
正则表达式语言在XQuery 1.0和XPath 2.0函数和运算符部分中定义7.6.1正则表达式语法[FUNCOP公司].
@前缀foaf:<http://xmlns.com/foaf/0.1/> ._:a foaf:name“Alice”。_:b foaf:名称“Bob”。
前缀foaf:<http://xmlns.com/foaf/0.1/>选择?名称WHERE{?x foaf:name?nameFILTER正则表达式(?name,“^ali”,“i”)}
查询结果:
SPARQL导入中定义的XPath构造函数函数的子集XQuery 1.0和XPath 2.0函数和运算符[FUNCOP公司]在节中17.1从原始类型到原始类型的铸造SPARQL构造函数包括SPARQL操作数数据类型加上其他数据类型由RDF数据模型施加。SPARQL中的强制转换是通过对源类型的操作数调用目标类型的构造函数来执行的。
XPath仅定义从一种XML Schema数据类型到另一种XML Schema数据类型的强制转换。剩余的强制转换定义如下:
- 铸造爱尔兰共和国到
xsd:string
生成一个类型文字代码点的词法值包含IRI,数据类型为xsd:string
.
- 铸造简单文字到任何XML模式的数据类型都定义为转换
xsd:string
使用字符串值等于目标数据类型的文本的词法值。
下表总结了始终允许的铸造操作(Y(Y)),从不允许(N个)取决于词汇值(M(M)). 例如,来自xsd:string字符串
(第一行)到xsd:浮点
(第二列)取决于词汇值(M(M)).
布尔=xsd:布尔值
数据库链接=xsd:双精度
飞行时间=xsd:浮动
十二月=xsd:十进制
整数=xsd:整数
数据传输=xsd:dateTime(日期时间)
字符串=xsd:string
爱尔兰共和国=爱尔兰共和国
ltrl公司=简单文字
发件人\收件人 |
字符串 |
飞行训练 |
数据库链接 |
12月 |
整数 |
数据传输 |
布尔 |
字符串 |
Y(Y) |
M(M) |
M(M) |
M(M) |
M(M) |
M(M) |
M(M) |
飞行训练 |
Y(Y) |
Y(Y) |
Y(Y) |
M(M) |
M(M) |
N个 |
Y(Y) |
数据库链接 |
Y(Y) |
Y(Y) |
Y(Y) |
M(M) |
M(M) |
N个 |
Y(Y) |
12月 |
Y(Y) |
Y(Y) |
Y(Y) |
Y(Y) |
Y(Y) |
N个 |
Y(Y) |
整数 |
Y(Y) |
Y(Y) |
Y(Y) |
Y(Y) |
Y(Y) |
N个 |
Y(Y) |
数据传输 |
Y(Y) |
N个 |
N个 |
N个 |
N个 |
Y(Y) |
N个 |
布尔 |
Y(Y) |
Y(Y) |
Y(Y) |
Y(Y) |
Y(Y) |
N个 |
Y(Y) |
爱尔兰共和国 |
Y(Y) |
N个 |
N个 |
N个 |
N个 |
N个 |
N个 |
液化石油气 |
Y(Y) |
M(M) |
M(M) |
M(M) |
M(M) |
M(M) |
M(M) |
A类主表达式语法规则可以是对IRI命名的扩展函数的调用。扩展函数接受一些RDF项作为参数,并返回RDF项。这些函数的语义由标识函数的IRI标识。
使用扩展函数的SPARQL查询可能具有有限的互操作性。
例如,考虑一个名为函数:偶数
:
xsd:布尔值
函数:偶数
(数字
价值
)
此函数将在FILTER中调用,如下所示:
前缀foaf:<http://xmlns.com/foaf/0.1/>前缀功能:<http://example.org/functions(http://example.org/functions)#>选择?姓名?身份证件其中{?x foaf:name?name;func:empId?身份证件。过滤器(函数:偶数(?id))}
对于第二个示例,考虑一个函数aGeo:距离
它计算两点之间的距离,用于查找格勒诺布尔附近的地点:
xsd:双精度
aGeo:距离
(数字
x1个
,数字
y1个
,数字
2个
,数字
第2年
)
前缀aGeo:<http://example.org/geo#>选择?邻居WHERE{?a aGeo:placeName“格勒诺布尔”。?aGeo:位置?轴位置。?aGeo:位置?日程表。?b aGeo:placeName?邻居。?b aGeo:位置?bx位置。?b aGeo:位置?按位置。过滤器(aGeo:距离(axLoc、ayLoc、bxLoc、byLoc)<10)。}
可以使用扩展函数测试核心SPARQL规范不支持应用程序数据类型,它可能是数据类型格式之间的转换,例如转换为XSD dateTime来自其他日期格式的RDF术语。
本节定义了图形模式评估的正确行为和解决方案修饰符,给定查询字符串和RDF数据集。这并不意味着SPARQL实现必须使用定义的过程在这里。
执行SPARQL的结果由一系列步骤定义,从将SPARQL查询作为字符串,将该字符串转换为抽象语法然后将抽象语法转换为包含SPARQL代数中的运算符的SPARQL-抽象查询。这个抽象查询然后在RDF上进行评估数据集。
SPARQL是根据IRI定义的[RFC3987号文件]. IRI是RDF URI引用的子集,它省略了空格。
定义: RDF术语
让我成为所有IRI的集合。
让RDF-L成为所有RDF文字
让RDF-B成为所有空白节点在RDF图中
这套RDF术语,RDF-T,是I联合RDF-L联合RDF-B吗。
以下定义RDF术语从RDF数据模型,但是已更新参考IRI而非RDFURI引用。
定义: RDF数据集RDF数据集是一组:
{G,(<u1>,G1),(<u2>,G2), . . .(<un个>,Gn个) }
其中G和每个G我是图,并且每个<u我>是IRI。每个<u我>是不同的。
G称为默认图。(<u我>,G我)被称为命名图。
定义: 活动图形
这个活动图形是用于基本数据集的图形图形模式匹配。
定义: 查询变量
A类查询变量是集合V的一个成员,其中V是无限的并且与RDF-T。
定义: 三重模式
A类三重模式是集合的成员:
(RDF-T接头V)x(I接头V)x(RDF-T-接头V)
三重模式的定义包括字面意义上的主题。RDF核心已经注意到了这一点.
“[RDF核心工作组]指出,它不知道为什么文字不应该是主体,未来的工作组可以使用较少限制的章程扩展语法以允许文字作为语句的主题。"
因为RDF图可能不包含文字主题,所以任何以文字为主题的SPARQL三重模式都将失败匹配任何RDF图。
空图模式是一种基本的图模式,它是空集。
解决方案映射是从一组变量到一组RDF术语的映射。我们在明确的地方使用“解决方案”一词。
定义:解决方案映射A类解决方案映射,μ是一个偏函数μ:V->T。
μ的域dom(μ)是V的子集,其中定义了μ。
定义:解决方案顺序
A类溶液序列是解决方案的列表,可能是无序的。
定义:
解决方案序列修改器
A类溶液序列修改器是以下之一:
-
排序依据修饰符:按顺序排列溶液
-
投影修饰符:选择特定变量
-
与众不同修饰符:确保序列中的解决方案是唯一的
-
减少修改器:允许消除任何非唯一解决方案
-
抵消修改器:控制解决方案从何处开始解决方案的总体顺序
-
限制修饰符:限制解决方案的数量
本节定义了转换图形模式和解决方案的过程SPARQL查询字符串中的修饰符转换为SPARQL-代数表达式。
解析SPARQL查询字符串并应用IRI缩写后和中给出的三种模式第4节,有一个抽象语法树由以下部分组成:
模式 |
修改器 |
查询表单 |
RDF术语 |
明显的 |
选择 |
三重模式 |
减少 |
施工 |
基本图形模式 |
项目 |
描述 |
组 |
订购依据 |
提问 |
可选 |
极限 |
|
联合国 |
抵消 |
|
图形 |
|
|
过滤器 |
|
|
转换这种抽象语法树的结果是一个SPARQL查询在SPARQL代数中使用以下符号:
图形模式 |
解决方案修改器 |
BGP公司 |
ToList(待办事项列表) |
加入 |
排序 |
LeftJoin(左连接) |
项目 |
过滤器 |
与众不同 |
工会 |
减少 |
图表 |
切片 |
切片是OFFSET和LIMIT的组合。国防部是任何一个溶液调节剂。
ToList(待办事项列表)用于从图形模式的结果进行转换发生与序列的匹配。
定义: SPARQL查询
A类SPARQL抽象查询是元组(E、DS、R),其中:
本节描述了转换SPARQL图的过程模式转换为SPARQL代数表达式。翻译句法后IRI和三重模式的缩写,它递归处理句法形成代数表达式:
工作组注意到,简化步骤中的点被应用导致了不明确的转换包含可选中双重嵌套过滤器和模式的查询:可选{{…过滤器(…?x…)}}。
.
这通过两个非标准测试用例进行了说明:
首先,扩展中给出的IRI和三重模式的缩写第4节.
这个其中条款
由GroupGraphPattern(组图模式)
它由以下形式组成:
每一个都通过以下程序进行翻译:
转换(语法形式)
如果表单为三重块
结果是BGP(三重模式列表)
如果表格是
组或联合图形模式
设A:=未定义对于GroupOrUnionGraphPattern中的每个元素G如果A未定义A:=变换(G)其他A:=并集(A,变换(G))结果是A
如果表格是图形图形
如果表单是GRAPH IRI GroupGraphPattern结果是Graph(IRI,Transform(GroupGraphPattern))如果表单是GRAPH Var GroupGraphPattern结果是Graph(Var,Transform(GroupGraphPattern))
如果表格是GroupGraphPattern(组图模式)
我们引入以下符号:
- 连接(图案,图案)
- LeftJoin(模式、模式、表达式)
- 过滤器(表达式、模式)
设FS:=空集设G:=空模式,Z是一个基本的图模式,即空集。对于GroupGraphPattern中的每个元素E如果E的形式为FILTER(expr)FS:=FS设置{expr}如果E的形式为OPTIONAL{P}然后设A:=变换(P)如果A的形式为过滤器(F,A2)G:=左连接(G,A2,F)其他G:=左连接(G,A,true)如果E是任何其他形式:设A:=变换(E)G:=连接(G,A)如果FS不为空:设X:=FS中表达式的连接G:=过滤器(X,G)结果是G。
简化步骤:
一个图形模式(不是过滤器)的组成为连接(Z,a),并且可以替换为A。空图形模式Z是连接的标识:
将连接(Z,A)替换为A将连接(A,Z)替换为A
重写示例的第二种形式是通过删除空组联接的第一种形式简化步骤。
示例:具有由单个三元组组成的基本图形模式的组图案:
{?s?p?o}
连接(Z,BGP(s?p?o))
BGP(s?p?o)
示例:具有由两个三重模式组成的基本图形模式的组:
{?s:p1?v1;:p2?v2}
BGP(秒:p1?v1?秒:p2?v2)
示例:由两个基本图形模式的并集组成的组:
{?s:p1?v1}联合{?5:p2?v2}}
联合(联合(Z,BGP(?s:p1?v1)),
加入(Z,BGP(?s:p2?v2))
联合(BGP(s:p1?v1),BGP(s:p2?v2))
示例:由并集和基本图形模式的并集组成的组:
{?s:p1?v1}联合{?s:p2?v2}联合
工会(
联合(联合(Z,BGP(?s:p1?v1)),
加入(Z,BGP(?s:p2?v2)),
加入(Z,BGP(?s:p3?v3))
工会(
联合(BGP(?s:p1?v1),
BGP(?s:p2?v2),
BGP(?s:p3?v3)
示例:由基本图形模式和可选图形组成的组图案:
{?s:p1?v1可选{?d:p2?v2}}
LeftJoin(左连接)(
加入(Z,BGP(?s:p1?v1)),
加入(Z,BGP(?s:p2?v2)),
true)
左连接(BGP(?s:p1?v1),BGP(£s:p2?v2),true)
示例:由一个基本图形模式和两个可选图形组成的组模式:
{?s:p1?v1可选{?c:p2?v2}可选{±s:p3?v3}}
LeftJoin(左连接)(
左联接(
BGP(?s:p1?v1),
BGP(?s:p2?v2),
true),
BGP(?s:p3?v3),
true)
示例:由基本图形模式和可选图形组成的组带过滤器的图案:
{?s:p1?v1可选{?c:p2?v2过滤器(?v1<3)}}
LeftJoin(左连接)(
加入(Z,BGP(?s:p1?v1)),
加入(Z,BGP(?s:p2?v2)),
(?v1<3)
LeftJoin(左连接)(
BGP(?s:p1?v1),
BGP(?s:p2?v2),
(?v1<3))
示例:由并集图模式和可选图组成的组图案:
{?s:p1?v1}联合{?c:p2?v2}可选{?d:p3?v3}}
左联接(
联合(BGP(?s:p1?v1),
BGP(?s:p2?v2)),
BGP(?s:p3?v3),
true)
示例:由基本图形模式、过滤器和可选图形模式:
{?s:p1?v1过滤器(?v1<3)可选{?5:p2?v2}}}}
过滤器(?v1<3,
LeftJoin(BGP(?s:p1?v1),BGP(£s:p2?v2),true),
)
步骤1:ToList
ToList将多集合转换为具有相同元素和基数的序列。没有隐含的订单序列;重复项不必相邻。
让M:=ToList(模式)
第2步:ORDER BY
如果查询字符串具有ORDER BY子句
M:=OrderBy(M,顺序比较器列表)
第三步:投影
M:=项目(M,vars)
其中vars是SELECT子句中提到的变量集,或者如果SELECT*已使用。
步骤4:DISTINCT
如果查询包含DISTINCT,
M:=区别(M)
第5步:减少
如果查询包含REDUCED,
M:=减少(M)
第6步:偏移和限制
如果查询包含“OFFSET start”或“LIMIT length”
M:=切片(M、起点、长度)
start默认为0
长度默认为(大小(M)-开始)。
整个抽象查询是M。
当匹配图形模式时,可能的解决方案会形成一个
多组[多组],也称为一袋.多集是元素的无序集合,其中每个元素元素可能出现多次。它由一组元素和基数函数,给出设置在multiset中。
为解决方案映射和
写入μ0对于这样的映射,dom(μ0)是空集。
写入Ω0对于正好由空映射μ组成的多集0,具有基数1。这是联接标识。
为解决方案映射变量x到RDF项t:{(x,t)}写入μ(?x->t)
为精确由μ(?x->t)组成的多集写Ω(?x->t),即{{(x,t)}}基数1。
定义:兼容映射
两个解映射μ1和μ2如果,对于每个变量vdom(μ1)和在dom(μ2), μ1(v) =μ2(v) ●●●●。
如果μ1和μ2与μ兼容1 设置μ2也是一个映射。写入合并(μ1, μ2)对于μ1 设置μ2
多集合中解映射μ的基数的写卡[Ω](μ)映射Ω。
基本图形模式是SPARQL模式匹配的基础。A基本图形模式与查询的该部分的活动图形相匹配。基本图形模式可以通过用术语替换变量和空白节点,给出两个概念例如。使用RDF公司实例映射σ,从空白节点到RDF项;变量为替换为从查询变量到RDF术语的解决方案映射。
定义:图案实例映射
A类模式实例映射,P是RDF的组合实例映射、σ和解决方案映射、μ。P(x)=μ(σ(x))
任何模式实例映射都定义了唯一的解决方案映射以及通过将其限制为查询而获得的唯一RDF实例映射变量和空白节点。
定义:基本图形模式匹配
让BGP是一个基本的图模式,让G是一个RDF图。
μ是一个解决方案当存在模式实例时,用于来自G的BGP映射P,使P(BGP)是G的子图,μ是P对BGP中的查询变量。
card[Ω](μ)=card[欧](不同RDF实例映射的数量,σ,这样,P=μ(σ)是模式实例映射,P(BGP)是G的子图。
如果一个基本图形模式是空集,那么解是Ω0.
此定义允许解决方案映射在基本图形模式,BGP,到G中的空白节点。由于SPARQL处理中的空白节点标识符SPARQL查询结果XML格式文档作为文档的范围,它们不能理解为识别数据集活动图中的节点。如果DS是因此,查询的数据集、模式解决方案被理解为不是来自DS本身的活动图,而是来自RDF图,称为范围界定图表,它与DS的活动图等效,但不共享空白节点使用DS或BGP。所有解决方案都使用相同的范围图到单个查询。范围图纯粹是理论上的建构;在实践中,效果只是通过文档获得的空白节点标识符的范围约定。
由于RDF空白节点允许无限多的冗余解决方案许多模式,可以有无穷多个模式解(获得将空白节点替换为不同的空白节点)。这是必要的,因此,以某种方式划分基本图形模式的解决方案。SPARQL使用确定基本图解的子图匹配准则模式。有基本模式的每个不同模式实例映射都有一个解决方案图形模式到活动图形的子集。
这是为了便于计算而优化的而不是冗余消除。它允许查询结果包含即使数据集的活动图是倾斜,并且在逻辑上允许生成不同查询结果的等效数据集。
对于SPARQL抽象查询中的每个符号,我们为评价。同名的SPARQL代数运算符有用于评估SPARQL抽象查询节点,如“评价语义学".
定义:过滤器
设Ω是解映射的多集合,expr是表达式。我们定义:
滤波器(expr,Ω)={μ|μinΩ,expr(μ)是一个具有真}的有效布尔值
卡[滤波器(expr,Ω)](μ)=卡[Ω](μ
定义:加入
让Ω1和Ω2是解映射的多集合。我们定义:
连接(Ω1, Ω2)={合并(μ1, μ2) | μ1单位:Ω1和μ2单位:Ω2、和μ1和μ2是兼容}
卡[连接(Ω1, Ω2)](μ) =
对于每次合并(μ1, μ2), μ1单位:Ω1和μ2单位:Ω2这样μ=合并(μ1, μ2),
总和(μ1, μ2),卡[Ω1](μ1)*卡[Ω2](μ2)
Join中的解决方案映射μ可能出现在不同的溶液映射,μ1和μ2在多集中已加入。μ的基数是所有可能性。
定义:差异
让Ω1和Ω2是解映射的多集合。我们定义:
差值(Ω1, Ω2,快递)={μ|μinΩ1对于所有μ′(单位:Ω)2, μ和μ′不兼容或μ和μ'兼容且expr(merge(μ,μ'))具有有效的布尔值错误}的
卡[Diff(Ω1, Ω2,expr)](μ)=卡[Ω1](μ)
Diff在内部用于定义LeftJoin。
定义:左联接
让Ω1和Ω2是解映射的多集合expr是一个表达式。我们定义:
左连接(Ω1, Ω2,expr)=过滤器(expr,连接(Ω1,Ω2))设置差值(Ω1, Ω2,快递)
卡[LeftJoin(Ω1, Ω2,expr)](μ)=卡[过滤器(expr,连接(Ω1, Ω2))](μ) +卡[Diff(Ω1, Ω2,表达)](μ)
全称为:
左连接(Ω1, Ω2,快递)=
{合并(μ1,μ2) | μ1单位:Ω1和μ2在里面Ω2、和μ1和μ2兼容和expr(合并(μ1,μ2))为true}
设置
{ μ1| μ1单位:Ω1和μ2单位:Ω2、和μ1和μ2不兼容}
设置
{ μ1| μ1单位:Ω1和μ2单位:Ω2、和μ1和μ2兼容和expr(合并(μ1, μ2))是false}
由于它们是不同的,LeftJoin的基数是定义。
定义:工会
让Ω1和Ω2是解映射的多集。我们定义:
接头(Ω1, Ω2)={μ|μinΩ1或μinΩ2}
卡[联合(Ω1,Ω2)](μ)=卡[Ω1](μ)+卡[Ω2](μ)
为C(x)为true的元素序列编写[x|C]。
写卡片[L](x)作为L中x的基数。
定义:ToList(待办事项列表)
设Ω是多解映射集。我们定义:
ToList(Ω)=以任意顺序映射μinΩ的序列,卡[Ω](μ)出现次数为μ
卡[ToList(Ω)](μ)=卡[Ω](μ
定义:排序
设Ψ是一系列解映射。我们定义:
排序(Ψ,条件)=[μ|μinΨ和序列满足排序条件]
卡片[排序(Ψ,条件)](μ)=卡[Ψ](μ)
定义:项目
设Ψ是解映射的序列,PV是一组变量。
对于映射μ,将Proj(μ,PV)写为μ对变量的限制光伏。
项目(Ψ,PV)=[项目(ψ[μ],PV]|μinΨ]
卡[项目(Ψ,PV)](μ)=卡[Ψ](μ)
项目订单(Ψ,PV)必须保留OrderBy给出的任何订单。
定义:与众不同
设Ψ是一系列解映射。我们定义:
离散(Ψ)=[μ|μinΨ]
卡[离散(Ψ)](μ)=1
Distinct(Ψ)的顺序必须保留OrderBy给出的任何顺序。
定义:减少
设Ψ是一系列解映射。我们定义:
约化(Ψ)=[μ|μinΨ]
卡牌[缩减(Ψ)](μ)介于1和卡牌[Ψ](μ)之间
Reduced(Ψ)的顺序必须保留OrderBy给出的任何顺序。
简化解决方案序列修饰符不保证定义的基数。
定义:切片
设Ψ是解映射的序列。我们定义:
切片(Ψ,起始,长度)[i]=Ψ[start+i],当i=0时至(长度-1)
我们将eval(D(G),graph pattern)定义为对具有活动图形G。活动图形最初是默认图形。
D:数据集D(G):D具有活动图G的数据集(与之匹配的模式)D[i]:数据集D中具有IRI i的图形D[DFT]:D的默认图形P、 P1、P2:图形模式L:解决方案序列
定义:图形模式的评估
如果IRI是D中的图形名eval(D(G),图形(IRI,P))=eval(D[IRI]),P)
如果IRI不是D中的图形名eval(D(G),Graph(IRI,P))=空多集
eval(D(G),Graph(var,P))=设R为空多集D中的每个IRI iR:=并集(R,连接(eval(D(D[i]),P),Ω(?var->i))结果是R
图的求值使用SPARQL代数并运算符。这个解决方案映射的基数是每个连接操作中的解决方案映射。
定义:项目评估eval(D,项目(L,vars))=项目
定义:OrderBy的评估eval(D,OrderBy(L,condition))=订单依据(eval(D,L),conditional)
定义:切片的评估eval(D,Slice(L,start,length))=切片
整个SPARQL设计可以用于查询它们具有比简单更复杂的隐含形式蕴涵,通过重写基本图的匹配条件模式。既然这是一个公开的研究问题适用于所有形式的包含并最佳地消除不必要或不适当的冗余,本文件仅给出了任何这样的解决方案应该令人满意。这些需要扩展到完全每个特定案例的定义。
基本图形模式与三重模式具有相同的关系RDF图对RDF三元组的作用,以及许多相同的术语可以应用于它们。特别是,两个基本图形模式是据说是相等的如果在将空白节点映射到空白节点的三种模式的术语,以及将变量、文字和IRI映射到它们自己,例如三元组(s、 p,o)为第一模式当且仅当三元组(M(s),M(p)M(o))位于第二位。此定义扩展了RDF的定义保留变量的图等价于基本图模式跨等效模式的名称。
安牵制制度指定
- RDF图的一个子集,称为形成良好的为了政权
- 一个牵连良构图子集之间的关系和格式良好的图形。
牵制制度的例子包括牵连[RDF-MT公司],RDF牵涉[RDF-MT公司]、RDFS包含[RDF-MT公司],D-隐含[RDF-MT公司]和OWL-DL包含[OWL-语义]. 其中,只有OWL-DL蕴涵限制了格式良好的图集。如果E是蕴涵然后我们将提到电子牵制,遵循此命名约定的电子一致性等。
一些牵连机制可以对一些RDF进行分类图形不一致。例如,RDF图:
_:x rdf:键入xsd:string。_:x rdf:键入xsd:decimal。
当D包含XSD数据类型时,D不一致。查询的效果在不一致图上不是包含在本规范中,但必须由SPARQL扩展。
E-entailment的SPARQL扩展必须满足以下要求条件。
1——范围图,SG,对应于任何一致活动图AG是唯一指定的,并且E等价于AG。
2——对于任何基本图形模式BGP和模式解决方案映射P,P(BGP)为E格式良好
3——对于任何范围图SG和答案集{P1……(P)n个} 对于基本图形模式BGP,其中{BGP1 ....BGP公司n个}是一组基本的图形模式所有这些都相当于BGP,没有一个与任何其他或与共享任何空白节点新加坡
SG E需要(SG接头P1(背景1)工会。。。活接头Pn个(BGPn个))
这些条件并不能完全确定可能的答案集,因为RDF允许无限量的冗余。因此,除此之外以下必须保持。
4--每个SPARQL扩展必须在答案集上提供以下条件确保每个BGP和AG都有一组唯一的有限答案到RDF图等价。
笔记
(a) SG通常与AG等效,但仅限于E-等价允许一些形式的规范化,例如消除语义冗余,在查询之前应用于源文档。
(b) 条件3中的构造确保引入任何空白节点解决方案映射的使用方式与SG中出现空白节点的方式。这确保出现空白节点标识符在一个答案集中的多个答案中,只有当空白节点如此标识时在SG中确实是相同的。如果扩展不允许应答绑定到空白节点,则此条件可以简化为以下条件:
SG E需要每个模式解决方案P的P(BGP)。
(c) 这些条件并不强加SG共享no的SPARQL要求带有AG或BGP的空白节点。特别是,它允许SG实际上是AG允许空白节点标识符保留其含义的查询协议在查询和源文档之间,或跨多个查询。这样的当前SPARQL协议规范不支持协议,然而。
(d) 由于条件1至3只是回答的必要条件,条件4允许在以下情况下限制合法答案集各种方式。例如,OWL-DL查询的最新技术重点讨论禁止对空白节点进行应答绑定的情况。我们请注意,这些条件甚至允许病理性“静音”病例查询的答案集为空。
(e) 这些条件都没有明确引用空白上的实例映射BGP中的节点。对于某些隐含制度单个实例的存在无法完全捕获空白节点映射。这些条件允许此类机制在查询中提供空白节点形成一种“完全存在”的阅读模式。
很容易证明SPARQL满足以下条件假设SG上的SPARQL条件是它与AG具有图形等效性,但与AG或BGP(其中满足第一个条件)。唯一重要的条件是(3)。
每个答案P我是SPARQL的解决方案映射限制实例M我这样M我(BGP我)是的子图自BGP以来的SG我和SG没有公共的空白节点,M的范围我不包含BGP中的空白节点我; 因此,解映射P我和RDF实例映射I我M的组件我通勤,所以M我(BGP我) =我我(P我(BGP我)). 所以
M(M)1(背景1)工会。。。活接头Mn个(BGPn个)
=我1(P1(BGP1))工会。。。工会In个(Pn个(BGPn个))
=[我1+ ... + 我n个](P1(BGP1)活接头…活接头Pn个(BGPn个) )
自从I的域我实例映射都是相互的独占。由于它们也是SG的独家产品,
SG接头[I1+ ... + 我n个](P1(BGP1) 工会。。。活接头Pn个(BGPn个) )
=[我1+ ... + 我n个](SG接头P1(BGP1) 工会。。。活接头Pn个(BGPn个) )
即。
SG接头P1(背景1)工会。。。活接头Pn个(BGPn个)
有一个实例,它是SG的子图,因此由SG通过RDF插值引理[RDF-MT公司].
A类SPARQL查询字符串是Unicode字符串(参见第6.1节字符串概念[查莫德]) 在以下语法定义的语言中,从查询生产。为了与未来版本的兼容Unicode,则此字符串中的字符可能包含未分配的Unicode代码点截至本出版物发布之日(参见标识符和模式语法[统一身份证]第4节模式语法)。对于包含排除字符类的产品(例如[^<>'{}|^`]
), 字符被排除在范围之外#x0-#x10FFFF
.
在解析之前,会为代码点转义序列处理SPARQL查询字符串根据下面EBNF中定义的语法。SPARQL的代码点转义序列查询字符串为:
哪里十六进制是十六进制字符
十六进制::=[0-9]|[A-F]|[A-F]
示例:
<ab\u00E9xy>#Codepoint 00E9是带锐音符的拉丁文小写e\u03B1:a#Codepoint x03B1是希腊语小α-αa\u003Ab#a:b--代码点x3A是冒号
代码点转义序列可以出现在查询字符串中的任何位置在基于语法规则进行解析之前进行处理,因此可以由代码点代替具有语法意义,例如“:
“标记前缀名称。
下面的语法中不包括这些转义序列。仅转义序列对于在语法中此时合法的字符,可以给出。对于例如,变量“?x\u0020年
“不合法(\u0020型
是一个空格,不允许在变量名中使用)。
空白(生产WS公司
) 用于分隔两个端子,否则会(误)识别为一个端子终端。下面用大写字母表示的规则名称表示空白的重要位置;这些构成了构建SPARQL解析器的可能终端选择。白色空格在字符串中很重要。
例如:
?a<?b&&?c> ?d日
是标记序列变量'?一
',IRI'<?b&&?抄送>
', 和变量'?d日
',不是涉及运算符的表达式'&&
' 使用'连接两个表达式<
'(小于)和'>
'(大于)。
A.4款
SPARQL查询中的注释采用“#
',IRI外或字符串,并继续到行尾(用字符标记0x0D(0x0D)
或0x0安
)如果注释后没有行尾,则为文件尾标记。注释被视为空白。
匹配的文本IRI_参考
生产和前缀名称
(之后前缀扩展)生成,在转义处理后,必须符合通用RFC 3987第2.2节“IRI引用的ABNF和IRI“[RFC3987号文件]. 例如IRI_参考
<abc#def>
可能发生在SPARQL查询字符串,但IRI_参考
<abc##def>
不能。
用声明的基本IRI基础关键字必须是绝对的个人退休保险。用声明的前缀前缀关键字不能在同一查询中重新声明。见第2.1.1节,语法IRI条款,用于描述基础和前缀.
相同的空白节点标签不能用于两个不同的基本图形模式使用单个查询。
除了码点转义序列,以下转义序列任何一串
生产(例如。
字符串_项目1
,
字符串_项目2
,
字符串_ ITERAL_LONG1
,
字符串_文字_长度2
)以下为:
逃生 |
Unicode码位 |
“\t” |
U+0009(选项卡) |
“\n” |
U+000A(馈线) |
“\r” |
U+000D(回车) |
'\b' |
U+0008(退格) |
“\f” |
U+000C(换页) |
'\"' |
U+0022(引号、双引号) |
"\'" |
U+0027(撇号引号,单引号) |
'\\' |
U+005C(反斜杠) |
示例:
“abc\n”“xy\rz”“xy\tz”
A.第8条语法
语法中使用的EBNF表示法是在可扩展标记语言中定义的(XML)1.1[XML11格式]第6节符号.
关键字以区分大小写的方式匹配,关键字除外'一
“根据Turtle和N3,它用于代替IRIrdf:类型
(全部,
http://www.w3.org/1999/02/22-rdf-syntax-ns#类型
).
关键词:
基础 |
选择 |
订购依据 |
发件人 |
图形 |
STR公司 |
国际标准URI |
前缀 |
施工 |
极限 |
来自NAMED |
可选 |
郎 |
isIRI公司 |
|
描述 |
抵消 |
哪里 |
联合国 |
语言 |
是文学 |
|
提问 |
明显的 |
|
过滤器 |
数据类型 |
REGEX公司 |
|
|
减少 |
|
一 |
绑定 |
真的 |
|
|
|
|
|
相同条款 |
假 |
转义序列区分大小写。
选择要匹配的规则时,将选择最长的匹配。
笔记:
- 当带有大写名称的规则用作终端。
- 在有符号数字中,符号和数字。这个
加法表达式
语法规则通过覆盖一个表达式后面跟一个签名号码。它们生成无符号的加法或减法数量视情况而定。
一些常用工具的语法文件包括可用在这里.
见附件SPARQL语法关于一致性SPARQL查询字符串、和节10查询表以确保查询结果的一致性。见附件E.互联网媒体类型符合application/sparql查询媒体类型。
本规范旨在与SPARQL协议结合使用[SPROT(SPROT)]和SPARQL查询结果XML格式[结果]. 有关一致性标准,请参阅这些规范。
注意,SPARQL协议描述了抽象接口和网络协议,抽象接口可以应用于API和网络接口。
使用FROM、FROM NAMED或GRAPH的SPARQL查询可能会导致指定的URI被取消引用。这可能会导致额外使用网络、磁盘或CPU资源以及相关的次要问题,如拒绝服务。安全问题属于统一资源标识符(URI):通用语法[RFC3986协议]应考虑第7节。此外文件:
在某些情况下可以访问URI,作为结果进行处理并返回,提供对本地资源的意外访问。
SPARQL语言允许扩展,这将有其自身的安全含义。
多个IRI可能具有相同的外观。不同脚本中的字符可能看起来很相似(西里尔字母“-o”可能与拉丁字母“o”相似)。后面跟着一个字符通过组合字符可以与另一个字符具有相同的视觉表示(拉丁语小写字母E后跟组合急性语调具有相同的视觉表现如拉丁文小写字母E和ACUTE)。SPARQL用户必须注意使用与IRI匹配的IRI构造查询在数据中。可以找到有关相似字符匹配的更多信息在里面Unicode安全注意事项[联合国国际安全理事会]和国际化资源标识符(IRI)[RFC3987号文件]第8节。
- 联系人:
- 埃里克·普鲁德·霍姆沃
- 另请参阅:
- 如何注册W3C规范的媒体类型
- 互联网媒体类型注册,使用的一致性
标签调查结果2002年6月3日(2002年9月4日修订)
SPARQL查询语言的Internet Media Type/MIME类型为“application/SPARQL-Query”。
建议sparql查询文件的扩展名为“.rq”(全部小写)在所有平台上。
建议sparql查询存储在Macintosh HFS文件系统上的文件文件类型为“TEXT”。
- 类型名称:
- 应用
- 子类型名称:
- sparql查询
- 所需参数:
- 无
- 可选参数:
- 无
- 编码注意事项:
- SPARQL查询语言的语法是通过Unicode代码点表示的[联合编码]. 编码始终为UTF-8[RFC3629型].
- Unicode代码点也可以使用\uXXXX(U+0到U+FFFF)表示或\UXXXXXXXX语法(对于U+10000以上),其中X是十六进制数字[0-9A-F]
- 安全注意事项:
- 参见SPARQL查询附录C,安全注意事项以及副本请求3629[RFC3629协议]第7节,安全注意事项。
- 互操作性注意事项:
- 没有已知的互操作性问题。
- 发布的规范:
- 本规范。
- 使用此媒体类型的应用程序:
- 当前没有已知的应用程序使用此媒体类型。
- 其他信息:
- 幻数:
- SPARQL查询的开头附近可能有字符串“PREFIX”(独立于大小写)文档的。
- 文件扩展名:
- “.rq”
- 基本URI:
- SPARQL“BASE<IRIref>”术语可以更改相对的当前基本URI查询语言中的IRIref,稍后在文档中按顺序使用。
- Macintosh文件类型代码:
- “文本”
- 联系人和电子邮件地址以获取更多信息:
- public-rdf-dawg-comments@w3.org
- 预期用途:
- 通用
- 使用限制:
- 无
- 作者/更改控制器:
- SPARQL规范是万维网联盟的工作产品RDF数据访问工作组。W3C对这些规范具有更改控制权。
F、。致谢(信息性)
SPARQL RDF查询语言是W3C RDF数据访问工作组, 感谢大家的讨论、评论和评论现任和前任成员.
此外,我们通过工作组评论列表。所有评论都用于制作更好的文档。安迪会的还要特别感谢豪尔赫·佩雷斯、杰夫·查佩尔、鲍勃·麦格雷戈、尤西·沙夫和理查德Newman,用于探索与SPARQL相关的特定问题。埃里克想承认比约恩·霍尔曼的宝贵帮助。