简单的SPARQL查询无法正常工作

时间:2016-08-20 13:53:36

标签: sparql semantic-web

我是SPARQL的新手。我在Protege中创建了一个本体,并且有两个类:

Book
Page

所以..在“按班级分类”我有这个

Book1 startWith page1
Book1 endWith page2

Book2 startWith page2
Book2 endWith page5

Book3 startWith page1
Book3 endWith page2

此外page1的数据属性值为1

page2 with value 2
page5 with value 2

所以..我想制作一个SPARQL查询,它返回所有具有该开头的书籍在同一页面中并以同一页面结束。

现在这是我的SPARQL查询,但无效。

PREFIX foaf: <http://xmlns.com/foaf/0.1/>  
SELECT ?book, ?book2
WHERE { ?book foaf:starWith ?f1 .  
        ?book foaf:endWith ?f2 .  
        ?book2 foaf:starWith ?f3 .
        ?book2 foaf:endWith ?f4 .    
        FILTER regex(?f1, ?f3)   
}  

抱歉,我是新手

1 个答案:

答案 0 :(得分:4)

  1. 您在查询中有拼写错误,该属性称为星号 t With。
  2. 不要将现有的本体/命名空间用于您自己的本体,即不要使用RDF,RDFS,OWL,FOAF。相反,请使用您自己的命名空间。
  3. 投影变量之间不允许使用逗号。至少不是来自SPARQL规范。一些三重商店确实支持一些扩展语法,但我总是坚持使用标准的SPARQL。
  4. REGEX是完全错误的。不知道你想用它做什么,但这用于字符串匹配。 FILTER(?book != book2 && ?f1 = ?f3 && ?f2 = ?f4)就足够了
  5. 查询:

    PREFIX  myNs: <http://my-namespace.org/>
    SELECT  ?book1 ?book2
    WHERE
      { ?book1 myNs:startWith ?s1 .
        ?book1 myNs:endWith ?e1 .
        ?book2 myNs:startWith ?s2 .
        ?book2 myNs:endWith ?e2
        FILTER (?book1 != ?book2 && ?s1 = ?s2 && ?e1 = ?e2)
      }