Я пытаюсь собрать все подклассы (дочерние классы) в онтологии вместе с их информацией, а затем выбрать информацию, относящуюся к "прецентральной извилине", из онтологии FMA :
#selecting all sub-classes that include "precentral gyrus"
select distinct ?parts ?name ?id ?propName ?comment
where {
#finding sub-classes
?c a ?class.
?parts rdfs:subClassOf ?class.
#getting the info
optional {?parts rdfs:label ?name.}
optional {?parts fma:FMAID ?id.}
optional {?property a rdf:Property.
optional {?property rdfs:label ?propName}}
optional {?parts rdfs:comment ?comment.}
#filtering related info - moved to the beginning
filter contains(lcase(str(?name)), "precentral gyrus").
}
order by ?id
limit 100
Дело в том, что если переместить ключевое слово FILTER
в начало блока, я все равно получу те же результаты, частично показанные на этом изображении:
Когда я помещаю фильтр в начало кода, даже переменная ?name
, которая используется в команде FILTER
, еще не определена в то время, когда FILTER
выполняет свою работу (фильтрация прецентральной извилины)! Почему это?
У меня тоже есть дополнительный вопрос. Правильна ли часть кода с двумя OPTIONAL
блоками внутри другого?