Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用kleene星形运算符(*)或它';sparql中带有变量的s变量(+;)?_Sparql_Kleene Star - Fatal编程技术网

如何使用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个。但是我想使用变量的原因是为了捕获更多变量的动态添加。