1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 -> 引入Schema约束 6 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 7 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 </web-app>
xmlns="http://java.sun.com/xml/ns/javaee"
代表没有命名空间的引用,底下标签前面没有命名空间前缀的都是来自xmlns的
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 这个告诉编译器文档遵从W3C标准规则。
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
中间空格,xsi:schemaLocation="{url} {location}" 用于关联自己指定的名字的命名空间 和 文件的位置
它的声明指出了 命名空间关联的 定义的空间 和文件位置,然后可以使用了。像上面的,这样自己定义的名称xmlns就可以使用了,但是它是没有命名空间引用的。所以底下标签前面没有命名空间前缀的都是来自xmlns的
命名空间的概念:类似java中的包。命名空间即元素的命名的一个区间。该区间可以指定名字也可以使用默认的名字。
那么如果要使用Schema编写代码来约束XML文件,那么Schema中必须预先的定义好约束的标签名。但是这些标签又不同于普通的标签因此需要指定命名的空间名。
xmlns:xs="http://www.w3.org/2001/XMLSchema"
该元素是一个属性,该属性必须出现在约束文件的根元素中。
引入约束文件(重点)
- 在约束文件的根元素上添加命名空间属性指定所有的约束元素的来自区域
- 在约束文件的根元素上添加elementFormDefault=” qualified”指定全局约束
- 在约束文件的根元素上添加targetNamespace="URL地址"来指定定义好的约束的名字
- 在被约束文件的根元素中使用xmlns:命名空间名来引入指定的约束 <书架 xmlns:jnb="http://www.jnb.com">
- 在被约束文件中将所有的元素以4中起的命名空间名作为元素的前缀
- 在被约束文件的根元素上使用xsi:schemaLocation="http://www.jnb.com mybooks.xsd"指定约束的具体文件路径
- 在被约束文件的根元素使用xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"来指定6中的schemaLocation来自的区域
例子:
xmlns:xs="http://www.w3.org/2001/XMLSchema" 指定了默认的 酷似 java中的默认数据类型,不用特别显示引用指出它来自哪
targetNamespace="http://www.jnb.com" 自己定义了一个目标命名空间的名字
elementFormDefault="qualified" 指定全局
xsd文件:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 3 targetNamespace="http://www.jnb.com" elementFormDefault="qualified"> 4 <xs:element name='书架'> 5 <xs:complexType> 6 <xs:sequence maxOccurs='unbounded'> 7 <xs:element name='书'> 8 <xs:complexType> 9 <xs:sequence> 10 <xs:element name='书名' type='xs:string' /> 11 <xs:element name='作者' type='xs:string' /> 12 <xs:element name="售价"> 13 <xs:simpleType> 14 <xs:restriction base="xs:integer"> 15 <xs:minInclusive value="0" /> 16 <xs:maxInclusive value="120" /> 17 </xs:restriction> 18 </xs:simpleType> 19 </xs:element> 20 </xs:sequence> 21 <xs:attribute name="isbn" type="xs:string" use="required" /> 22 </xs:complexType> 23 </xs:element> 24 </xs:sequence> 25 </xs:complexType> 26 </xs:element> 27 </xs:schema>
被约束的 xml文件
xmlns:jj= "http://www.jnb.com" 给关联的命名空间 取个 jj的名字
以方便底下用jj的命名空间来引用
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <jj:书架 xmlns:jj= "http://www.jnb.com" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.jnb.com mybooks.xsd"> 5 <jj:书 isbn="0001"> 6 <jj:书名>书籍</jj:书名> 7 <jj:作者>某人</jj:作者> 8 <jj:售价>100</jj:售价> 9 </jj:书> 10 </jj:书架>