我看了Extensible Markup Language (XML) 1.0 (Fifth Edition) W3C Recommendation 26 November 2008
3.2元素类型声明具有:
元素类型声明采用以下形式:
元素类型声明
elementdecl ::= <!ELEMENT Name contentspec >
contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
在 3.2.1元素内容中有: 元素内容模型
children ::= (choice | seq) ('?' | '*' | '+')?
cp ::= (Name | choice | seq) ('?' | '*' | '+')?
choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'
seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'
之后我有疑问。哪种不同的内容规格&#39;和&#39;内容模型&#39;。
也许 contentspec 是ANY,PCDATA,混合,孩子。
只有孩子有&#39; 内容模型&#39;:(elemName1 | elemName2,elemName3,elemET)。
(姓名|,&#39;?&#39;&#39; *&#39;&#39; +&#39;),顺序,选择 - 所有这些都是&#39; 内容模型&#39;。正确?
混合是否有&#39; 内容模型&#39;?
在教程中经常写:
<!ELEMENT Name content_model >
答案 0 :(得分:0)
你明白了。
contentspec 是ANY,PCDATA,混合,儿童。 只有孩子才有内容模型&#39;
它描述了元素可以拥有的所有内容类型:
EMPTY
代码 - 无内容ANY
DTD中定义的任何其他元素 - 一种自由格式 内容模型允许使用序列,选择,parenthis等,例如((a|b)|(c+, d?, e*))?
,仅引用其他元素 - 此处不允许#PCDATA
。
混合内容有点特别,因为此模型只能 使用选项,因此与内容模型截然不同。混合内容可以是#PCDATA
,也可以是(#PCDATA | a | b | c)*
。在后一种情况下,您需要打开括号(
,#PCDATA
必须先出现,然后指定由选项|
分隔的允许元素,并通过关闭括号{{1}来完成},零或更多出现说明符)
。
所有这一切的后果在 3.2.2混合内容:
中提供在这种情况下,可以约束子元素的类型,但不限制它们的顺序或它们的出现次数
特别是,它无法定义元素:
*
)或一系列元素:例如: (#PCDATA
)| (a,b,c))无效#PCDATA
也无效您无法确保XML实例中的元素完全具有任何内容(它可以保持为空)。