sem:sparql绑定属性路径

sem:sparql绑定属性路径,sparql,marklogic,marklogic-8,Sparql,Marklogic,Marklogic 8,我希望使用变量属性路径执行一个简单的SPARQL查询。差不多 sem:sparql("SELECT ?o WHERE { </person/10025613.xml> <hasManager>+ ?o . }") …导致意外的令牌语法。还有,我试过了 let $params := map:new( ( map:entry("s", sem:iri("/person/10025613.xml")), map:entry("p", concat(sem:

我希望使用变量属性路径执行一个简单的SPARQL查询。差不多

sem:sparql("SELECT ?o WHERE { </person/10025613.xml> <hasManager>+ ?o . }")
…导致意外的令牌语法。还有,我试过了

let $params := map:new(
  (
    map:entry("s", sem:iri("/person/10025613.xml")),
    map:entry("p", concat(sem:iri("hasManager"), "+"))
  )
)

这也不起作用。感谢您的建议。

SPARQL属性路径明确不允许变量。看

通过遵循对象属性,可以使用变量跟踪路径。例如:

SELECT?o
在哪里{
?s?p?o1。
?o1?p1?o。
}

我认为在某些情况下,您可能希望在不重写整个字符串的情况下为SPARQL属性路径分配多个值。这在允许在运行时定义名称空间的SPARQL实现中是可能的

例如:
rdflib
是一个用于处理RDF图的python包,它包含一个用于SPARQL查询执行的插件。名称空间可以在运行时定义,允许我们使用以下方法定义变量属性路径(变量绑定的位置):

SELECT ?s ?o
WHERE {
    ?s p:+ ?o .
}
查询中未定义命名空间
p:
。相反,在运行时,我们可以指定所需的路径,例如使用
rdflib

来自rdflib导入图,URIRef
Graph().query(
查询字符串,
初始值={
“p”:URIRef(“https://www.example.com/your_predicate")
}
这并不能帮助那些希望拥有变量路径的人,但可以帮助那些希望在不破坏SPARQL语法规则的情况下利用绑定变量上属性路径的表达能力的人

我认为这是一种危险的行为,应该谨慎使用。任何人只要能提供一个坚实的理由说明这违反SPARQL规则,就会获得+1

SELECT ?s ?o
WHERE {
    ?s p:+ ?o .
}