如何使用kleene星形运算符(*)或它';sparql中带有变量的s变量(+;)?
我有一些工作代码来获取层次结构中一个术语的所有祖先。 以下:如何使用kleene星形运算符(*)或它';sparql中带有变量的s变量(+;)?,sparql,kleene-star,Sparql,Kleene Star,我有一些工作代码来获取层次结构中一个术语的所有祖先。 以下: PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#> PREFIX rdf: <http://www.w3.org/2000/01/rdf-schema#> select ?grandparentliteral
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
PREFIX rdf: <http://www.w3.org/2000/01/rdf-schema#>
select ?grandparentliteralform (count(?parent) as ?distance)
{ ?iri skos:broader+ ?parent .
?parent skos:broader* ?grandparent .
?grandparent skos-xl:prefLabel ?grandparentlabel .
?grandparentlabel skos-xl:literalForm ?grandparentliteralform .
}
group by ?grandparent
order by DESC(?distance)
我真正想做的是:
select ?grandparentliteralform (count(?parent) as ?distance)
{ ?iri ?p+ ?parent .
?parent ?p* ?grandparent .
?grandparent skos-xl:prefLabel ?grandparentlabel .
?grandparentlabel skos-xl:literalForm ?grandparentliteralform .
?p rdf:subPropertyOf skos:broader .
}
group by ?grandparent
order by DESC(?distance)
但是使用?p+
或?p*
会抛出错误
意外令牌语法错误、意外、预期或
如何将*
/+
与变量一起使用?您不能。正如SPARQL 1.1规范中所述:
路径的末端可以是RDF术语或变量。变量不能用作路径本身的一部分,只能用作端点
你不能。正如SPARQL 1.1规范中所述:
路径的末端可以是RDF术语或变量。变量不能用作路径本身的一部分,只能用作端点
您可能会使用替代方案来捕获以下内容:
?parent (skos:broader|your:alternative)* ?grandparent
确切的形式将需要反映您的数据结构,以及您是否希望允许混合使用
skos:brother
和您的备选方案(我的示例允许)。如果您想要特定属性的纯链,可以将*
运算符移动到括号内,并将其添加到每个可选项中。您可以使用可选项来捕获以下内容:
?parent (skos:broader|your:alternative)* ?grandparent
确切的形式将需要反映您的数据结构,以及您是否希望允许混合使用
skos:brother
和您的备选方案(我的示例允许)。如果需要特定属性的纯链,可以将*
操作符移动到括号内,并将其添加到每个备选方案中。(|!)*
是解决方法,因为它不是规范的一部分。请注意,应该清楚的是,在性能最差的情况下,这可能会造成问题—如果没有适当的索引etcI,路径查询的计算就不是那么简单了,实际上,您将无法重用绑定到给定属性的所有子属性的变量。不过,我不知道你的情况下是否真的需要这个。我的意思是,你的数据集中有多少子属性?谢谢,原来我有3个。但是我想使用变量的原因是为了捕获更多的动态添加。(|!)*
是这里的解决方法,因为它不是规范的一部分。请注意,应该清楚的是,在性能最差的情况下,这可能会造成问题—如果没有适当的索引etcI,路径查询的计算就不是那么简单了,实际上,您将无法重用绑定到给定属性的所有子属性的变量。不过,我不知道你的情况下是否真的需要这个。我的意思是,你的数据集中有多少子属性?谢谢,原来我有3个。但是我想使用变量的原因是为了捕获更多变量的动态添加。