我在此问题中的要求几乎相同:Get all nodes in a transitive relation
我正在使用Protege 3.4.8。这是一个Owl-Lite项目。 我有一个传递属性“包含”,它被定义为Node类型的对象属性 Node具有A,B和C类型的后代
我有个人通过包含这样的属性相互链接:
A包含B包含C
当我运行以下SPARQL查询时:
SELECT ?A ?B
WHERE
{
?A :contains ?B
}
我明白了:
A1 B1
B1 C1
由于包含的传递性质,我希望得到
A1 C1
太。 我在这做错了什么?我联系到的问题包括Jena的答案,在Jena模型上做这个会有所不同吗?
答案 0 :(得分:1)
好的,
进一步搜索引导我访问此页面:http://opentox.org/data/documents/development/RDF%20files/JavaOnly/query-reasoning-with-jena-and-sparql
本页的以下引用(可能)解释了我所看到的行为背后的原因:
“出于我们的目的,可以直接执行SPARQL查询 通过Protege中的SPARQL查询面板或从JAVA内部 应用程序使用专门的Jena库方法。都 方法能够处理有关显式对象和查询的查询 财产关系,但耶拿图书馆的优势在于使用 推理。因此,使用Jena库方法执行的查询可以返回 结果还考虑了传递和推断的关系。“
答案 1 :(得分:0)
SPARQL是一种RDF查询语言,因此并非所有SPARQL引擎都应实现OWL蕴涵(即,使用OWL语义来评估查询)。有关详情,请访问http://www.w3.org/TR/sparql11-entailment/
不确定哪个实现实际上是在引擎盖下使用Protege ...