что не так с этим запросом Sparql - PullRequest
1 голос
/ 14 октября 2011

У меня есть родительский класс "Причины", который имеет подклассы "Agging", "BadLifeStyle". У каждого класса "Причины" есть свойство типа данных "name" с индивидуумами (Class => Individuals). Причины => 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"))
    }

Это не дало мне Причину_1 человека

Ответы [ 2 ]

2 голосов
/ 27 октября 2012

Синтаксически ваш запрос выглядит нормально, не уверен, в чем проблема ...

Обычно я предпочитаю выполнять 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 голос
/ 26 августа 2012

Я использую виртуозный сервер для RDF и sparql. Виртуозно, мы должны добавить один пробел или ввести перед OPTIONAL, тогда OPTIONAL будет работать виртуозно. Поэтому добавьте один пробел или введите опционально, и вы сможете получить результаты. Надеюсь, что это сработает для этого запроса.

...