【问题标题】:Is there a way to extend a DTD used for validation?有没有办法扩展用于验证的 DTD?
【发布时间】:2015-01-30 05:52:09
【问题描述】:

我想知道是否有扩展 DTD 的标准方法,或者验证文档的唯一方法是否是在 XML 文件中添加所有必要的扩展。

我有一个插件系统,它们通常像 Linux 安装中的包一样组织(即插件可以依赖于一个或多个插件,不允许循环):

             +----------------------+
         +-->|  Editor              |<--+
         |   +----------------------+   |
         |                              |
+-----------------+            +-----------------+
|  Locale         |            | Image           |
+-----------------+            +-----------------+
         ^                              ^
         |                              |
         |   +----------------------+   |
         +---|  GeoMap              |---+
             +----------------------+

所以,我有一个编辑器插件中的 DTD,例如,一个小部件标签,它有一个名为 auto-save 的属性,如下所示:

<!ELEMENT widget (value|preset|default|state)*>
<!ATTLIST widget id ID #REQUIRED
                 type NMTOKEN #REQUIRED
                 auto-save (double | html | int8 
                           | date-us | no | string) "string">

事实是,当我添加区域设置时,我现在希望自动保存属性也支持诸如 locale-date 之类的类型,该类型并非特定于美国。

同样,Image 插件可能想要添加 image 类型,而 GeoMap 插件可以使用 geo-location

所以最后,ATTLIST 自动保存应该是这样的(显然,顺序无关紧要):

auto-save (double | html | int8 | date-us | no 
          | string | locale-date | image | geo-location) "string"

即使在 XML 文件中定义多个 DTD(根标记中的xmlns=... 属性),我认为您也做不到,对吗?

现在我可以在 editor.dtd 中添加类型,但是当这些插件在您的图表中可能不可用时,定义语言环境、图像和地理地图类型显然是错误的......

我能想到的另一种解决方案是使用 XSD,但即使使用这种格式,我该如何添加属性和标签的子添加?

【问题讨论】:

  • 不确定我是否理解这个问题。除其他复杂情况外,您显示的图表似乎不是一棵树。
  • Hmmm... Debian/Ubuntu 中的软件包被定义为在树中,对吧?包 A 可以依赖一个或多个包,比如 B、C 和 D。但是 B 也可能依赖于 D。但是,B、C 和 D 不能依赖 A。这不就是树的定义吗?
  • 不,像软件包依赖这样的 n:m 关系会产生一个有向图,在一般情况下它不是树。树需要 1:n 关系,因此除根之外的每个节点都只有一个父节点。您提到的约束排除了依赖循环,并为您提供了无环有向图,而不是树。
  • 好的,是的。就是那个。我相信你已经注意到了,我更新了我的问题。 en.wikipedia.org/wiki/Directed_acyclic_graph

标签: xml xml-validation dtd


【解决方案1】:

DTD 不可扩展。 但同时,可以使用可扩展的 XML 模式。

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 2021-12-20
    • 2018-03-02
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多