我希望使用可变属性路径执行一个简单的SPARQL查询。就像这样
sem:sparql("SELECT ?o WHERE { </person/10025613.xml> <hasManager>+ ?o . }")这个查询运行得很好。但是现在,当我想要使语句与变量一起工作时,我无法让它正确地进行语法检查。
sem:sparql("
SELECT ?o WHERE { ?s ?p+ ?o . }
", $params)意外令牌语法中的...results。还有,我试过了
let $params := map:new(
(
map:entry("s", sem:iri("/person/10025613.xml")),
map:entry("p", concat(sem:iri("hasManager"), "+"))
)
)这也不起作用。谢谢你的建议。
发布于 2016-05-04 05:56:50
SPARQL属性路径显式不允许变量。参见SPARQL 1.1 Property Paths。
您可以通过以下对象属性来跟踪具有变量的路径。例如:
SELECT ?o
WHERE {
?s ?p ?o1 .
?o1 ?p1 ?o .
}发布于 2020-01-14 02:11:16
我认为在某些情况下,您可能希望在不重写整个字符串的情况下为SPARQL属性路径分配多个值。对于允许在运行时定义名称空间的SPARQL实现,这是可能的。
例如:rdflib是一个python包,用于处理RDF图,并包含一个用于执行SPARQL查询的插件。命名空间可以在运行时定义,允许我们使用以下hack定义变量属性路径(绑定变量的位置):
SELECT ?s ?o
WHERE {
?s p:+ ?o .
}查询中未定义命名空间p:。相反,在运行时,我们可以指定我们想要的路径,例如使用rdflib
from rdflib import Graph, URIRef
Graph().query(
query_string,
initNs={
"p": URIRef("https://www.example.com/your_predicate")
}这对那些希望拥有变量路径的人没有帮助,但可能会帮助那些希望在不违反SPARQL语法规则的情况下利用绑定变量上的属性路径的表达能力的人。
我认为这是一种危险的行为,应该谨慎使用。任何能提供违反SPARQL规则的可靠理由的人都将获得+1。
https://stackoverflow.com/questions/37011131
复制相似问题