这个Sparql查询有什么问题

这个Sparql查询有什么问题,sparql,Sparql,我有一个父类“Causes”,它有子类“Agging”,“badlifesture”。每个类Causes都有一个数据类型属性“name”,其中包含个人(Class=>personals)Causes=>Cause\u 1,Agging=>Agging\u 1,badlifesture=>badlifesture\u 1 我想得到这样的结果 Ind SubCLassOF type Agging_1 Causes

我有一个父类“Causes”,它有子类“Agging”,“badlifesture”。每个类Causes都有一个数据类型属性“name”,其中包含个人(Class=>personals)Causes=>Cause\u 1,Agging=>Agging\u 1,badlifesture=>badlifesture\u 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"))
    }

它没有给我任何理由,因为我正在使用virtuoso服务器进行RDF和sparql。 在virtuoso中,我们必须在可选之前添加一个空格或回车,然后可选将在virtuoso中工作。 因此,添加一个空格或输入beforoptional,这样您就可以得到结果。
希望这能用于此查询。

从语法上看,您的查询看起来不错,不确定是什么问题

通常情况下,我更喜欢为此类操作执行以下操作:

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.}
}

answers.semanticweb.com上的重复问题: