※elementFormDefault
※Test.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="!@#" xmlns:a="!@#" elementFormDefault="qualified"> <element name="root"> <complexType> <sequence> <element name="q1" type="a:t1" /> <element name="q2" type="a:t2" /> </sequence> </complexType> </element> <complexType name="t1"> <sequence> <element name="s1" type="string" /> <element name="s2" type="a:t2" /> </sequence> </complexType> <complexType name="t2"> <sequence> <element name="s3" type="string" /> </sequence> </complexType> </schema>
※上一篇的xsd裡面都沒有使用xmlns,這裡因為自己也會用到,所以要加
※root裡有q1和q2,型態是自定的t1和t2,將root寫在t1和t2上面也是可以的
※這裡的意思是說,q1下有s1和s3;q2下有s3
※elementFormDefault有兩個值是qualified和unqualified(預設)
還有分全域和區域的element
全域的就是element="root"那一層,以下的element都是區域
unqualified表示使用這裡的元素時,區域一定不可使用前綴;全域一定要使用前綴
※Test.xml
<aa:root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="!@# Test.xsd" xmlns:aa="!@#"> <aa:q1> <aa:s1></aa:s1> <aa:s2> <aa:s3></aa:s3> </aa:s2> </aa:q1> <aa:q2> <aa:s3></aa:s3> </aa:q2> </aa:root>
※如果Test.xsd的elementFormDefault是qualified,加不加「aa:」都可以(全域、區域)
※Test.xml
<aa:root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="!@# Test.xsd" xmlns:aa="!@#"> <q1> <s1></s1> <s2> <s3></s3> </s2> </q1> <q2> <s3></s3> </q2> </aa:root>
※如果Test.xsd的elementFormDefault是unqualified,區域的q1、q2、s1~s3不能加「aa:」
※由於不能加就不曉得是哪個命名空間,所以都建議用qualified,用eclipse預設產生出來的也是qualified
※全域element
再舉個例子,全部都是全域的element※Test.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="!@#" xmlns:a="!@#" elementFormDefault="qualified"> <element name="out" type="a:t1" /> <element name="root"> <complexType> <sequence> <element ref="a:out" /> </sequence> </complexType> </element> <complexType name="t1"> <sequence> <element name="s1" type="string" /> <element name="s2" type="a:t2" /> </sequence> </complexType> <complexType name="t2"> <sequence> <element name="s3" type="string" /> </sequence> </complexType> </schema>
※ref連到全域的out,而out是全域的
※Test.xml
<aa:root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="!@# Test.xsd" xmlns:aa="!@#"> <aa:out> <aa:s1>a:s1</aa:s1> <aa:s2> <aa:s3>a:s3</aa:s3> </aa:s2> </aa:out> </aa:root>
※如果Test.xsd的elementFormDefault是qualified,加不加「aa:」都可以(全域、區域)
※Test.xml
<aa:root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="!@# Test.xsd" xmlns:aa="!@#"> <aa:out> <s1>a:s1</s1> <s2> <s3>a:s3</s3> </s2> </aa:out> </aa:root>
※如果Test.xsd的elementFormDefault是unqualified,區域的s1~s3不能加「aa:」
※attributeFormDefault
和elementFormDefault是針對元性,這裡是針對屬性屬性一定是元素的其中之一,所以建議是unqualified,用eclipse預設不會產生attributeFormDefault,而attributeFormDefault預設值就是unqualified
※Test.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="!@#" xmlns:a="!@#" elementFormDefault="qualified" attributeFormDefault="unqualified"> <element name="root1"> <complexType> <sequence> <element name="first" type="string" /> <element name="second"> <complexType> <attribute name="r3" type="string" use="required" /> </complexType> </element> <element name="third" type="a:root2" /> </sequence> <attribute name="r1" type="string" use="required" /> <attribute name="r2" type="string" use="required" /> </complexType> </element> <complexType name="root2"> <attribute name="r1" type="int" use="required" /> <attribute name="r2" type="int" use="required" /> </complexType> </schema>
※元素root1有屬性r1和r2;子元素second有屬性r3
※子元素third連到外部屬性root2,也有r1、r2兩個屬性
※Test.xml
<a:root1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="!@# Test.xsd" xmlns:a="!@#" r1="" r2=""> <a:first>a:first</a:first> <a:second r3="" /> <a:third r1="1" r2="2"></a:third> </a:root1>
※如果Test.xsd的attributeFormDefault是unqualified,所有的區域屬性都不能加「a:」
※Test.xml
<a:root1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="!@# Test.xsd" xmlns:a="!@#" a:r1="" a:r2=""> <a:first>a:first</a:first> <a:second a:r3="" /> <a:third a:r1="0" a:r2="0" /> </a:root1>
※如果Test.xsd的attributeFormDefault是qualified,所有的屬性都要加「a:」(全域、區域)
※全域attribute
※Test.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="!@#" xmlns:a="!@#" elementFormDefault="qualified" attributeFormDefault="unqualified"> <element name="root1"> <complexType> <sequence> <element name="first" type="string" /> <element name="second"> <complexType> <attribute ref="a:out" use="required" /> </complexType> </element> <element name="third" type="a:root2" /> </sequence> <attribute name="r1" type="string" use="required" /> <attribute ref="a:out" use="required" /> </complexType> </element> <complexType name="root2"> <attribute name="r1" type="int" use="required" /> <attribute name="r2" type="int" use="required" /> </complexType> <attribute name="out" type="string" /> </schema>
※和上面的程式相比較,多了out的全域屬性,然後root1和second都連到外部的out
※Test.xml
<a:root1 a:out="" r1="" xmlns:a="!@#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="!@# Test.xsd"> <a:first>a:first</a:first> <a:second a:out="" /> <a:third r1="0" r2="0" /> </a:root1>
※如果Test.xsd的attributeFormDefault是qualified,還是和剛剛一構,所有的屬性都要加「a:」(全域、區域)
※如果Test.xsd的attributeFormDefault是unqualified,所有的區域屬性都不能加「a:」,但out是全域屬性,還是要加「a:」
沒有留言:
張貼留言