我有一些工作代码可用于获取层次结构中某个术语的所有祖先。 正在关注:
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)
当IRI的更大谓词是子财产(?p rdf:subPropertyOf skos:broader
)时,它会中断
因此,现在我正在执行此操作以捕获所有子属性谓词:
select ?grandparentliteralform (count(?parent) as ?distance)
{ ?iri ?p ?parent .
?parent skos:broader* ?grandparent .
?grandparent skos-xl:prefLabel ?grandparentlabel .
?grandparentlabel skos-xl:literalForm ?grandparentliteralform .
?p rdf:subPropertyOf skos:broader .
}
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*
会引发错误。
Unexpected token syntax error, unexpected <variable>, expecting <decimal literal> or <double literal> or <integer literal>
如何将*
/ +
与变量一起使用?
答案 0 :(得分:2)
不能。正如SPARQL 1.1规范的Property Paths section所述:
路径的末端可以是RDF术语或变量。变量不能用作路径本身的一部分,只能用作端点。
答案 1 :(得分:0)
您可能会使用替代方法来捕获此信息:
?parent (skos:broader|your:alternative)* ?grandparent
确切的形式将需要反映您的数据结构以及是否要允许skos:broader
和您的替代项(我的例子允许)的混合。您可以将*
运算符移到方括号内,如果需要特定属性的纯链,请将其添加到每个替代项中。