sparql query:URL作为参数,与Python和Sesame-Workbench一起使用

时间:2016-04-28 11:19:11

标签: python rdf sesame sparqlwrapper

我正在尝试使用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

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

1 个答案:

答案 0 :(得分:0)

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

  FOAF:price :OSPF .

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

  PREFIX : <http://something.com>

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

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

如果您需要其他网址,则必须更改替换方式。一种解决方案是将完整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