elementFormDefault的作用

http://blog.csdn.net/tuwen/article/details/2260796 

一个 XML schema 中 elementFormDefault="?" 这一属性用来指示 XML Schema 处理程序把这个 XML schema 中定义的元素或者类型放到哪个命名空间。

一个schema中声明的元素或者类型只能归到两个命名空间中的某一个去,这两个是,无名命名空间和由targetNamespace属性指明的目标命名空间。而targetNamespace属性只能在xs:schema的定义中声明,因而,一个schema中定义的元素或类型只可能归属于一个有名命名空间(但是还有可能归属于无名命名空间)。

当elementFormDefault="qualified" 时,所有全局元素的子元素将被以缺省方式放到目标命名空间,但是全局元素或者类型将被放到目标命名空间;而当elementFormDefault="unqualified" 时,所有全局元素的子元素将被以缺省方式放到无名命名空间。而属性的命名空间类似地由attributeFormDefault="?"来指明。

需要明白的是,elementFormDefault="?" 是有作用域的,并且是被继承的,除非在子定义中覆盖父定义。

下面三个例子说明了elementFormDefault的使用效果。

1.定义了目标命名空间, 全局elementFormDefault=“unqualified”。这时除了全局元素或者类型将归于目标命名空间外,局部元素将归于无名命名空间。

unqualified.xsd

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
  3.     targetNamespace="aaaa"  
  4.     elementFormDefault="unqualified"> 
  5. <xs:element name="c"> 
  6.    <xs:complexType> 
  7.     <xs:sequence> 
  8.      <xs:element name="c1" type="xs:double"/> 
  9.      <xs:element name="c2" type="xs:string"/> 
  10.     </xs:sequence> 
  11.    </xs:complexType> 
  12. </xs:element> 
  13. </xs:schema> 

unqualified.xml

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <n:c xmlns:n="aaaa"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="aaaa unqualified.xsd"> 
  5. <c1>3.141593E0</c1> 
  6. <c2>String</c2> 
  7. </n:c> 

2. 定义了目标命名空间, 全局elementFormDefault=“qualified”。这时全局元素或者类型将归于目标命名空间,局部元素将以缺省方式归于目标命名空间。

qualified.xsd

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  3. targetNamespace="aaaa" 
  4. elementFormDefault="qualified"> 
  5. <xs:element name="c"> 
  6.    <xs:complexType> 
  7.     <xs:sequence> 
  8.      <xs:element name="c1" type="xs:double"/> 
  9.      <xs:element name="c2" type="xs:string"/> 
  10.     </xs:sequence> 
  11.    </xs:complexType> 
  12. </xs:element> 
  13. </xs:schema> 

qualified.xml

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <c xmlns="aaaa"  
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.    xsi:schemaLocation="aaaa qualified2.xsd"> 
  5.    <c1>3.141593E0</c1> 
  6.    <c2>String</c2> 
  7. </c> 

3. 定义了目标命名空间, 全局elementFormDefault=“unqualified”。这时全局元素(c)或者类型将归于目标命名空间。局部元素(c1,c2)以缺省方式归于无名命名空间。局部元素(c3)在局部定义中使用form=“qualified”覆盖全局设定的unqualified,这使得c3归于目标命名空间(如果它有子元素,子元素将以缺省方式归于目标命名空间)。

qualified2.xsd

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  3. targetNamespace="aaaa" 
  4. elementFormDefault="unqualified"> 
  5. <xs:element name="c"> 
  6.    <xs:complexType> 
  7.     <xs:sequence> 
  8.      <xs:element name="c1" type="xs:double"/> 
  9.      <xs:element name="c2" type="xs:string"/> 
  10.      <xs:element name="c3" type="xs:integer" form="qualified"/> 
  11.     </xs:sequence> 
  12.    </xs:complexType> 
  13. </xs:element> 
  14. </xs:schema> 

qualified2.xml

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <n:c xmlns:n="aaaa"  
  3.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.      xsi:schemaLocation="aaaa qualified3.xsd"> 
  5.     <c1>3.141593E0</c1> 
  6.     <c2>String</c2> 
  7.     <n:c3>0</n:c3> 
  8. </n:c> 

1111111111

你可能感兴趣的:(xml,schema)