十分钟学会XSD

6月 9, 2015 |

XSD用来验证XML内容的有效性,当开发基于SOAP的WEB SERVICE时,发现我们经常需要定义wsdl。虽然"代码优先"的开发模式不需要我们手动书写wsdl。如果我们了解基本的XSD知识,那么我们就能更轻易的读懂wsdl的内容以及根据需要修改wsdl。
本文将开发一个验证代表学生成绩的XSD。
由于eclipse带有XSD的可视化编辑器。所以我使用eclipse来创建XSD,具体的步骤如下
一、新建一个工程,比如test-xsd
二、工程上右键->new->XML-XML Schema File->next
编辑完成后的结果如图:

xsd-1

三、在图中的type标签内添加你希望定义的类型(Type)。
常用的元素种类有simpleType和complexType,simpleType的作用是对已有的数据类型进行范围的限制,complexType定义复合的数据类型。eclipse的XSD编辑器只会帮我们生产XSD框架,具体的规则我们可以切换到source视图进行代码编辑。

四、本示例最后产生的XSD内容如下

对本示例使用的元素解释如下:
在本XSD中,没有带前缀的元素都来y于xmlns="http://www.w3.org/2001/XMLSchema"命名空间,比如simpleType,complexType,element等等。
targetNamespace:表示本XSD中定义的element和type属于的namespace。防止命名冲突,和java的包的概念相同。
xmlns:tns:tns前缀表示本XSD的命名空间
elementFormDefault: 本XSD的元素默认是否需要带前缀,"unqualified"表示不带。
sex类型是一个枚举值。子元素<restriction>表示sex的基类为string。可选的值为"MAN"和"WOMAN"。<simpleType>合法的子元素还有<list>表示是列表,<union>指定的类型的联合。
username类型是满足"\w{2,6}"正则表达式的字符串。
score类型是规定了最小值和最大值的double值。
classScore是一个复合类型,定义了三个域,cid,cname, score。而score的类型为本XSD中定义的tns:score类型。<sequence>表示各个域安顺序排列,可选的还有<choice>任选一个,<all>全部但是可以任意排序。
student也是一个复合类型,值得注意的是属性minOccurs="1" 和maxOccurs="unbounded",表示该域至少出现一次,可以无限次。

五、工程上右键->new->XML->create XML file from an XML file->选择你的XSD文件。
产生的示例如下:

示例XML有两个classScore对象
虽然行文比较冲忙,但是也希望能给看官一点启发和帮助,欢迎留言反馈!

参考文档:

Understanding XML Schema

Posted in: cxf | Tags:

Comments are closed.