2011-10-14 131 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.} 
}