这个Sparql查询有什么问题
我有一个父类“Causes”,它有子类“Agging”,“badlifesture”。每个类Causes都有一个数据类型属性“name”,其中包含个人(Class=>personals)Causes=>Cause\u 1,Agging=>Agging\u 1,badlifesture=>badlifesture\u 1 我想得到这样的结果这个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
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上的重复问题: