【问题标题】:sparql query: URL as a parameter, using with Python and Sesame-Workbenchsparql 查询:URL 作为参数,与 Python 和 Sesame-Workbench 一起使用
【发布时间】:2016-04-28 11:19:11
【问题描述】:

我正在尝试使用 sparql 将 URL 作为参数发送到 sesame 工作台。我该怎么做?

更具体地说,我的代码中的一个工作示例是;

p="OSPF"
queryString = ("""
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX FOAF: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX : <http://something.com>

INSERT DATA {
: rdf:type FOAF:productdetails ;
FOAF:price :%s .
}""")% p

在输出中,谓词 'price' 的对象是 'http://something.com/OSPF'。我想要 www.myurl.com 作为对象。

【问题讨论】:

  • 顺便说一句:您不应该以编程方式向 Sesame Workbench 发送查询。 Workbench 只是一个客户端 UI。而是将您的查询发送到实际的芝麻服务器。
  • @JeenBroekstra 我该怎么做?那么终点会是什么?
  • 通常类似于http://&lt;server&gt;/openrdf-sesame/repositories/&lt;repositoryId&gt;

标签: python rdf sesame sparqlwrapper


【解决方案1】:

我不是 Python 程序员,但看起来您正在使用字符串格式(使用 % 运算符)将值插入到 SPARQL 查询中。在这种情况下,p(“OSPF”)的值被插入到您的字符串中,替换了%s。所以这样的结果是:

  FOAF:price :OSPF .

OSPF 前面的: 表示您在这里使用的是带前缀的名称,带有默认前缀。默认前缀在命名空间声明中定义为:

  PREFIX : <http://something.com>

这导致插入到您的 SPARQL 查询中的最终 URI 为:

  FOAF:price <http://something.comOSPF> .

如果你想要一个不同的 URL,你必须改变它的替代方式。一种解决方案是将完整的 URI 作为p 的值。然后,您需要从 %s 中删除前导冒号,并用尖括号将其括起来(表示它是完整的 URI):

   p = "http://www.myurl.com/OSPF" 
   queryString = ("""
   PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
   PREFIX FOAF: <http://www.w3.org/2000/01/rdf-schema#>
   PREFIX : <http://something.com>

   INSERT DATA {
    : rdf:type FOAF:productdetails ;
      FOAF:price <%s> .
    }""")% p

另一种选择是在您的 SPARQL 查询中引入另一个命名空间声明,并在 %s 前面使用它。例如:

   p = "OSPF" 
   queryString = ("""
   PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
   PREFIX FOAF: <http://www.w3.org/2000/01/rdf-schema#>
   PREFIX my: <http://www.myurl.com/> 
   PREFIX : <http://something.com>

   INSERT DATA {
    : rdf:type FOAF:productdetails ;
      FOAF:price my:%s .
    }""")% p

【讨论】:

  • 我不知道你的第一个澄清是什么意思。如果您的问题中缺少某些内容,您可以对其进行编辑以包含必要的信息吗?
  • 已编辑:两个澄清;1。如果我在查询中使用 ,则三元组输出的对象部分(查看 'SELECT * where { ?a ?b ?c }' 的输出时,使用 sesame-work bench 的直接查询工具)也包含尖括号,如 。我怎样才能摆脱它? 还有一件事如果我想传递一个包含一些特殊字符(尤其是空格)的变量,该怎么做?提前致谢。
  • 这听起来更像是一个不同的问题。如果您有一个新问题,请将其发布为作为单独的新问题。如果有助于提供上下文,您可以提供返回此问题的链接。
猜你喜欢
  • 2013-08-14
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多