【问题标题】:External entity reference declaration: entities are referenced but not declared (although they are)外部实体引用声明:实体被引用但未声明(尽管它们是)
【发布时间】:2021-05-07 23:57:11
【问题描述】:

我正在尝试引用几个实体,例如&符号、连字符等。为此,我已经有一个存放 .ent 文档的 URL。不幸的是,我没有 DTD 文档,因此假设存在问题(尽管我需要的所有信息都在 ent 文档中提供)。
URL 如下所示:
<!-- 
Copyright and Table of Contents (several blocks)
-->
<!-- ==================================================================== -->
<!-- 
Comment: first block
-->
<!ENTITY xxxx            "xxxx" ><!--comment-->
(...)
<!-- 
Comment: second block
-->
<!ENTITY xxxx            "xxxx" ><!--comment-->
(...)

因此,实体已在文档中列出。我的 XML 是这样引用的:

<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE NAME_OF_THE_CREATOR_AND_VERSION [
<!ENTITY % NAME_OF_THE_CREATOR_AND_VERSION.ent SYSTEM "URL"> %NAME_OF_THE_CREATOR_AND_VERSION.ent; ]>
(...)

为了提高可读性,我添加了下划线。

到目前为止,我有

  • 添加了standalone="no"
  • 减少了对&lt;!DOCTYPE NAME SYSTEM "URL"&gt;的引用
  • 在 XML 中添加了实体(尽管我强烈希望找到一种方法来保留外部引用,因为 .ent 文档包含很多实体)。
    后者看起来像这样:
<?xml version="1.0" encoding="US-ASCII" standalone="no"?>
<!DOCTYPE entities [
   <!ENTITY hyphen "&#x02010;">
   <!ENTITY copy "&#x000A9;">
   <!ENTITY nbsp "&#x000A0;">
   <!ENTITY ndash "&#x02013;">
   <!ENTITY auml "&#x000E4;">
   <!ENTITY uuml "&#x000FC;">
   <!ENTITY deg "&#x000B0;">
   <!ENTITY Delta "&#x00394;">
   <!ENTITY minus "&#x02212;">
   <!ENTITY ensp "&#x02002;">
]>

我已经检查了 BaseX、notepad++ 和 w3schools 中的 XML 语法,并且每次(除了内部声明)它都说实体(例如连字符)被引用但没有声明,或者在标记声明。同时,当我检查 ent 文件时,它说在文档末尾添加了内容,从实体声明开始,或者使用了无效的元素名称 - 但这可能是因为它是一个 ent 文件?

在此先感谢您的帮助和提示。
最好的,
埃莱奥诺尔

编辑:我在 Windows 10 上使用 BaseX GUI。我已启用“解析 DTD 和实体”以及内部 XML 解析器和空格分割。

【问题讨论】:

    标签: notepad++ entity dtd basex


    【解决方案1】:

    我想你想要

    <!DOCTYPE root-element-name [
    <!ENTITY % myentities SYSTEM
       "myentities.ent">
    %myentities;
    ]>
    <root-element-name>&foo; &bar;</root-element-name>
    

    对于 BaseX,我认为它的默认选项禁用外部实体 https://docs.basex.org/wiki/Options#DTD,因此您需要将其设置为 true 才能使用外部实体,例如basex.bat -c "SET DTD true" -i input.xml query.xq.

    【讨论】:

    • 谢谢。我已经尝试了您的建议,但我仍然收到“引用了连字符但未声明”错误消息。我已将“解析 DTD 和实体”设置为是,这是否会更改要启用的外部实体?我在哪里包含您提到的“basex.bat ...”命令?提前致谢,埃莱奥诺尔
    • basex.bat 是 BaseX 的命令行界面,您通常在 Windows 上使用它来从命令行运行查询,例如Powershell 或命令提示符。目前尚不清楚您如何运行 BaseX 以及您在哪里设置了选项,因此我无法判断您的方法是否应该有效。也许编辑您的问题并更详细地描述您如何使用 BaseX。
    • 谢谢@Martin Honnen,我添加了一个编辑。
    • @eleonore.shellstrop,试试它是否不使用使用内部解析器,我认为它无法胜任支持高级DTD功能的任务。
    • 我试过了,很遗憾,还是不行。我真的不知道为什么。
    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多