我试图将本体中的所有子类(子类)与它们的信息一起获取,然后从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
块的代码部分在另一个内部正确吗?