当前位置: 首页 > 知识库问答 >
问题:

SPARQL查询等价性问题?

郎飞航
2023-03-14

(尤其是@JeenBroekstra)

使用下面的图表,我得到了这个SPARQL查询,它目前在芝麻存储库中工作:

PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT *
FROM <http://spinrdf.org/sp>
FROM <http://spinrdf.org/spl>
FROM <http://spinrdf.org/spin>
FROM <http://topbraid.org/examples/kennedysSPIN>
FROM <http://topbraid.org/examples/kennedys>

FROM NAMED <http://topbraid.org/examples/kennedys>
WHERE {
    GRAPH <http://topbraid.org/examples/kennedys> {
        ?s ?p ?o .
    } .
    OPTIONAL {
        FILTER (sameTerm(rdf:type, ?p)) .
        ?o rdfs:subClassOf+ ?supC .
    } .
    OPTIONAL {
        FILTER (sameTerm(rdf:type, ?p) && NOT EXISTS { ?s a ?newSupC . }) .
        ?o rdfs:subClassOf+ ?newSupC .
    } .
    FILTER (bound(?newSupC)) .
}

由于最后两个可选模式共享一些过滤器,我想我可以合并它们,我导致了这个查询:

PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT *
FROM <http://spinrdf.org/sp>
FROM <http://spinrdf.org/spl>
FROM <http://spinrdf.org/spin>
FROM <http://topbraid.org/examples/kennedysSPIN>
FROM <http://topbraid.org/examples/kennedys>

FROM NAMED <http://topbraid.org/examples/kennedys>
WHERE {
    GRAPH <http://topbraid.org/examples/kennedys> {
        ?s ?p ?o .
    } .
    OPTIONAL {
        FILTER (sameTerm(rdf:type, ?p)) .
        ?o rdfs:subClassOf+ ?supC .
        OPTIONAL {
            FILTER ( NOT EXISTS { ?s a ?supC . } ) .
            BIND (?supC as ?newSupC)
        } .
    } .
    FILTER (bound(?newSupC)) .
}

但是当执行它时,我会得到一个空的结果集。

在提交bug请求之前,我想问一下:你能告诉我这个查询哪里错了吗?或者这是芝麻中的bug吗?

提前谢谢你,麦克斯。

编辑:我当然把FILTER(绑定(?newSupC))只是为了暴露失败的模式。在全局视图中,我仍然需要所有的结果,即使变量?newSupC未绑定。

编辑:以下是有关我使用的配置的更多详细信息:命名图除外http://topbraid.org/examples/kennedys,我用RDFS蕴涵更新了图表。Sesame存储库是一个没有推理支持的简单本机存储库。

共有1个答案

巫马修为
2023-03-14

经过深思熟虑,我坚持尝试合并两个可选模式,解决方案更直接:

PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT *
FROM <http://spinrdf.org/sp>
FROM <http://spinrdf.org/spl>
FROM <http://spinrdf.org/spin>
FROM <http://topbraid.org/examples/kennedysSPIN>
FROM <http://topbraid.org/examples/kennedys>

FROM NAMED <http://topbraid.org/examples/kennedys>
WHERE {
    GRAPH <http://topbraid.org/examples/kennedys> {
        ?s ?p ?o .
    } .
    OPTIONAL {
        FILTER (sameTerm(rdf:type, ?p)) .
        ?o rdfs:subClassOf  ?supC .
    } .
    BIND (IF(NOT EXISTS { ?s a ?supC . }, ?supC, ?__unbound__) as ?newSupC) . 
}

不管怎样,谢谢你们的时间和建议,伙计们。麦克斯。

 类似资料:
  • 我使用Web API 2与CORS/实体框架6/Breeze.js从鲍尔为一个单页应用程序和微风查询不扩展导航属性。 我将把它从服务器分解到客户端。 //POCOs //Web API配置//省略静态类和默认路由//配置为HttpConfiguration //微风控制器 //前端接地 //main.js Fiddler显示JSON负载: 但是不是chrome中数组中对象的字段。 编辑: 解决方案

  • 这里有一个名为的小本体,由Protégé创建,其中我有类、、、和个体()、()和(也是)。在本体论中,我只声明。 当我在Protégé的DL Query选项卡中请求的实例时,我得到的是(它是,因此是,因此是)。 但当我编写以下SPARQ查询时: 我没有任何例子。当我将替换为时,结果是相同的。只有当我用替换它时,我才会得到所需的结果。 为什么DL查询做推断(允许我获得作为类的实例),而不是SPARQ

  • 我正在尝试使用rdf4j文档构造SPARQL查询:https://rdf4j.org/documentation/tutorials/sparqlbuilder/ 我是java的新手(和stackoverflow,如果写得不好,很抱歉),但我想我已经包含了正确的开始步骤。我用以下方式实例化了一个选择查询、前缀和变量: URL已被右前缀替换 我试图编写的查询是:选择?在哪里{:team_1:draf

  • 我使用jena创建了一个用于电子邮件存储的rdf模型。我的thr rdf代码是: 这是我查询rdf模型的代码。在这里,我从命令行获取输入,但是字符串的查询也可以工作... 这显示了查询的工作情况:

  • 这是非常容易使用Glassfish: 考虑我在UNIX <代码> /Apps/StaseCysEng/<代码>上的绝对路径。使用Glassfish,我将简单地将替代文档根定义为: 当我上传我的图像和其他数据文件时,我可以将它们保存到目录,并且在我的JSF页面中,我可以正常地将我的静态内容显示为: 我真的需要在JBoss AS7中实现同样的功能 我该怎么做?

  • 问题内容: 您将如何证明两个查询在功能上是等效的,例如它们将始终都返回相同的结果集。 由于在执行此操作时会想到一个特定的查询,因此最终按照@dougman的建议进行操作,在有关表的约10%的行中进行比较并比较结果,以确保没有不合适的结果。 问题答案: 最好的办法是根据给定的一组输入比较两个查询输出,以查找任何差异。要说它们对于所有输入将始终返回相同的结果,实际上取决于数据。 对于Oracle,最好