Schema的一个简单实例
2006-04-25 17:35 Jeff 阅读(1402) 评论(0) 编辑 收藏 举报
一个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的描述到此为止。