我在两个不同的引擎中尝试了一个SPARQL查询:
虽然查询相同但这两个工具返回的结果不同。
我尝试了DESCRIBE
查询,如下所示:
DESCRIBE ?x
WHERE { ?x :someproperty "somevalue"}
来自protege的结果给了我以?x
为主题/对象的元组;而来自jena的那些仅以?x
为主题。
我的问题是:
DESCRIBE
像保护一样工作,我应该在耶拿做什么?答案 0 :(得分:3)
回答第一个问题是,SPARQL语法是统一的,因为您在两个工具中都使用了相同的查询。但是我认为你实际上要问的是两个工具的结果是否应该不同?即是SPARQL统一的语义
在DESCRIBE
的情况下,然后是,SPARQL规范明确允许结果不同,即SPARQL的语义不统一,但仅在DESCRIBE
的情况下。< / p>
请参阅SPARQL规范的Section 16.4 DESCRIBE (Informative),其中说明了以下内容:
查询模式用于创建结果集。
DESCRIBE
表单 获取解决方案中标识的每个资源,以及 由IRI直接命名的任何资源,并组装单个RDF图 通过采取可能来自任何信息的“描述” 可用,包括目标RDF数据集。描述是 由查询服务确定
这一点的重要部分是最后几句话说说明由查询服务决定。这意味着Protege和Jena的答案都是正确的,因为他们可以选择如何形成描述。
要回答问题的第二部分,您可以通过实施自定义DescribeHandler和关联的DescribeHandlerFactory来更改Jena处理DESCRIBE
查询的方式。然后你需要像这样注册你的工厂:
DescribeHandlerRegistry.get().set(new YourDescribeHandlerFactory());