什么是!ELEMENT和!ATTLIST之间DTD的区别

时间:2015-12-20 14:34:34

标签: xml dtd

XML文件有3种变体。它们之间的区别是什么?我应该使用哪个?

  1. <!ELEMENT Name (#PCDATA)>

  2. <!ELEMENT Name (First, Last)> <!ELEMENT First (#PCDATA)> <!ELEMENT Last (#PCDATA)>

  3. <!ELEMENT Name EMPTY> <!ATTLIST Name First CDATA #REQUIRED Last CDATA #REQUIRED >

2 个答案:

答案 0 :(得分:0)

  • #PCDATA 表示节点或属性的简单字符串内容。
  • !ELEMENT 映射到XML节点:

    <!ELEMENT Name (#PCDATA)>

    <Name>Tony Stark</Name>

  • !ATTLIST 映射到XML节点的属性:

    <!ELEMENT Name EMPTY> <!ATTLIST Name First CDATA #REQUIRED Last CDATA #REQUIRED >

    <Name First="Tony" Last="Stark"/>

这些的使用完全取决于您和您的使用案例。

答案 1 :(得分:0)

第二第三种情况相当于XML attributes vs XML elements之间的区别,已在链接问题中广泛回答。

您的第一个案例引入了不将名称标记为单独的名字和姓氏的可能性。你问什么时候你可能想要这样做。通常,名称数据源自您已经单独确定名字和姓氏的形式。保持这种区别是有道理的。但是,您可能希望使用单个名称字段而不是分隔名字和姓氏,这有一些原因:

  • 有些人没有单独的名字和姓氏。
  • 您的数据源可能不会提供单独的名字和姓氏,以及 将单个名称解析为第一个和最后一个部分可能非常困难。

这些原因概括为非名称数据。如果您的标记处于更精细的粒度级别,您将促进下游处理,但实现这种粒度并不总是容易的。还有一个关于需要的可能性的判断调用,用于当前和未来消费应用程序的更大程度的标记。不需要更多标记只会增加开销,无意义。