【问题标题】:DTD - Is it possible to declare attribute for multiple element at onceDTD - 是否可以一次声明多个元素的属性
【发布时间】:2018-11-30 01:16:32
【问题描述】:

如何声明多个元素的属性?

喜欢:

<!ATTLIST foo,bar createdAt CDATA #IMPLIED>

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

    通常的做法是定义一个参数实体,它本质上只是一个宏。这个例子定义了两个参数实体,一个引用另一个:

    <!ENTITY % role.att
            'role                   NMTOKEN         #IMPLIED'>
    
    <!ENTITY % common.att
            'id                     ID              #IMPLIED
            %role.att;'>
    
    <!ATTLIST notice %common.att;>
    

    当专家这样做时,生成的 DTD 变得极其复杂,普通人几乎无法阅读,但该功能非常强大。

    【讨论】:

      【解决方案2】:

      对于 XML DTD,这只能使用 Michael 解释的参数实体(参见 the XML spec)。 OTOH,SGML DTD 允许以非常接近您的想法的形式对多个元素进行属性列表声明:

      <!-- only valid in SGML rather than XML DTDs: -->
      <!ATTLIST (elem1|elem2|elem3) myatt CDATA #IMPLIED>
      

      SGML 还允许 名称组 代替其他标记声明中的单个名称。

      此外,WebSGML (ISO 8879:1986/Cor 2:1999) 还允许 #ALL#IMPLICIT 代替元素名称,将声明应用于所有声明或隐含的元素,分别。这些被包含在 WebSGML 中以表示通用 XML 属性,例如 xml:basexml:langxmlns(但不是 xmlns:xyz)。然而,就像 name group 语法一样,它们没有成为 SGML 的 XML 子集的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-01
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-22
        相关资源
        最近更新 更多