!ELEMENT 和 !ATTLIST 之间的 DTD 有什么区别
What's the difference in DTD between !ELEMENT and !ATTLIST
XML 文件有 3 个变体。它们之间有什么区别,我应该使用哪个?
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Name (First, Last)>
<!ELEMENT First (#PCDATA)>
<!ELEMENT Last (#PCDATA)>
<!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,已经在链接的问题中得到了广泛的回答。
您的第一个案例介绍了不将姓名标记为单独的名字和姓氏的可能性。你问你什么时候可能想要这样做。通常,姓名数据源自您已经分别确定名字和姓氏的表格。保留这种区别是有道理的。但是,出于某些原因,您可能希望使用单个姓名字段而不是分开的名字和姓氏:
- 有些人没有分开的名字和姓氏。
- 您的数据源可能不会提供单独的名字和姓氏,并且
将单个名称解析为第一部分和最后一部分可能非常困难。
这些原因适用于非姓名数据。如果您的标记处于更精细的粒度级别,您将促进下游处理,但实现该粒度并不总是那么容易。对于当前和未来消费应用程序 需要 更大程度标记的可能性,还需要做出判断。更多从不需要的标记只会毫无意义地增加开销。
XML 文件有 3 个变体。它们之间有什么区别,我应该使用哪个?
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Name (First, Last)> <!ELEMENT First (#PCDATA)> <!ELEMENT Last (#PCDATA)>
<!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,已经在链接的问题中得到了广泛的回答。
您的第一个案例介绍了不将姓名标记为单独的名字和姓氏的可能性。你问你什么时候可能想要这样做。通常,姓名数据源自您已经分别确定名字和姓氏的表格。保留这种区别是有道理的。但是,出于某些原因,您可能希望使用单个姓名字段而不是分开的名字和姓氏:
- 有些人没有分开的名字和姓氏。
- 您的数据源可能不会提供单独的名字和姓氏,并且 将单个名称解析为第一部分和最后一部分可能非常困难。
这些原因适用于非姓名数据。如果您的标记处于更精细的粒度级别,您将促进下游处理,但实现该粒度并不总是那么容易。对于当前和未来消费应用程序 需要 更大程度标记的可能性,还需要做出判断。更多从不需要的标记只会毫无意义地增加开销。