<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> ... </书架>
A、当引用的文件在本地时,采用如下方式:
<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL"> 例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>B、当引用的文件是一个公共的文件时,采用如下方式:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL"> 例如: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">2、DTD约束语法细节:
<!ELEMENT 元素名称元素类型> 元素类型可以是元素内容、或类型 如为元素内容:则需要使用()括起来,如 <!ELEMENT 书架 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)>如为元素类型,则直接书写,DTD规范定义了如下几种类型:
<!ATTLIST 元素名 属性名1 属性值类型 设置说明 属性名2 属性值类型 设置说明 …… > 属性声明举例: <!ATTLIST 商品 类别 CDATA #REQUIRED 颜色 CDATA #IMPLIED >对应XML文件:
<商品 类别="服装" 颜色="黄色">…</商品> <商品类别="服装">…</商品>设置说明:
<!ATTLIST 页面作者 姓名 CDATA #IMPLIED 年龄 CDATA #IMPLIED 联系信息 CDATA #REQUIRED 网站职务 CDATA #FIXED "页面作者" 个人爱好 CDATA "上网" >(4)常用属性值类型
<?xml version = "1.0" encoding="GB2312" standalone="yes"?> <!DOCTYPE 购物篮 [ <!ELEMENT 肉 EMPTY> <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉"> ]> <购物篮> <肉 品种="鱼肉"/> <肉 品种="牛肉"/> <肉/> </购物篮>B、属性值类型——ID
<?xml version = "1.0" encoding="GB2312" ?> <!DOCTYPE 联系人列表[ <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人(姓名,EMAIL)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ATTLIST 联系人 编号 ID #REQUIRED> ]> <联系人列表> <联系人 编号="1"> <姓名>张三</姓名> <EMAIL>[email protected]</EMAIL> </联系人> <联系人 编号="2"> <姓名>李四</姓名> <EMAIL>[email protected]</EMAIL> </联系人> </联系人列表>C、实体定义——ENTITY
<!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址"> <!ELEMENT 个人信息 (%TAG_NAMES; | 生日)> <!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>举例2:
<!ENTITY % common.attributes " id ID #IMPLIED account CDATA #REQUIRED " > ... <!ATTLIST purchaseOrder %common.attributes;> <!ATTLIST item %common.attributes;>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> .... </xsd:shema>2、元素标记
<xsd:element name="标记名称" type="简单数据类型">其中,“标记名称”就是对应的XML文件中标记的名称,“简单数据类型”是对标记中文本数据的限制。例如,如果XML Schema模式有如下的元素:
<xsd:element name="出生日期" type="xsd:date">那么使用该模式进行约束的XML文件中任何名字为“出生日期”的标记中文本数据必须是日期类型。
<xsd:element name="标记名称"> <xsd:complexType> 对子标记约束的元素 </xsd:complexType> </xsd:element>“复杂类型”元素中最重要的部分就是“对子标记约束的元素”部分,如果该“复杂类型”元素想约束name指定的标记顺序出现几个子标记,而且这些子标记在模式中已经有全局元素对其进行了约束,那么“对子标记约束的元素”部分可以是使用带ref属性的元素,例如:
<xsd:element name="标记名称"> <xsd:complexType> <xsd:sequence> <xsd:element ref="子标记1" /> <xsd:element ref="子标记2" /> <xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="子标记1" type="简单数据类型" /> 如果对子标记的约束不想引用全局元素,或没有约束该子标记的全局元素,“对子标记约束的元素”还可以是一个“复杂类型”元素。例如: <xsd:element name="标记名称"> <xsd:complexType> <xsd:sequence> <xsd:element name="子标记1" > < xsd:complexType> ....................... < /xsd:complexType> </xsd:elemnt> <xsd:sequence> </xsd:complexType> </xsd:element>4、属性
<xsd:element name="标记名称"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="学号" type="xsd:int" use="required" /> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>5、Schema的优点