XML Schema是定义XML的数据定义文件,以.xsd作为文件的扩展名。它也以被用来定义一类XML文件。
通常,一些特殊含义的数据不能通过系统预设的数据结构(类型)清楚地描述。
XML Schema 规范中声明:可以通过facet来限制(restriction)简单类型,从而产生一些新的原子类型(Atomic types)。
Facet有pattern, enumeration,等等;
这里要说的是其中非常有用的一项是:
pattern+ 正则表达式语言(regular expression language)
结合正则表达式的强大功能,就可以进行一些复杂的数据结构的描述
Examples可以通过xmlspy, xmlwrite,或js/vbs 等进行验证,下面举出了js验证的例子(需要msxml4.0支持)
有关定义 XML Schema 的信息,可以在 W3C 的 XML Schema 规范的第一部分 中找到。有关内置数据类型及其可用的局限性方面的信息,请检 查 XML Schema 规范的第二部分 。关于 这两部分 XML Schema 规范的简易摘要,请查看 W3C Primer on XML Schema 。
有关正则表达式,可以去 http://www.regexlib.com/ 看看
examples:
/*** examples.xml ***/
1<root 2001="" \"="" _http:="" www.w3.org="" xmlns:xsi='\"' xmlschema-instance_="" xsi:nonamespaceschemalocation='\"examples.xsd\"'>
2<user>
3<name>test</name>
4<email>[email protected]</email>
5<ip>127.0.0.1</ip>
6<color>#000000</color>
7</user>
8<user>
9<name>guest</name>
10<email>[email protected]</email>
11<ip>202.102.224.25</ip>
12<color>#FFFFFF</color>
13</user>
14</root>
/*** examples.xsd ***/
1<xsd:schema 2001="" \"="" _http:="" www.w3.org="" xmlns:xsd='\"' xmlschema_="">
2<xsd:element name='\"root\"' type='\"Root\"/'>
3<xsd:complextype name='\"Root\"'>
4<xsd:sequence>
5<xsd:element maxoccurs='\"unbounded\"' minoccurs='\"0\"' name='\"user\"' type='\"User\"'></xsd:element>
6</xsd:sequence>
7</xsd:complextype>
8<xsd:complextype name='\"User\"'>
9<xsd:sequence>
10<xsd:element name='\"name\"' type='\"xsd:string\"/'>
11<xsd:element name='\"email\"' type='\"Email\"'></xsd:element>
12<xsd:element name='\"ip\"' type='\"IP\"'></xsd:element>
13<xsd:element name='\"color\"' type='\"Color\"'></xsd:element>
14</xsd:element></xsd:sequence>
15</xsd:complextype>
16<xsd:simpletype name='\"Email\"'>
17<xsd:restriction base='\"xsd:string\"'>
18<xsd:pattern value='\"([a-zA-Z0-9_\\\\-\\\\.]+)@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.)|(([a-zA-Z0-9\\\\-]+\\\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\\\]?)\"/'>
19</xsd:pattern></xsd:restriction>
20</xsd:simpletype>
21<xsd:simpletype name='\"IP\"'>
22<xsd:restriction base='\"xsd:string\"'>
23<xsd:pattern value='\"(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\"/'>
24</xsd:pattern></xsd:restriction>
25</xsd:simpletype>
26<xsd:simpletype name='\"Color\"'>
27<xsd:restriction base='\"xsd:string\"'>
28<xsd:pattern value='\"#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\"/'>
29</xsd:pattern></xsd:restriction>
30</xsd:simpletype>
31</xsd:element></xsd:schema>
/*** examples.htm ***/
1<script language='\"javaScript\"'>
2function validate()
3{
4var oXML ;
5var nParseError;
6var sReturnVal;
7
8oXML = new ActiveXObject(\"MSXML2.DOMDocument.4.0\") ;
9oXML.async = false ;
10oXML.validateOnParse = true;
11
12oXML.load(\"examples.xml\") ;
13
14nParseError = oXML.parseError.errorCode ;
15sReturnVal = \"\" ;
16
17if (0 != nParseError)
18{
19//参看书籍教程中parseError对象属性
20sReturnVal = sReturnVal + \"代码:\" + oXML.parseError.errorCode + \"\\\n\" ;
21sReturnVal = sReturnVal + \"错误原因:\" + oXML.parseError.Reason + \"\\\n\" ;
22sReturnVal = sReturnVal + \"错误字符串:\" + oXML.parseError.srcText + \"\\\n\" ;
23sReturnVal = sReturnVal + \"错误行号\" + oXML.parseError.line + \"\\\n\" ;
24sReturnVal = sReturnVal + \"错误列数:\" + oXML.parseError.linepos + \"\\\n\" ;
25}
26else
27{
28sReturnVal = sReturnVal + \"验证通过!\"
29}
30
31alert(sReturnVal);
32}
33
34function window.onload()
35{
36validate();
37}
38</script>