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

What's the difference in DTD between !ELEMENT and !ATTLIST

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 >

  • #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"/>

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

第二种第三种的区别XML attributes vs XML elements,已经在链接的问题中得到了广泛的回答。

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

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

这些原因适用于非姓名数据。如果您的标记处于更精细的粒度级别,您将促进下游处理,但实现该粒度并不总是那么容易。对于当前和未来消费应用程序 需要 更大程度标记的可能性,还需要做出判断。更多从不需要的标记只会毫无意义地增加开销。