2014-06-24 58 views
2

我读Extensible Markup Language (XML) 1.0 (Fifth Edition) W3C Recommendation 26 November 2008
3.2元素类型声明之间不同的有: 的元素类型声明采用以下格式: 元素类型声明DTD。元素类型声明。 “contentspec”和“内容模型”

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'和'content model'有什么不同。

也许 contentspec是ANY,PCDATA,混合,孩子

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

(名称|,'?''*''+'),序列,选择 - 全部为'内容模型'。对?

是否混合有'内容模型'?

在教程中经常写:

<!ELEMENT Name content_model > 

回答

0

你猜对了。

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

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

  • EMPTY标签 - 在DTD定义没有内容
  • ANY任何其他元素 - 种类的自由格式
  • 混合内容,其描述于XML推荐的3.2.2中
  • 孩子,其在XML建议的3.1.1描述

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

混合内容是有点特别是因为该模型可以仅使用选择,因此是不同的,以内容模型。混合内容是#PCDATA或类似(#PCDATA | a | b | c)*。在后一种情况下,你需要打开一个括号(#PCDATA必须先来,然后你通过关闭括号),与零个或多个 occurence符*指定由选择|和完成分离允许的元素。

这一切的后果是3.2.2混合内容提供:

在这种情况下,该类型的子元素可能会受到限制,而不是它们的次序和出现次数

特别地,其将是不可能的,以限定一个元件:

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

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

相关问题