Xml DTD外部未解析实体和符号是否在野外使用?

Xml DTD外部未解析实体和符号是否在野外使用?,xml,dtd,sgml,Xml,Dtd,Sgml,DTD提供了一种引用任意格式的外部实体的机制,从而允许SGML和XML文件链接到具有URI的任何文件,而无需为此创建自定义机制。因此,例如,可以在DTD中指定: <!ELEMENT img EMPTY> <!ATTLIST img src ENTITY #REQUIRED> <!NOTATION gif PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN" &qu

DTD提供了一种引用任意格式的外部实体的机制,从而允许SGML和XML文件链接到具有URI的任何文件,而无需为此创建自定义机制。因此,例如,可以在DTD中指定:

<!ELEMENT img EMPTY>
<!ATTLIST img src ENTITY #REQUIRED>
<!NOTATION gif PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN" "image/gif">
<!ENTITY myimg1 SYSTEM "img1.gif" NDATA gif>
<!ENTITY myimg2 SYSTEM "img2.gif" NDATA gif>
<!ENTITY myimg3 SYSTEM "img3.gif" NDATA gif>

当创建
img
元素时,可以使用类似
myimg1
的值,并且应该通知处理文档的应用程序引用了文件
img1.gif
,并使用特定格式

据我理解,这有三个好处:

  • 标准化。不管实际使用的是什么模式,应用程序都可以找出文档链接到的所有内容,即使它可能不理解它。这可能对安全、搜索、筛选等有用
  • 避免重复。实体URI只定义了一次,但可以多次引用
  • 指定实体旁边的格式(符号)。如果系统不提供或不知道格式,或者有多种格式或显示方法可供选择(例如,显示或下载),则无需在文档中添加这些信息
然而,到目前为止,我还没有找到任何主要使用这种机制的数据集或应用程序。在实践中,所有这些要点都失败了:

  • 绝大多数资源仍然以特定于模式的方式链接到,如在XHTML中。XLink用于以XML方式标准化链接到资源。XML模式定义了
    anyURI
    ,因此仍然可以自动找到链接(不过嵌入和链接到资源之间有区别)
  • 内部解析的实体已经提供了一种在文档中的任何位置重用URI的方法。压缩进一步减少了对数据集中较大文档的关注
  • 最广泛使用的HTTP提供了指定或协商目标文件格式的方法。这具有一个优点,即服务器不会锁定为仅以特定格式存储文件;例如,它可以升级到更好的图像格式(即PNG优于GIF),而无需修改任何引用它的文档
我发现的所有关于这种机制的教程都简单地说明了它可以用于什么(主要是复制其他文档中的段落),并举例说明了上述自定义DTD。此外,由于这样的实体只能包含在属性中,因此它实际上永远不能被视为任何元素内容的一部分,其处理始终依赖于应用程序

是否存在使用或依赖外部实体和符号的系统?是否有应用程序能够识别以这种方式使用的实体并能够理解符号?我可以合理地使用什么样的公共ID作为符号,系统ID的一些真实示例是什么?实体或符号是否有通用的公共ID?

未解析的实体(和符号)很少使用,但我确信有一些SGML顽固分子在某处使用它们。这不是我会选择使用的机制,原因有二:它没有得到工具的很好支持,也不是很灵活

您的标题问题询问了外部未解析实体,但下面的一些文章更笼统地讨论了外部实体。外部解析的实体肯定比未解析的实体使用得更广泛(尽管存在安全问题),而且我肯定与使用它们的系统一起工作。但我不会选择使用它们
XLink
XInclude
更灵活。

未解析的实体(和符号)很少使用,但我确信有一些SGML顽固分子在某处使用它们。这不是我会选择使用的机制,原因有二:它没有得到工具的很好支持,也不是很灵活


您的标题问题询问了外部未解析实体,但下面的一些文章更笼统地讨论了外部实体。外部解析的实体肯定比未解析的实体使用得更广泛(尽管存在安全问题),而且我肯定与使用它们的系统一起工作。但我不会选择使用它们
XLink
XInclude
更灵活。

DocBook和TEI主要使用符号和未分析的实体

它们还用于我的SGML软件()中的通用模板/参数化宏扩展机制,这在很大程度上是为了在不使用新语法的情况下向SGML添加特性。具体来说,在SGML(但不是XML)中,实体声明可以具有数据属性,如中所示


对XLink/XInclude的支持通常与实体/符号声明一样零散,甚至可以说比实体/符号声明更多,因为后者是核心SGML/XML构造(参见示例)。XInclude更严重的问题是,它以非预期的方式()与模式验证交互,因为它是作为XML应用程序/词汇表而不是核心特性分层的

XLink在纸上可能很好(我甚至不认为这是因为它盲目地在没有上下文的情况下引入HyTime概念,例如对链接角色的描述非常模糊,而不是简单的HTML链接)。但现实情况是,目前最常见的文档格式(即HTML)使用的URL是XML根本无法合理处理的,因为它允许并经常包含
&
符号和字符,而XML总是希望将这些符号和字符解释为实体引用的开始。SGML的WebSGL修订版(由原始XML规范的作者创建,同时引入XML作为SGML的一个独立子集以对齐这两个规范)引入了数据规范属性(在中解释),并专门处理此问题

更新:关于在SGML和XML中使用的符号的常用公共标识符,有

  • 历史性的、孤僻的
    <!ENTITY e SYSTEM "..." NDATA sgml [ x=1 y=2 ]>