一个XML文件如下:
它的DTD文件fclml.dtd如下:
逐字逐句地分析一下这个fclmlschema.xml:
[1]是XML类型声明语句,指明该文档是一个XML文档,并且符合版本1.0规范。另外,该文档采用GB2312编码。
[2]是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可用的数据类型URI
[3]是属性定义语句,它定义了属性“公司”。
[4]-[11]是元素定义语句,这里共定义了8个元素:姓名、ID、公司、EMAIL、电话、街道、城市、省份。其中为"电话"元素定义了数据类型:fixed.14.4。
[12]-[16]定义了本Schema的二级元素:地址,指明该元素包含三个子元素:街道、城市、省份。
<?
xml version = "1.0" encoding="GB2312" standalone = "no"
?>
<! DOCTYPE 联系人列表 SYSTEM "fclml.dtd" >
< 联系人列表 公司=“大地公司” >
< 联系人 >
< 姓名 > 张三 </ 姓名 >
< ID > 001 </ ID >
< 公司 > A公司 </ 公司 >
< EMAIL > zhang@aaa.com </ EMAIL >
< 电话 > (010)62345678 </ 电话 >
< 地址 >
< 街道 > 五街1234号 </ 街道 >
< 城市 > 北京市 </ 城市 >
< 省份 > 北京 </ 省份 >
< ZIP > 100001 </ ZIP >
</ 地址 >
</ 联系人 >
< 联系人 >
< 姓名 > 李四 </ 姓名 >
< ID > 002 </ ID >
< 公司 > B公司 </ 公司 >
< EMAIL > li@bbb.org </ EMAIL >
< 电话 > (021)87654321 </ 电话 >
< 地址 >
< 街道 > 南京路9876号 </ 街道 >
< 城市 > 上海 </ 城市 >
< 省份 > 上海 </ 省份 >
< ZIP > 200002 </ ZIP >
</ 地址 >
</ 联系人 >
</ 联系人列表 >
<! DOCTYPE 联系人列表 SYSTEM "fclml.dtd" >
< 联系人列表 公司=“大地公司” >
< 联系人 >
< 姓名 > 张三 </ 姓名 >
< ID > 001 </ ID >
< 公司 > A公司 </ 公司 >
< EMAIL > zhang@aaa.com </ EMAIL >
< 电话 > (010)62345678 </ 电话 >
< 地址 >
< 街道 > 五街1234号 </ 街道 >
< 城市 > 北京市 </ 城市 >
< 省份 > 北京 </ 省份 >
< ZIP > 100001 </ ZIP >
</ 地址 >
</ 联系人 >
< 联系人 >
< 姓名 > 李四 </ 姓名 >
< ID > 002 </ ID >
< 公司 > B公司 </ 公司 >
< EMAIL > li@bbb.org </ EMAIL >
< 电话 > (021)87654321 </ 电话 >
< 地址 >
< 街道 > 南京路9876号 </ 街道 >
< 城市 > 上海 </ 城市 >
< 省份 > 上海 </ 省份 >
< ZIP > 200002 </ ZIP >
</ 地址 >
</ 联系人 >
</ 联系人列表 >
它的DTD文件fclml.dtd如下:
<?
xml version="1.0" encoding="GB2312"
?>
<! ELEMENT 联系人列表 (联系人)* >
<! ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址) >
<! ELEMENT 地址 (街道,城市,省份) >
<! ELEMENT 姓名 (#PCDATA) >
<! ELEMENT ID (#PCDATA) >
<! ELEMENT 公司 (#PCDATA) >
<! ELEMENT EMAIL (#PCDATA) >
<! ELEMENT 电话 (#PCDATA) >
<! ELEMENT 街道 (#PCDATA) >
<! ELEMENT 城市 (#PCDATA) >
<! ELEMENT 省份 (#PCDATA) >
<! ATTLIST 联系人列表
公司 CDATA #REQUIRED
>
<! ELEMENT 联系人列表 (联系人)* >
<! ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址) >
<! ELEMENT 地址 (街道,城市,省份) >
<! ELEMENT 姓名 (#PCDATA) >
<! ELEMENT ID (#PCDATA) >
<! ELEMENT 公司 (#PCDATA) >
<! ELEMENT EMAIL (#PCDATA) >
<! ELEMENT 电话 (#PCDATA) >
<! ELEMENT 街道 (#PCDATA) >
<! ELEMENT 城市 (#PCDATA) >
<! ELEMENT 省份 (#PCDATA) >
<! ATTLIST 联系人列表
公司 CDATA #REQUIRED
>
同样的文档结构要用Schema来描述的话,可写做下面的样子。我们给这个文件取名fclmlschema.xml。也许你要问:"为什么以.xml作为扩展名,而不象DTD那样有个特殊的名字?"答案很明确,因为Schema本身就是XML文档实例,以.xml作为扩展名正是为了强调这一点。不过,这并不是说,就只能以.xml作为扩展名。如果你愿意,你完全可以给它取一个全新的名字,比如:.aaa、.schema、...,只要你的文件系统支持就行。
[1]
<?
xml version="1.0" encoding="GB2312"
?>
[2] < Schema xmlns ="urn:schemas-microsoft-com:xml-data"
xmlns:dt ="urn:schemas-microsoft-com:datatypes" >
[3] < AttributeType name ="公司" />
[4] < ElementType name = "姓名" />
[5] < ElementType name = "ID" />
[6] < ElementType name = "公司" />
[7] < ElementType name = "EMAIL" />
[8] < ElementType name = "电话" dt:type ="fixed.14.4" />
[9] < ElementType name = "街道" />
[10] < ElementType name = "城市" />
[11] < ElementType name = "省份" />
[12] < ElementType name = "地址" content ="eltOnly" >
[13] < element type = "街道" />
[14] < element type = "省份" />
[15] < element type = "城市" />
[16] </ ElementType >
[17] < ElementType name = "联系人" content ="eltOnly" >
[18] < element type = "姓名" />
[19] < element type = "ID" />
[20] < element type = "公司" />
[21] < element type = "EMAIL" />
[22] < element type = "电话" />
[23] < element type = "地址" />
[24] </ ElementType >
[25] < ElementType name = "联系人列表" content ="eltOnly" >
[26] < element type = "联系人" />
[27] < attribute type ="公司" />
[28] </ ElementType >
[29] </ Schema >
[2] < Schema xmlns ="urn:schemas-microsoft-com:xml-data"
xmlns:dt ="urn:schemas-microsoft-com:datatypes" >
[3] < AttributeType name ="公司" />
[4] < ElementType name = "姓名" />
[5] < ElementType name = "ID" />
[6] < ElementType name = "公司" />
[7] < ElementType name = "EMAIL" />
[8] < ElementType name = "电话" dt:type ="fixed.14.4" />
[9] < ElementType name = "街道" />
[10] < ElementType name = "城市" />
[11] < ElementType name = "省份" />
[12] < ElementType name = "地址" content ="eltOnly" >
[13] < element type = "街道" />
[14] < element type = "省份" />
[15] < element type = "城市" />
[16] </ ElementType >
[17] < ElementType name = "联系人" content ="eltOnly" >
[18] < element type = "姓名" />
[19] < element type = "ID" />
[20] < element type = "公司" />
[21] < element type = "EMAIL" />
[22] < element type = "电话" />
[23] < element type = "地址" />
[24] </ ElementType >
[25] < ElementType name = "联系人列表" content ="eltOnly" >
[26] < element type = "联系人" />
[27] < attribute type ="公司" />
[28] </ ElementType >
[29] </ Schema >
逐字逐句地分析一下这个fclmlschema.xml:
[1]是XML类型声明语句,指明该文档是一个XML文档,并且符合版本1.0规范。另外,该文档采用GB2312编码。
[2]是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可用的数据类型URI
[3]是属性定义语句,它定义了属性“公司”。
[4]-[11]是元素定义语句,这里共定义了8个元素:姓名、ID、公司、EMAIL、电话、街道、城市、省份。其中为"电话"元素定义了数据类型:fixed.14.4。
[12]-[16]定义了本Schema的二级元素:地址,指明该元素包含三个子元素:街道、城市、省份。
- [17]-[24]定义了本Schema的三级元素:联系人,它指明该元素包含六个子元素:姓名、ID、公司、EMAIL、电话、地址。
- [25]-[28]定义了本Schema的顶级元素:联系人列表,指明该元素包含一个子元素:联系人,以及一个属性:公司。
- [29]是结束标记语句,它指明该Schema的描述到此为止。