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
- <?xml version="1.0" encoding="UTF-8"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- targetNamespace="aaaa"
- elementFormDefault="unqualified">
- <xs:element name="c">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="c1" type="xs:double"/>
- <xs:element name="c2" type="xs:string"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:schema>
unqualified.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <n:c xmlns:n="aaaa"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="aaaa unqualified.xsd">
- <c1>3.141593E0</c1>
- <c2>String</c2>
- </n:c>
2. 定義了目標命名空間, 全局elementFormDefault=“qualified”。這時全局元素或者類型將歸於目標命名空間,局部元素將以缺省方式歸於目標命名空間。
qualified.xsd
- <?xml version="1.0" encoding="UTF-8"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- targetNamespace="aaaa"
- elementFormDefault="qualified">
- <xs:element name="c">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="c1" type="xs:double"/>
- <xs:element name="c2" type="xs:string"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:schema>
qualified.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <c xmlns="aaaa"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="aaaa qualified2.xsd">
- <c1>3.141593E0</c1>
- <c2>String</c2>
- </c>
3. 定義了目標命名空間, 全局elementFormDefault=“unqualified”。這時全局元素(c)或者類型將歸於目標命名空間。局部元素(c1,c2)以缺省方式歸於無名命名空間。局部元素(c3)在局部定義中使用form=“qualified”覆蓋全局設定的unqualified,這使得c3歸於目標命名空間(如果它有子元素,子元素將以缺省方式歸於目標命名空間)。
qualified2.xsd
- <?xml version="1.0" encoding="UTF-8"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- targetNamespace="aaaa"
- elementFormDefault="unqualified">
- <xs:element name="c">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="c1" type="xs:double"/>
- <xs:element name="c2" type="xs:string"/>
- <xs:element name="c3" type="xs:integer" form="qualified"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:schema>
qualified2.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <n:c xmlns:n="aaaa"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="aaaa qualified3.xsd">
- <c1>3.141593E0</c1>
- <c2>String</c2>
- <n:c3>0</n:c3>
- </n:c>
1111111111