使用rdf:Seq的慢速SPARQL查询

使用rdf:Seq的慢速SPARQL查询,sparql,rdf4j,Sparql,Rdf4j,我试图用SPARQL检索rdf:Seq的所有元素。RDF结构如下所示。具有rdf:Seq时间索赔和单个时间索赔信息的子项目。子项目的时间声明列表可以是任意长度: <rdf:Description rdf:about="http://www.example.com/resource/subproject/2017-nieuw-1"> <rdf:type rdf:resource="http://www.example.com/ontologie/

我试图用SPARQL检索rdf:Seq的所有元素。RDF结构如下所示。具有rdf:Seq时间索赔和单个时间索赔信息的子项目。子项目的时间声明列表可以是任意长度:

<rdf:Description rdf:about="http://www.example.com/resource/subproject/2017-nieuw-1">
  <rdf:type rdf:resource="http://www.example.com/ontologie/example/Subproject"/>
  <rdfs:label>Subproject label</rdfs:label>
  <pbl:subproject_timeclaims rdf:resource="http://www.example.com/resource/list/5853abbfdcc97"/>
</rdf:Description>

<rdf:Description rdf:about="http://www.example.com/resource/list/5853abbfdcc97">
  <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq"/>
  <rdf:_1 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd6aa4"/>
  <rdf:_7 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd957b"/>
  <rdf:_6 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd8e68"/>
  <rdf:_14 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfdc541"/>
  <rdf:_5 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd879f"/>
  <rdf:_2 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd71db"/>
  <rdf:_3 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd78be"/>
  <rdf:_4 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd7f92"/>
  <rdf:_8 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfd9c4c"/>
  <rdf:_9 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfda31c"/>
  <rdf:_10 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfdaa08"/>
  <rdf:_11 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfdb0e6"/>
  <rdf:_12 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfdb7bd"/>
  <rdf:_13 rdf:resource="http://www.example.com/resource/timeclaim/5853abbfdbe7f"/>
</rdf:Description>

<rdf:Description rdf:about="http://www.example.com/resource/timeclaim/5853abbfdc541">
  <rdf:type rdf:resource="http://www.example.com/ontologie/example/Timeclaim"/>
  <pbl:timeclaim_description>Description</pbl:timeclaim_description>
  <pbl:timeclaim_hours>25</pbl:timeclaim_hours>
  <pbl:timeclaim_employee 
     rdf:resource="http://www.example.com/resource/employee/2222333334444"/>
</rdf:Description>

您能指出SPARQL查询中的任何错误以及更好的方法吗?或者RDF结构可以改进?这种情况下的编号实际上并不相关,但与rdf:Seq相同的列表结构存在于数据库中的更多位置(在这些情况下,顺序很重要)。

什么是“慢”以及数据有多大?如果这会影响查询优化器和/或执行,基本上可以尝试手动重新排序三重模式。除此之外,第一个三重模式看起来或多或少是多余的。如果所有这些都不起作用,而且我们不知道您使用的内存设置,您可以将数据加载到“适当”的tripe存储中,即某些引擎将数据索引到磁盘。这是否真的有必要取决于数据集大小和您的计算机。一般来说,RDF4J应该足够快。慢意味着超过30秒。要返回的数据没有那么大。大约有1000条记录。@user1492600您使用的是什么类型的存储(内存、本机或其他)?它是如何配置的(索引、推断)?粗略地说,您的数据集有多大(数据库中的三元组总数)。从您对数据库配置和大小的关注中,我可以假设SPARQL查询和RDF结构的设置是正确的吗?我想知道RDF4J中是否有这样的功能。但不幸的是,我正在使用PHP访问RDF4J的RESTAPI,所以我不能使用这个函数。我今天添加了另一个索引(opsc),但这也没有任何区别。所以我试着让这个问题变得更好。通过移动一些三重模式,我设法使响应时间低于1秒。低到足以使其在我的应用程序中可用。Bedankt voor het建议;-)
SELECT *
WHERE {
  ?tc_item a :Timeclaim .
  ?tc_list ?p ?tc_item .
  ?subproject pbl:subproject_timeclaims ?tc_list
}