【问题标题】:Unable to Parse this RDF/XML since System.Xml was unable to parse the document无法解析此 RDF/XML,因为 System.Xml 无法解析文档
【发布时间】:2013-04-29 18:29:13
【问题描述】:

我正在使用 .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");

谁能告诉我有什么问题? - 为什么会出现这个错误?

【问题讨论】:

    标签: namespaces rdf system.xml dotnetrdf


    【解决方案1】:

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

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

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

    【讨论】:

    • 范围内 NamespaceMapper 不知道给定前缀“xml”的命名空间 URI。你忘了为这个前缀定义一个命名空间吗?我该如何解决这个问题?
    • 你不应该使用 xml 命名空间作为 RDF 中的属性(NB 这恰好也突出了一个 dotNetRDF 应该允许这样做的错误,因为 xml 应该是为 RDF/XML 隐式定义)。正如我在回答的最后所说,使用 xml 命名空间进行数据建模是不好的做法。 xml 命名空间应该只用于 XML 特定的东西,即设置 Base URI 而不是你的实际数据
    • dotNetRDF 中的错误归档为 CORE-358 (dotnetrdf.org/tracker/Issues/IssueDetail.aspx?id=358)
    • CORE-358 现在默认修复
    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2012-01-16
    • 2013-08-06
    相关资源
    最近更新 更多