我正在尝试使用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 作为对象。
答案 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