Имеет ли значение, куда поместить ключевое слово FILTER в блоке кода SPARQL? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь собрать все подклассы (дочерние классы) в онтологии вместе с их информацией, а затем выбрать информацию, относящуюся к "прецентральной извилине", из онтологии 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 в начало блока, я все равно получу те же результаты, частично показанные на этом изображении: enter image description here Когда я помещаю фильтр в начало кода, даже переменная ?name, которая используется в команде FILTER, еще не определена в то время, когда FILTER выполняет свою работу (фильтрация прецентральной извилины)! Почему это?

У меня тоже есть дополнительный вопрос. Правильна ли часть кода с двумя OPTIONAL блоками внутри другого?

...