2011-10-14 195 views
1

我有一个父类“起因”有子类“Agging”,“BadLifeStyle”每个类导致与个人(Class =>个人)的数据类型属性“名称”原因=> Cause_1, Agging => Agging_1,BadLifeStyle => BadLifeStyle_1 我想这样这个Sparql查询有什么问题

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个人

+0

您可以发布你的RDF文件? –

+0

answer.semanticweb.com上的重复问题:http://answers.semanticweb.com/questions/12042/help-me-in-this-sparql-query –

回答

1

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

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