DTD-是否可以一次声明多个元素的属性

时间:2018-11-29 09:05:24

标签: xml dtd

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

赞:

<!ATTLIST foo,bar createdAt CDATA #IMPLIED>

2 个答案:

答案 0 :(得分:1)

通常的方法是定义一个参数实体,它实际上只是一个宏。此示例定义了两个参数实体,其中一个引用另一个:

Navigation.setRoot({
root: {
 stack: {
  options: {
    topBar: {
      visible: false
    }
  },
  children: [
    {
      component: {
        name: 'navigation.playground.TextScreen',
        passProps: {
          text: 'This is tab 1',
          myFunction: () => 'Hello from a function!',
        }
      }
    },
    {
      component: {
        name: 'navigation.playground.TextScreen',
        passProps: {
          text: 'This is tab 2',
        }
      }
    }
   ]
  }
 }
});

当专家这样做时,生成的DTD变得极其复杂,几乎对普通凡人都是不可读的,但是该功能非常强大。

答案 1 :(得分:1)

对于XML DTD,这只能使用迈克尔解释的参数实体(参见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子集的一部分。