我读过可扩展标记语言(XML) 1.0 (第五版) W3C建议2008年11月26日
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? ')'
之后我有了疑问。“内容规范”与“内容模型”不同。
也许contentspec是任意的,PCDATA,混合的,孩子。
只有孩子才有“content model”:(elemName1、elemName2、elemName3、elemET)。
(命名为“\”、“?”、“*”、“+”)、序列、选择--所有这些都是“content model”。对吗?
混合有‘内容模型’吗?
在教程中,经常写:
<!ELEMENT Name content_model >
发布于 2014-12-19 11:08:32
你说对了。
contentspec是任意的,PCDATA,混合的,子级。只有孩子才有“内容模型”
它描述了元素可以具有的所有类型的内容:
EMPTY
标签-无内容ANY
在DTD中定义的任何其他元素--某种自由形式。内容模型允许使用序列、选择、parenthis等等,例如((a|b)|(c+, d?, e*))?
,并且只引用其他元素--这里不允许使用#PCDATA
。
混合内容有点特殊,因为该模型只能使用选择,因此与内容模型不同。混合内容要么是#PCDATA
,要么是类似(#PCDATA | a | b | c)*
的内容。在后一种情况下,您需要打开圆括号(
,#PCDATA
必须先来,然后指定由选择|
分隔的允许元素,最后用零或多个发生说明符*
关闭括号)
。
所有这些的结果都在3.2.2混合内容中提供:
在这种情况下,子元素的类型可能受到限制,但不受其顺序或出现次数的限制。
特别是,不可能定义一个元素:
#PCDATA
)或元素序列:例如(#PCDATA
) x (a,b,c))是无效的(a, #PCDATA;, b, c)
也无效您也无法确保XML实例中的元素将包含任何内容(它可以保持为空)。
https://stackoverflow.com/questions/24389351
复制相似问题