【问题标题】:using sparql with RDF Triples Files将 sparql 与 RDF 三元组文件一起使用
【发布时间】:2013-04-29 20:25:36
【问题描述】:

鉴于此 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')) }

我一无所获。

我需要通过查询获得开始时间和结束时间,我该怎么写?!

包括来自 OPs cmets 的代码

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);

【问题讨论】:

    标签: rdf sparql triples dotnetrdf


    【解决方案1】:

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

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

    我已经添加了重点,您提到的第一个查询会选择所有内容,而不管它在哪个图表中,因此它返回结果的原因。

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

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

    编辑

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

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

    【讨论】:

    • 请不要在 cmets 中发布代码,如果要求您添加其他信息,请编辑您的问题。这次我已经为你做了。
    • 你能帮我写一个带查询的代码吗?所以我可以理解该怎么做。
    • 请阅读包含此类示例的链接文档或对答案中建议的代码进行细微修改
    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多