1

我正在使用 .Net RDF 库对 RDF 文件进行一些 sparql 查询。但是当我尝试将 RDF 文件加载到 C# .Net RDFlibrary 时。

错误是:

无法解析此 RDF/XML,因为System.Xml无法解析文档,请参阅内部异常了解详细信息

我的 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#"
         xmlns:rdf="http://www.w3.org/XML/1998/namespace#"
         xml:base="http://www.example.org/">

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

和要加载的语句:

Graph myGraph = new Graph();
FileLoader.Load(myGraph, "C:\\Users\\hasoOn\\Desktop\\tt.rdf");

谁能告诉我出了什么问题?- 为什么我会收到这个错误?

4

1 回答 1

1

您是否真的按照异常消息的指示查看了内部异常?这将包含XmlException生成的内容,并准确告诉您 RDF/XML 出了什么问题,包括位置信息,即错误在文件中的位置。

在您的情况下,您的问题恰好是您rdf在同一个元素上定义了两次命名空间,即您xmlns:rdf的根rdf:RDF元素上有两个属性,这使您的 XML 非法。

如果您删除它,那么它将是有效的 XML,但是它仍然无法在 dotNetRDF 中解析,因为您使用了属性xml:startTime并且xml:endTime没有定义xml命名空间。我猜 dotNetRDF 可能应该允许这些,因为xml:它是在 XML 中隐式定义的,尽管将xml命名空间用于除 XML 语法本身之外的任何东西通常是一个非常糟糕的主意,并且是糟糕数据建模的症状。

于 2013-04-29T19:45:33.900 回答