无法解析此RDF / XML,因为System.Xml无法解析该文档

时间:2013-04-29 18:29:13

标签: namespaces rdf system.xml dotnetrdf

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

错误是:

  

由于System.Xml无法解析,因此无法解析此RDF / 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");

谁能告诉我有什么问题? - 为什么我会收到此错误?

1 个答案:

答案 0 :(得分:1)

您是否实际查看了内部异常,因为异常消息告诉您?这将包含生成的XmlException,并会告诉您RDF / XML到底出了什么问题,包括位置信息,即文件中的错误位置。

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

如果删除它,那么它将是有效的XML,但它仍然无法在dotNetRDF中解析,因为您已使用属性xml:startTimexml:endTime而未定义xml命名空间。我想dotNetRDF可能应该允许那些因为xml:在XML中隐式定义,尽管使用xml命名空间除了XML语法之外的其他任何东西通常都是一个非常糟糕的想法和坏数据建模的症状。