DTD编写语法
DTD定义:
<!ELEMENT 书本 (名称,作者)>书本包括2个元素,名称,作者
<!ELEMENT 名称 (#PCDATA)>名称元素数据类型为可读字符串
<!ELEMENT 作者 (#PCDATA)>
参数实体:
声明:<!ENTITY % entityname SYSTEM "dtdfile.dtd">
注意:%两边都需要有空格
引用:%entityname;
也可以这样声明:<!ENTITY % entityname SYSTEM "value">
引用:%entityname;
这样就相当于别名
DTD局限性:
- 缺少命名空间
- 缺少数据分类
- 数据类型单调
- 内容模型描述受到限制
- DTD语法与XML存在差异
Schema XSD XML模式定义,用于解决DTD的缺点
Schema的优点:
- Schema基于XML语法规则
- 可以扩充数据类型
- 支持命名空间
- 支持属性组
例子:
<? ... xmlns:xs=...>在这里xs是显式的命名空间声明
<Schema xmlns=...>xmlns是默认的命名空间
1.定义命名空间
2.<schema>是根元素
属性 targetNameSpace命名空间
attributeFromDefault=qualified处于命名空间
unqualified不处于命名空间
elementFromDefault
3.<element>属性:
name="元素名"
type="元素类型"
ref="全局元素声明"
form="qualified"或者"unqualified"
minOccurs="最小出现次数"
maxOccurs="最大出现次数"
unbounded表示无限次
4.全局声明 作为<schema>的孩子
局部声明 不是<schema>的直接孩子
5.<attribute name="属性名" type="类型名" />
6.ref引用举例
<element ref="target:first"/>其中target是命名空间,first是全局声明
7.元素通配符:
<ANY minOccurs=... maxOccurs=... namespace=... processContents=...>
其中namespace可选:
- ##any 所有
- ##other 除targetNamespace外的元素
- ##targetNamespace
- ##local
其中processContents可选;
- skip 忽略所有通配符
- lax 处理,找不到忽略
- strict 默认,处理,找不到报错
8.自定义数据类型:
<xsd:SimpleType name="自定义">
<xsd:restriction base="基于内置数据类型">
<xsd:length value="8"> 只能容纳8个字符
<xsd:pattern value="\d{4}-\d{3}"/>正则表达式匹配
<xsd:SimpleType>
也可以加入枚举类型:
<xsd:enumeration value="枚举值1"/>
<xsd:enumeration value="枚举值2"/>
<xsd:maxInclusive value="400"/>最大值包含
<xsd:maxcExClusive value="400"/>最大值不包含
最小值同理
<union menmberType="float string"/>
类型只能是float或者string
<list>
9.xsd:复杂数据类型
<complexType name="名称">
<xsd:complexType>
<xsd:sequence>元素必须按照顺序出现
</xsd:sequence>
定义混合元素:
<xsd:complexType mixed="true">
</xsd:complexType>
混合元素可以包含文本与其他元素
10.属性应该定义在complexType末尾
元素default 不写不存在,空取默认
属性default 不写取默认
sequence:按照顺序出现
group:将一组元素组合到一起,相当于函数,可以重复使用
choice:选其一出现
all:元素出现次序随意,all必须放在最前面
attributeGroup属性组
include:在同一命名空间下
import:可以在不同的命名空间下