首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DTD。元素类型声明“内容规范”与“内容模型”的区别

DTD。元素类型声明“内容规范”与“内容模型”的区别
EN

Stack Overflow用户
提问于 2014-06-24 14:33:17
回答 1查看 277关注 0票数 2

我读过可扩展标记语言(XML) 1.0 (第五版) W3C建议2008年11月26日

3.2元素类型声明有:元素类型声明形式:元素类型声明

代码语言:javascript
运行
复制
elementdecl ::= <!ELEMENT Name contentspec >
contentspec ::= 'EMPTY' | 'ANY' | Mixed | children

3.2.1中,有:元素内容模型

代码语言:javascript
运行
复制
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”。对吗?

混合有‘内容模型’吗?

在教程中,经常写:

代码语言:javascript
运行
复制
<!ELEMENT Name content_model >
EN

回答 1

Stack Overflow用户

发布于 2014-12-19 11:08:32

你说对了。

contentspec是任意的,PCDATA,混合的,子级。只有孩子才有“内容模型”

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

  • EMPTY标签-无内容
  • ANY在DTD中定义的任何其他元素--某种自由形式。
  • 混合内容,这些内容在XML建议的3.2.2中没有提及。
  • 子元素,在XML建议的3.1.1中进行了描述

内容模型允许使用序列、选择、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实例中的元素将包含任何内容(它可以保持为空)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24389351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档