4.4DTD的语法
###4.4 DTD的语法
属性声明
多重属性
<!ATTLIST contacts version CDATA #FIXED “1.0” source CDATA #IMPLIED>
<!ATTLIST contacts version CDATA #FIXED “1.0”>
<!ATTLIST contacts source CDATA #IMPLIED>
<!ATTLIST memo id ID#REQUIRED security (high|low) "high" keywords NMTOKENS #IMPLIED>
memo元素的属性id是必须的,并且该属性的值必须在整个文档中是唯一的;属性security的值可能为"high"或"low",缺省值为"high";属性keywords是可选的,如果出现,那么它的值应该是用空格隔开的若干个XML名称标记keywords = “XML XPathXQuery”和id="memo-2006-03-14“ 都是正确的属性取值
<!ATTLIST sender company CDATA #FIXED "Microsoft">
sender元素的company属性的值为字符数据,并且固定为"Microsoft" <sender company=“Microsoft” />
是正确的 <sender company="Schools" />
则是错误的
<!ELEMENT Step EMPTY>
<!ATTLIST Step id ID#REQUIRED>
<!ELEMENT StepLinkEMPTY>
<!ATTLIST StepLinksteps IDREFS #IMPLIED> 如果在该文档中存在:
<Step id="step1"/><Step id="step2"/>则<StepLinksteps="step1 step2"/>
是正确的
实体声明
实体(Entity)可以是一段要替换的文本、其他XML标记或者外部文件,类似程序语言中的常数
可以在一个文档中多次调用,或在多个文档中调用同一个实体
默认实体nn& - &, < - <, > - >, ' - ’, " - ”
归为内置实体,不需要在DTD定义
使用实体必须在文档中插入实体的引用
实体引用是指引用实体所代表的一个字符、文本或外部文件
首字符是&,之后是实体名称,结尾是分号,之间不允许空格(&)
可以在元素内容和属性值里面插入实体引用
不能在元素名或属性名里面使用实体
<description>Author & programmer</description> <contacts version="1.0">
字符实体
不需要在DTD中声明 *用来表示不易输入的字符或非ASCII字符(©或者©表示©)
可以在元素内容和属性值里面使用
不能在元素名或属性名里面使用,也不能代替实际的XML标记
普通实体
必须在DTD中先声明
可表示多个字符、文本段,甚至整个文档
实体的值可以是任何良构的XML,但是不能含有根元素,也不能自引用
<!ENTITY 实体名称“实体的值”>
<!ENTITY source-text “Beginning XML 4E's Contact List”>
<!ENTITY address-unknown “The address for this location is "Unknown"”>
<!ENTITY empty-gps“<latitude></latitude><longitude></longitude>”> <address>&address-unknown;</address>
<!ENTITY address-unknown “The address for this location is &address-unknown;”>
<!ENTITY address-start “<address>”>
<!ENTITY address-end “</address>”>
实体声明
普通实体
普通实体可代替一个外部文件
验证型解析器必须打开外部实体进行解析,非验证型解析器不一定
<!ENTITY 实体名称SYSTEM “URI/URL”>
<!ENTITY 实体名称SYSTEM “URI/URL” NDATA 标记名>
<!ENTITY jeff-description SYSTEM “jeff.txt”>
实体声明
参数实体
参数实体可创建可重用的替换文本段
只能在DTD中引用
替换文本可由DTD的一个或多个声明组成
可用来建立分散在多个文档中的DTD
引用(%NameDeclarations;)
Last updated