代码之家  ›  专栏  ›  技术社区  ›  Aravind

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

  •  1
  • Aravind  · 技术社区  · 8 年前

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

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

    1 回复  |  直到 8 年前
        1
  •  0
  •   Jeen Broekstra    8 年前

    我不是Python程序员,但看起来您正在使用字符串格式( % 运算符)将值插入SPARQL查询。在本例中 p (“OSPF”)插入到字符串中,替换 %s 因此,结果是:

      FOAF:price :OSPF .
    

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

      PREFIX : <http://something.com>
    

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

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

    如果你想要一个不同的URL,你必须改变它被替换的方式。一种解决方案是将完整的URI作为 p 。然后需要从中删除前导冒号 %秒 而是用尖括号将其括起来(表示它是一个完整的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查询中引入另一个名称空间声明,并在 %秒 。例如:

       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