不同的SPARQL查询引擎为DESCRIBE Query提供不同的结果

时间:2014-01-22 02:55:01

标签: sparql jena protege4

我在两个不同的引擎中尝试了一个SPARQL查询:

  1. Protege 4.3 - SPARQL查询选项卡
  2. Jena 2.11.0
  3. 虽然查询相同但这两个工具返回的结果不同。

    我尝试了DESCRIBE查询,如下所示:

    DESCRIBE ?x
    WHERE { ?x :someproperty "somevalue"}
    

    来自protege的结果给了我以?x为主题/对象的元组;而来自jena的那些仅以?x为主题。

    我的问题是:

    1. SPARQL的语法是统一的吗?
    2. 如果我希望DESCRIBE像保护一样工作,我应该在耶拿做什么?

1 个答案:

答案 0 :(得分:3)

回答第一个问题是,SPARQL语法是统一的,因为您在两个工具中都使用了相同的查询。但是我认为你实际上要问的是两个工具的结果是否应该不同?即是SPARQL统一的语义

DESCRIBE的情况下,然后是,SPARQL规范明确允许结果不同,即SPARQL的语义不统一,但仅在DESCRIBE的情况下。< / p>

请参阅SPARQL规范的Section 16.4 DESCRIBE (Informative),其中说明了以下内容:

  

查询模式用于创建结果集。 DESCRIBE表单   获取解决方案中标识的每个资源,以及   由IRI直接命名的任何资源,并组装单个RDF图   通过采取可能来自任何信息的“描述”   可用,包括目标RDF数据集。描述是   由查询服务确定

这一点的重要部分是最后几句话说说明由查询服务决定。这意味着Protege和Jena的答案都是正确的,因为他们可以选择如何形成描述。

更改Jena DESCRIBE处理

要回答问题的第二部分,您可以通过实施自定义DescribeHandler和关联的DescribeHandlerFactory来更改Jena处理DESCRIBE查询的方式。然后你需要像这样注册你的工厂:

DescribeHandlerRegistry.get().set(new YourDescribeHandlerFactory());