DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XSD schema文件中elementFormDefault 屬性探討
XSD schema文件中elementFormDefault 屬性探討
編輯:XML詳解     

相信使用過這個屬性的朋友大都會被這個屬性搞得比較迷惑,使用過程中經常會莫名其妙的校驗報錯,對照文檔解釋,覺得沒什麼錯啊,如果換一種寫法或者設置又可以了,但是就是說不清為什麼。
關於這個屬性官方文檔上的語焉不詳,網上網友就這個屬性討論也是各有各的看法,莫衷一是。網上比較典型的一個討論帖子是:請問Schema中elementFormDefault="qualifIEd"是起什麼作用呀?(http://www.xml.org.cn/dispbbs.asp?BoardID=23&id=25672&replyID=17053&star=1&skin=0)
以下是在做了許多試驗,對照MSDN上的說法,參照網友的討論得出的看法

先看MSDN中elementFormDefault 屬性的解釋:
在該架構的目標命名空間中聲明的元素的形式。該值必須是下列字符串之一:qualified 或 unqualified。默認值為 unqualifIEd。
如果該值是 unqualifIEd,則無須通過命名空間前綴限定目標命名空間的元素。
如果該值是 qualifIEd,則必須通過命名空間前綴限定目標命名空間的元素。

MSDN的描述不完整,完整的應該是:
如果該值是 unqualifIEd,實例XML的根元素必須有命名空間的的限定,這個命名空間必須是schema中定義的targetNameSpace。但是其下子元素無須也不允許用命名空間前綴限定目標命名空間。 子元素的命名空間為空命名空間。
如果該值是 qualifIEd,實例XML根元素及其下所有子元素都必須通過命名空間前綴限定目標命名空間。這個命名空間必須是schema中定義的targetNameSpace。

再看XML實例中根元素和子元素的命名空間的設置:
1.通過prefix定義命名空間
在根元素的屬性中使用 XMLns:xxx = url 的語法來定義一個名稱空間的前綴xxx,然後在需要用這個名稱空間限定的元素前面加上前綴和冒號,例如:
<?XML version="1.0" encoding="UTF-8"?>
<n:c XMLns:n="aaaa">
 <n:c1>3.141593E0 </n:c1>
 <n:c2>String</n:c2>
 <c3>0</c3>
</n:c>

這個XML實例中定義了一個叫“aaaa”的前綴,在元素名稱前面加了”n:”的元素都會擁有”aaaa”的命名空間,沒有加前綴的元素(c3)將沒有命名空間的限定,它的命名空間屬性為””。
2.通過默認命名空間定義全部元素的命名空間
根元素的單獨的xmlns 屬性定義一個XML實例的默認命名空間,其下的元素除了另外設置了前綴,都將被默認命名空間限定。例如:
<?XML version="1.0" encoding="UTF-8"?>
<c XMLns ="aaaa">
 <c1>3.141593E0 </c1>
 <c2>String</ c2>
 <c3>0</c3>
</n:c>

這個XML實例中所有元素(c,c1,c2,c3)的命名空間都是“aaaa”

總結:
elementFormDefault 屬性只是用來設置xml的實例中子元素是否一定需要有命名空間限定,不控制xml實例中各元素歸屬哪個命名空間。xml實例中元素的命名空間由XML實例本身的設置決定。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved