首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sem:sparql绑定属性路径

sem:sparql绑定属性路径
EN

Stack Overflow用户
提问于 2016-05-04 01:56:29
回答 2查看 290关注 0票数 2

我希望使用可变属性路径执行一个简单的SPARQL查询。就像这样

代码语言:javascript
复制
sem:sparql("SELECT ?o WHERE { </person/10025613.xml> <hasManager>+ ?o . }")

这个查询运行得很好。但是现在,当我想要使语句与变量一起工作时,我无法让它正确地进行语法检查。

代码语言:javascript
复制
sem:sparql("
  SELECT   ?o WHERE { ?s ?p+ ?o . }
", $params)

意外令牌语法中的...results。还有,我试过了

代码语言:javascript
复制
let $params := map:new(
  (
    map:entry("s", sem:iri("/person/10025613.xml")),
    map:entry("p", concat(sem:iri("hasManager"), "+"))
  )
)

这也不起作用。谢谢你的建议。

EN

回答 2

Stack Overflow用户

发布于 2016-05-04 05:56:50

SPARQL属性路径显式不允许变量。参见SPARQL 1.1 Property Paths

您可以通过以下对象属性来跟踪具有变量的路径。例如:

代码语言:javascript
复制
SELECT ?o
WHERE {
   ?s ?p ?o1 .
   ?o1 ?p1 ?o .
}
票数 4
EN

Stack Overflow用户

发布于 2020-01-14 02:11:16

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

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

代码语言:javascript
复制
SELECT ?s ?o
WHERE {
    ?s p:+ ?o .
}

查询中未定义命名空间p:。相反,在运行时,我们可以指定我们想要的路径,例如使用rdflib

代码语言:javascript
复制
from rdflib import Graph, URIRef

Graph().query(
    query_string,
    initNs={
        "p": URIRef("https://www.example.com/your_predicate")
    }

这对那些希望拥有变量路径的人没有帮助,但可能会帮助那些希望在不违反SPARQL语法规则的情况下利用绑定变量上的属性路径的表达能力的人。

我认为这是一种危险的行为,应该谨慎使用。任何能提供违反SPARQL规则的可靠理由的人都将获得+1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37011131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档