这个Sparql查询有什么问题

时间:2011-10-14 12:58:23

标签: sparql

我有一个父类“起因”,它有子类“Agging”,“BadLifeStyle”每个类的原因都有一个数据类型属性“name”与个人(Class => Individuals)Reason => Cause_1,Agging => Agging_1,BadLifeStyle => BadLifeStyle_1 我希望得到这样的结果

Ind                SubCLassOF               type
Agging_1           Causes                   Agging
BadLifeStyle_1     Causes                   BadLifeStyle
Cause_1                                     Causes

我写了这个查询

SELECT *
    WHERE {

          ?cause rdf:type ?typename.
          ?cause rdfs:subClassOf ?subClass.
          OPTIONAL{?cause NS:name ?name.}
           FILTER(REGEX(STR(?typename),"Causes","i")
          || REGEX(STR(?subClass),"Causes","i"))
    }

它没有给我Cause_1个人

2 个答案:

答案 0 :(得分:2)

从语法上讲,你的查询看起来很好,不确定是什么问题...

通常我更喜欢为这种操作执行UNION,在我们的例子中如下:

SELECT *
WHERE {
  {
    ?cause rdf:type ?typename .
    FILTER(REGEX(STR(?typename), "Causes", "i"))  
  } UNION {
    ?cause rdfs:subClassOf ?subClass .
    FILTER(REGEX(STR(?subClass), "Causes", "i"))
  }
  OPTIONAL{?cause NS:name ?name.}
}

答案 1 :(得分:1)

我正在为RDF和sparql使用virtuoso服务器。 在virtuoso中,我们必须添加一个空格或在OPTIONAL之前输入,然后OPTIONAL将在virtuoso中工作。 所以添加一个空格或输入befor OPTIONAL然后你就能得到结果。 希望这适用于此查询。