1

我正在尝试使用 sparql 将 URL 作为参数发送到芝麻工作台。我怎样才能做到这一点?

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

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作为对象。

4

1 回答 1

0

我不是 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
于 2016-04-28T21:17:18.253 回答