我在 Windows 10 下使用 RDF4J 版本 2.2.2 工作台和服务器。我需要使用内部查询来限制结果。我的特殊应用是从一系列相关报告中积累事件概念。每个报告都有一个时间戳作为其属性之一。我需要带有 aLIMIT
和 an的内部查询ORDER BY
来从贡献每个事件的报告中获取最新的时间戳。该事件由外部查询中的三元组建立。由于完整的应用程序相当复杂,我想出了一个简单的案例来说明我的问题。基本上,我期望外部查询产生几个结果,内部查询限制为 1,但是LIMIT
似乎适用于外部查询。我想知道为什么当我期望更多时我只得到一个结果。在此处的示例中,我希望得到两个结果,但只得到一个......
示例案例是使用支持 RDFS+SPIN 的存储库在 RDF4J 工作台中设置的。
- 清除存储库(RDF4J 工作台修改/清除)。
- 使用工作台修改/添加功能加载Nuvio本体版本 1.0.0
使用 RDF4J Modify/SPARQL Update 函数使用以下 SPARQL 更新查询设置测试条件。
PREFIX Nuvio: <http://cogradio.org/ont/Nuvio.owl#> PREFIX inst: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/Instantiations#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> INSERT { inst:aTestObject1 Nuvio:hasValue _:b0 ; Nuvio:hasValue _:b1 . inst:aTestObject2 Nuvio:hasValue _:b2 ; Nuvio:hasValue _:b3 . _:b0 Nuvio:hasDataValue "2017-11-13T13:46:00.000-06:00"^^xsd:dateTime . _:b1 Nuvio:hasDataValue "2017-11-13T13:46:01.000-06:00"^^xsd:dateTime . _:b2 Nuvio:hasDataValue "2017-11-13T13:46:02.000-06:00"^^xsd:dateTime . _:b3 Nuvio:hasDataValue "2017-11-13T13:46:03.000-06:00"^^xsd:dateTime . } WHERE { }
现在使用 RDF4J Workbench 探索/查询功能运行以下 SPARQL 查询:
PREFIX Nuvio: <http://cogradio.org/ont/Nuvio.owl#> SELECT DISTINCT * WHERE { ?o a Nuvio:Quantity . ?o Nuvio:hasValue/Nuvio:hasDataValue ?value . }
现在尝试使用以下包含内部查询的查询(第一个查询的简单扩展)将结果限制为每个人(
inst:aTestObject1
和)的一个时间戳:inst:aTestObject2
PREFIX Nuvio: <http://cogradio.org/ont/Nuvio.owl#> SELECT DISTINCT * WHERE { ?o a Nuvio:Quantity . { SELECT DISTINCT * WHERE { ?o Nuvio:hasValue/Nuvio:hasDataValue ?value . } LIMIT 1 } }
只产生一个结果:
我期待两个结果,每个结果一个,
inst:aTestObject1
因为inst:aTestObject2
每个都有两个时间戳。但我只得到inst:aTestObject2
. 为什么只有一个?