使用带有RDF Triples文件的sparql

时间:2013-04-29 20:25:36

标签: rdf sparql triples dotnetrdf

鉴于此RDF:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rdf:RDF [<!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
<!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'>]>
<rdf:RDF xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:dnr="http://www.dotnetrdf.org/configuration#"
         xml:base="http://www.example.org/"
         xmlns:ns1="http://www.example.org/startTime"
     xmlns:ns2="http://www.example.org/endTime">

  <rdf:Description rdf:about="Fadi">
    <ns0:eat xmlns:ns0="http://example.org/">Apple</ns0:eat>
    <ns1:startTime>00:01:38</ns1:startTime>
    <ns2:endTime>00:01:39</ns2:endTime>
  </rdf:Description>
</rdf:RDF>

我正在尝试进行sparql查询,但是当我进行此查询时:

SELECT * WHERE { { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o } } }

我得到了答案。但是当我试着这个时:

SELECT * WHERE { ?s ?p ?o . FILTER (regex(?o, 'Apple','i')) }

我得到了nothn。

我需要使用查询获取startTime和endTime,我该如何编写它?!

包括来自OPs评论的代码

Graph myGraph = new Graph();
FileLoader.Load(myGraph, "C:\\Users\\hasoOn\\Desktop\\tt.RDF");
TripleStore store = new TripleStore();
store.Add(myGraph);
SparqlQueryParser parser = new SparqlQueryParser();
SparqlQuery q = parser.ParseFromString("PREFIX ex: <example.org/>; SELECT * WHERE { ex:Fadi ?p ?o }");
SparqlResultSet results = (SparqlResultSet)store.ExecuteQuery(q);

1 个答案:

答案 0 :(得分:2)

假设根据您之前的问题,这也与dotNetRDF有关,您不是在查询您认为的数据,而是引用Querying with SPARQL文档:

  

查询的常见错误是默认情况下查询   通常仅对商店中未命名的默认图表进行操作   (取决于您的查询处理器)。因此执行查询可能   取决于您的数据是什么图表以及是否产生结果   您正确配置了数据集。请参阅SPARQL Datasets   讨论配置不同类型的数据集的页面。您   也可以查看Debugging SPARQL Queries以获取调试内容的方法   在使用内存中的SPARQL引擎时,您的查询正在发生。

我已经添加了重点,你提到的第一个查询选择了所有内容,无论它是什么图形,因此它返回结果。

您的第二个查询仅查询可能不包含任何数据的默认图表,因此不返回任何内容,请参阅链接文档以获取有关如何正确配置数据集的更多信息。

修改查询以使用GRAPH子句,以便它实际访问数据中的命名图形或显示用于进行查询的代码,以便我可以为您提供有关如何正确修改它的指示,以便您第二个查询有效。

修改

现在看到你的代码确实没有查询你的数据,用于SPARQL查询的TripleStore有一个隐含的未命名图,这是你要查询的默认图。要查询数据,您可以通过多种方式更改代码:

  1. 在将图表添加到g.BaseUri = null;实例之前设置TripleStore,以便将您的数据视为默认图表
  2. 根据文档使用ISparqlDatasetLeviathanQueryProcessor,以便您可以配置数据集,使图表更灵活地成为默认图表
  3. 正如已建议修改您的查询以使用GRAPH子句,以便查询商店中的命名图表而不是默认图表