sparql 查询:URL 作为参数,使用 with Python 和 Sesame-Workbench

sparql query: URL as a parameter, using with Python and Sesame-Workbench

我正在尝试使用 sparql 将 URL 作为参数发送给芝麻 workbench。我该怎么做?

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

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

我不是 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