1引言
属性路径是通过两个图形节点之间的图形的可能路径。一个普通的例子是长度正好为1的属性路径,这是一个三重模式。属性路径允许更简洁地表达一些SPARQL基本图形模式,还添加了匹配任意长度路径的功能。
2未决问题
本节指出了重要的讨论领域。社区意见积极寻求解决这些问题以及文件的其余部分。请将评论发送至public-rdf-dawg-comments@w3.org
- “
^
“作为一元和二元运算符可能会造成混淆。另一种选择是只使用一元形式并要求”/^
“在路径中,将反向属性组合为路径N3路径语法包括二进制和一元“^
". - 而当前指定的属性路径可用于访问RDF列表(例如rdf:rest*/rdf:first),工作组注意到如果结果按其出现的顺序返回,则会更有用RDF列表。这在现有SPARQL代数。
- 工作组讨论了提供对匹配路径长度的访问,这将提供更好的功能,但会使路径复杂化评价。此时,工作组的主要目标是指定核心集在不妨碍未来增强功能的情况下。
- 当SPARQL与作为查询处理一部分执行推理的系统一起使用时,这与推理是如何交互的?
- 即使存在多个可能的路径,路径表达式也会匹配一次两点之间(c.f.SPARQL BGP)
3路径语言
属性路径表达式(或仅“path”)类似于字符串正则表达式但在属性上,而不是字符。查询求值确定路径表达式的所有匹配项并绑定主题或对象。在图表中,每条路线只记录一个匹配项-任何给定的路径表达式都没有重复项。
在下面的描述中,uri(用户界面)是URI或前缀名称和电子标签是一个路径元素,它本身可能由路径语法结构组成。
语法形式 | 比赛 |
---|
uri(用户界面) | URI或前缀名称。一条长度为一的路径。 |
^电子标签 | 反向路径(对象到对象)。 |
(英语) | 组路径电子标签,括号控制优先级。 |
elt1/elt2 | 序列路径电子高度层1,后面是高度层2 |
elt1^elt2 | 的缩写elt1/^elt2,这是电子高度层1后跟的倒数高度层2。 |
elt1|elt2 | 替代路径电子高度层1,或elt2型(尝试了所有可能性)。 |
电子标签* | 零次或多次出现的路径电子束。 |
电子标签+ | 一个或多个实例的路径电子标签。 |
elt? | 零或一的路径电子标签。 |
elt{n,m} | n次和m次之间的路径电子束。 |
英语{n} | 确切地n个事件电子标签。固定长度的路径。 |
英语{n,} | n个或多次出现电子标签。 |
elt{,n} | 介于0和之间n个事件电子标签。 |
路径元素的零出现总是匹配的。
优先:
- URI,带前缀的名称
- 组
- 一元运算符*,?,+和{}表格
- 一元^反向链接
- 二进制运算符/和^
- 二进制运算符|
组内的优先级从左到右。
4路径术语
如果路径只涉及运算符/(序列),^(逆,一元或二进制)和形式{n个},对于某些单个整数n个.此类路径是固定长度的。在向SPARQL代数,不需要在运行时进行特殊的路径评估。
URI的路径仍然是单一的三重模式。
如果路径涉及一个或多个运算符*、?、+,则该路径为“复杂”路径和{}(除{无}). 这样的路径需要代数扩展。
长度为零的路径将图形节点连接到自身。
路径中的循环是可能的,并且会得到处理。
路径不需要锚定在一端或另一端,虽然这可以由于搜索了整个图,导致了大量结果。
5个示例
另请参见用例。
5.1简单路径
找出爱丽丝认识的任何人的名字。
{?x foaf:mbox<邮寄地址:艾丽斯@示例> .?x foaf:knows/foaf:name?名称。}
查找人名2“foaf:知道“链接离开。
{?x foaf:mbox<邮寄地址:艾丽斯@示例> .?x foaf:knows/foaf:knows/foaf:name?名称。}
这与严格的SPARQL查询相同:
{?x foaf:mbox<mailto:艾丽斯@示例> .?x foaf:knows[foaf:knows[foaf:名称?名称]].}
或者,使用显式变量:
{?x foaf:mbox<邮寄地址:艾丽斯@示例> .?x foaf:知道吗?a1。?a1 foaf:知道吗?答2。?a2-foaf:名字?名称。}
因为爱丽丝认识的人可能很了解爱丽丝,上面的例子可能包括爱丽丝本人。这可以通过以下方式避免:
{?x foaf:mbox<mailto:艾丽斯@示例> .?x foaf:knows/foaf:knows?是的。过滤器(?x!=?y)?y foaf:名字?姓名}
这两个查询是相同的:第二个查询只是反转属性交换主客体角色的方向。
{?x foaf:mbox<mailto:艾丽斯@示例> }
{<邮寄地址:艾丽斯@示例>^foaf:mbox?x}(x})
找到所有认识某人的人?x个知道。
{?x foaf:知道^foaf:了解?是的。过滤器(?x!=?y)}
5.2复杂路径
找出爱丽丝能联系到的所有人的名字foaf:知道:
{?x foaf:mbox<邮寄地址:艾丽斯@示例> .?x foaf:知道+/foaf:name?名称。}
一些形式的有限推理也是可能的。例如:所有类型和资源的超类型:
{ <http://example/thing>rdf:type/rdfs:subClassOf*?键入}
所有资源及其推断类型:
{?x rdf:type/rdfs:subClassOf*?type}
6语法
如果时间允许,此语法将并入主SPARQL语法功能被接受。
三重同一主题路径 | ::= | VarOrTerm属性列表NotEmptyPath|TriplesNode属性列表路径 |
属性列表路径 | ::= | 属性列表不为空? |
属性列表非空路径 | ::= | (VerbPath|VerbSimple)对象列表(“;”((VerbPath |Verb简单)对象列表)?)* |
动词路径 | ::= | 路径 |
动词Simple | ::= | 变量 |
路径 | ::= | 路径备选方案 |
路径备选方案 | ::= | 路径序列(“|”PathSequence)* |
路径序列 | ::= | PathEltOrInverse(“/”PathElt OrInverse|“^”PathE1t)* |
PathElt公司 | ::= | PathPrimary PathMod? |
路径EltOrInverse | ::= | PathElt|'^'PathElt |
路径Mod | ::= | (“*”|“?”|“+”|“{”(整数(','('}'| Integer'}')|“}'))) |
路径主要 | 时间:= | (IRIref|'a'|'('Path')') |
8评估
@@未完成部分
路径计算生成一组变量绑定(不包括任何系统生成的变量)。如果有两个或多个路径,从<a>到<b>,则只返回唯一的解决方案。
允许循环并包含在匹配中。循环检测是必要的。
三重模式相当于长度正好为一的路径。