很抱歉,这是一个菜鸟的简单问题,但这将帮助我解决我的概念上的困惑!我有一些猜测,但想确定一下。
我通过NeuroFMA本体和下面的查询获得了大脑一部分的位置:
PREFIX fma: <http://sig.uw.edu/fma#>
select ?loc{
fma:Superior_temporal_gyrus fma:location ?loc}
结果是:fma:live_incus_fm_14056
我认为我也许能够获得有关此项目的更多信息。
问题1 :如果结果是原义文字,会有区别吗?
因此,我使用optional {?loc ?p ?o}
并获得了一些结果。
但是,我认为由于该本体也导入了RDF和OWL,因此以下查询也应该起作用,但事实并非如此(希望这些代码正确)!
optional {?value rdfs:range ?loc}
optional {?loc rdfs:domain ?value}
optional {?loc rdf:type ?value}
问题2 如果上述查询正确,那么RDFS和OWL只是一个建议吗?还是导入/跟随它们的本体必须使用它们的所有资源,或者至少在它们上面进行扩展?
谢谢!
答案 0 :(得分:2)
在大多数情况下,OWL中的导入声明仅提供参考。它通常用于表示该本体重用了目标中定义的某些概念(例如,它可以定义目标数据中定义的类的一些其他子类)。
导入是否会导致将任何其他数据加载到数据集中,取决于您用于处理本体的数据库/ API /原因。默认情况下,大多数工具不会自动加载导入声明的目标,因此,导入声明的存在与否不会影响查询的返回结果。
我认为,由于该本体也导入了RDF和OWL,因此以下查询也应适用,但事实并非如此(希望 这些代码正确)!
optional {?value rdfs:range ?loc} optional {?loc rdfs:domain ?value} optional {?loc rdfs:type ?value}
它是rdf:type
,而不是rdfs:type
。除此之外,每个单独的看起来不错。但是,从更广泛的查询来看,?loc
通常不是属性,而是属性 value 。属性值没有域和范围。您可以查询类似的内容,
optional { fma:location rdfs:domain ?value}
这将询问“属性fma:location
是否具有域声明,请返回该声明并将其绑定到?value
变量”。
更一般而言,这些查询是否返回任何结果与本体中存在的导入声明几乎没有关系。如果您的本体包含属性的范围声明,则第一个模式将返回结果。如果包含域声明,则第二个将返回结果。 最后,如果您的本体包含某个类的实例,则第三个模式(已更正)将返回结果。就这么简单。
这里没有魔术:查询仅返回数据集中存在的内容。数据集中显示的内容取决于您如何将数据加载到数据库中,以及(可选)在数据库之上启用的推理机形式。