我在Windows 10下使用RDF4J 2.2.2工作台和服务器。我需要使用内部查询来限制结果。我的特定应用是从一系列相关报告中累积事件概念。每个报告都有一个时间戳作为其属性之一。我需要使用LIMIT
和ORDER BY
的内部查询来获取每个事件的报告中的最新时间戳。该事件由外部查询中的三元组建立。由于完整的应用程序相当复杂,我想出了一个简单的案例来说明我的问题。基本上,我期望外部查询产生几个结果,内部查询限制为1,但LIMIT
似乎应用于外部查询。我想知道为什么当我期待更多的时候我只得到一个结果。在这里的示例中,我期望两个结果,但只得到一个...
示例案例在RDF4J工作台中使用具有RDFS + SPIN支持的存储库进行设置。
使用RDF4J修改/ SPARQL更新功能,使用以下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 Explore / Query功能运行以下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
)的一个时间戳:< / p>
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
的结果。为什么只有一个?
答案 0 :(得分:2)