目的:编写一个文件用来约束另一个xml文件的书写规范。
用来约束xml的文件格式,保证这个文件是有效的。
内部DTD:所有的约束都是直接定义在xml文件中的
内部的 DOCTYPE 声明的格式:
????<!DOCTYPE 根元素 [元素声明]>
声明一个元素:
????<!ELEMENT 元素名称 类别>或<!ELEMENT 元素名称 (元素内容)>
类别:
空元素???? <!ELEMENT 元素名称 EMPTY>
任意内容的元素 <!ELEMENT 元素名称 ANY>
元素内容:
????只有 PCDATA 的元素????????????<!ELEMENT 元素名称 (#PCDATE)>
????带有子元素(序列)的元素????<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
????声明只出现一次的元素????????<!ELEMENT 元素名称 (子元素名称)>
????声明最少出现一次的元素????????<!ELEMENT 元素名称 (子元素名称+)>
????声明出现零次或多次的元素????<!ELEMENT 元素名称 (子元素名称*)>
????声明出现零次或一次的元素????<!ELEMENT 元素名称 (子元素名称?)
声明一个属性:
????<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型选项:
????
类型????????描述
CDATA????????值为字符数据 (character data)
(en1|en2|..)????此值是枚举列表中的一个值
ID????????????值为唯一的 id
IDREF????????值为另外一个元素的 id
IDREFS????????值为其他 id 的列表
NMTOKEN????值为合法的 XML 名称
NMTOKENS????值为合法的 XML 名称的列表
ENTITY????????值是一个实体
ENTITIES????????值是一个实体列表
NOTATION????此值是符号的名称
xml:????????????值是一个预定义的 XML 值
?
默认值参数:
?
?
值????????????解释
值????????????属性的默认值
#REQUIRED????属性值是必需的
#IMPLIED????属性不是必需的
#FIXED value????属性值是固定的
外部文档声明:
????引用本地文件:
????<!DOCTYPE 根元素 SYSTEM "文件名">
????引用在线文件:
????<!DOCTYPE 根元素 PUBLIC "dtd名称" "文件地址" >
2.Schema
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
<schema> 元素是每一个 XML Schema 的根元素。
XSD简易元素
????定义简易元素:
<xs:element name="xxx" type="yyy"/> |
此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。
常用类型有:
????xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
例如:
<xs:element name="lastname" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="dateborn" type="xs:date"/> |
简易元素的默认值:
<xs:element name="color" type="xs:string" default="red"/> |
简易元素的固定值:
<xs:element name="color" type="xs:string" fixed="red"/> |
简易元素无法拥有属性。
XSD属性:
????格式:
<xs:attribute name="xxx" type="yyy"/> |
在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。
常用类型有:
????xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
例如:
对应的属性定义
<xs:element name="lastname" type="xs:string"/> <xs:attribute name="lang" type="xs:string"/> |
带有属性的xml元素:
<lastname lang="en">Smith<lastname> |
属性的默认值:
<xs:attribute name="lang" type="xs:string" default="EN"/> |
属性的固定值:
<xs:attribute name="lang" type="xs:string" fixed="EN"/> |
可选和必需的属性:
在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:
<xs:attribute name="lang" type="xs:string" use="required"/> |
XSD限定/Facets:
????限定(restriction)用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet
对值的限定:
下面的例子定义了带有一个限定且名为 "age" 的元素。age 的值不能低于 0 或者高于 120:
<xs:element name="age"> ? <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> ? </xs:element> |
数据类型的限定:
?
限定????描述
enumeration????定义可接受值的一个列表
fractionDigits????定义所允许的最大的小数位数。必须大于等于0。
length????????定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive????定义数值的上限。所允许的值必须小于此值。
maxInclusive????定义数值的上限。所允许的值必须小于或等于此值。
maxLength????定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive????定义数值的下限。所允许的值必需大于此值。
minInclusive????定义数值的下限。所允许的值必需大于或等于此值。
minLength????定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
pattern????????定义可接受的字符的精确序列。
totalDigits????定义所允许的阿拉伯数字的精确位数。必须大于0。
whiteSpace????定义空白字符(换行、回车、空格以及制表符)的处理方式。
xml复合类型指示器:
order指示器:用于定义元素顺序
Occurrence指示器:Occurrence 指示器用于定义某个元素出现的频率。
Group指示器:Group 指示器用于定义相关的数批元素。
原文:https://www.cnblogs.com/bing-08/p/10740643.html