2

我阅读了可扩展标记语言 (XML) 1.0(第五版)W3C 建议 2008 年 11 月 26 日
3.2 元素类型声明具有:元素类型声明采用以下形式:元素类型声明

elementdecl ::= <!ELEMENT Name contentspec >
contentspec ::= 'EMPTY' | 'ANY' | Mixed | children

而在3.2.1 Element Content中有: Element-content Models

children ::= (choice | seq) ('?' | '*' | '+')?
cp ::= (Name | choice | seq) ('?' | '*' | '+')?
choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'
 seq ::=    '(' S? cp ( S? ',' S? cp )* S? ')'

之后我有疑问。“contentspec”和“content model”有什么不同。

也许 contentspec是 ANY, PCDATA, Mixed, children

并且只有孩子有'内容模型':(elemName1 | elemName2, elemName3, elemET)。

(名称 | , '?' '*' '+'), 序列, 选择 - 就是'内容模型'。正确的?

Mixed有“内容模型”吗?

在教程中经常写:

<!ELEMENT Name content_model >
4

1 回答 1

0

你说对了。

contentspec是 ANY、PCDATA、Mixed、children。只有孩子有“内容模型”

它描述了一个元素可以拥有的所有内容类型:

  • EMPTY标签——没有内容
  • ANYDTD 中定义的任何其他元素——一种自由形式
  • 混合内容,在 XML 推荐的 3.2.2 中描述
  • children,在 XML 推荐的 3.1.1 中描述

内容模型允许使用顺序、选择、括号等,例如((a|b)|(c+, d?, e*))?,并且只引用其他元素——#PCDATA这里不允许。

混合内容有点特殊,因为该模型只能使用选择,因此与内容模型不同。混合内容要么#PCDATA(#PCDATA | a | b | c)*. 在后一种情况下,您需要打开一个括号(#PCDATA必须先出现,然后指定由选项分隔的允许元素,|并通过关闭括号结束),使用零个或多个出现说明符*

所有这一切的结果在3.2.2 混合内容中提供:

在这种情况下,可能会限制子元素的类型,但不会限制它们的顺序或出现次数

特别是,不可能定义一个元素:

  • 可以包含文本 ( #PCDATA) 或一系列元素:例如 ( #PCDATA) | (a, b, c)) 无效
  • 必须以一个元素开头,然后是文本,然后是其他元素:eg(a, #PCDATA;, b, c)也是无效的

您也不能确保您的 XML 实例中的元素将有任何内容(它可以保持为空)。

于 2014-12-19T11:08:32.303 回答