1. DTD指定根元素的语法是<!DOCTYPE 根元素名[元素描述]>,而每个schema的根元素都是xsd:schema(其中xsd是别名,可任意定义),定义该元素时,还应该指定xsd命名空间对应的schema定义。因此,每个schema都有如上结构: f]ilTQ"G8e
<?xml version="1.0" encoding="UTF-8"?> iEsF9
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> nW|yGYC;
…… m'7{o oO
</xsd:schema> j=q@ Aa.
2. DTD定义子元素的语法是<!ELEMENT 元素名 元素类型描述>,这里的类型包括任意类型(ANY)、字符串值(#PCDATA)、空元素(EMPTY)、包含子元素、混合元素;schema定义子元素的语法是<xsd:element name=”…” 子元素类型>,但指定元素的子元素,则需使用元素引用语法:<xsd:element ref=”已有元素名” minOccurs="最小次数" maxOccurs="最大次数" >,其中后面两个属性值可以不指定,不指定的情况下默认必须使用一次; gZ,i_C8>P
前面所指的定义子元素的语法中的指定子元素类型有两个方法,一是用type属性,二是用嵌套子元素的方法。现把schema指定类型的各种情况说明如下: u0qQ [jn{O
a) 使用内嵌类型(共8个类型),如下例子: 3u`]41of!
<xsd:element name="书名" type="xsd:string"/> Q|Qs/s..G
b) 自定义简单类型(原有内建类型+额外约束),如下例子: 9zV1f4]Wd
<xsd:simpleType name="price"> T^~b=;/
<xsd:restriction base="xsd:decimal"> ~_E3(NBE/
<xsd:fractionDigits value="2"/> "Y@T6I .
<xsd:minInclusive value="1.00"/> k| uBO<P
<xsd:maxInclusive value="300.00"/> :U uRjwT
</xsd:restriction> 7 Rg;w
</xsd:simpleType> {0$: +{?
c) 自定义复合类型,如下例子: Mo=tQ(0x
<xsd:complexType name="book"> %%:B-Rei+
<xsd:sequence|all|choice> *y.#0]
<xsd:element ref="书名"/> q=KQb
<xsd:element ref="作者"/> M}R%$e
<xsd:element ref="出版社"/> KLhJN-<x?
<xsd:element ref="价格"/> W`TV TeZ/
</xsd:sequence> `frVCtnUt
</xsd:complexType> (?Ke-K;
d) 混合类型,则只要在<xsd:complexType>元素上添加mixed=”true”就行。 H0+_VeRO
e) 在<xsd:complexType>元素内不提供xsd:choice|all|sequence任意一个子元素,即为空元素。 }+C`
D#{N3a
另:如果想在schema中实现DTD的既互斥又可无序地出现多次的效果,只需在配置类型的时候选择choice,并且把属性maxOccurs的值赋为unbounded就可以,如下例子所示: Z`ITmPLo
DTD:(A元素|B元素|C元素)* {8f>8gEhD
Schema:<xsd:complexType> ab(,@n
<xsd:choice maxOccurs="unbounded"> HZU6G[8
<xsd:element ref="A元素"/> Y&+(& C
<xsd:element ref="B元素"/> fNb{u"/[
<xsd:element ref="C元素"/> Vg;F/n!D9
</xsd:choice> t,,eP`b^S
</xsd:complexType> #z[ .Cj~
DTD和schema语法的区别(一)

最新推荐文章于 2022-08-02 08:42:49 发布
