列表類型
除了使用簡單類型中描述的原子類型(這些原子類型可用於組合成絕大多數的其它類型,包括其它的簡單類型和復合類型)外,XML Schema中在簡單類型范疇中還有列表類型(List Type)的概念。原子類型、列表類型以及聯合類型,總稱為簡單類型。一個原子類型的值在XML Schema中是不可分割的。舉例來說,NMTOKEN值US是不可分割的,US的任何部分,如字母S本身都是沒有意義的。與之相比較,列表類型則是由一組原子類型組成,因此它的每一個部分(原子)本身都是有意義的。舉例來說NMTOKENS是個列表類型。這個類型的元素將是NMTOKEN的列表,不同的NMTOKEN值間使用空格分隔,如“US UK FR”。XML Schema有三個內置的列表類型,它們是NMTOKENS、IDREFS和ENTITIES。
除了使用內置的列表類型之外,還可以通過引用現有的原子類型建立新的列表類型(不可以使用現有的列表類型來建立新的列表類型,也不能使用復合類型來建立新的列表類型)。舉例來說,我們可以建立一個名為myInteger的列表類型,並在實例文檔中使用它(參見代碼10)。其中代碼10中的後半部分即為實例文檔中與列表類型listOfMyIntType相一致的實例元素。
20003 15037 95977 95945 一些用於描述的參數能夠被應用到列表類型的定義中,它們是length、minLength、maxLength和enumeration。舉例來說,如果我們想定義一個列表,這個列表正好包含了六個美國的州名(SixUSStates)。首先從USState定義一個新的列表類型,稱為USStateList,然後通過限制USStateList只有六個項來導出SixUSStates。具體的定義可參見代碼11。
PA NY CA NY LA AK 類型為SixUSStates的元素必須有六個項,它們中的每一個項必須是一個枚舉類型USState的原子類型,在代碼11後半部分的實例文檔中就是一個具體的應用例子。
我們需要注意的是,從原子類型string可以導出一個列表類型,然而,在一個string中也許會帶有空格,而空格在一個列表類型實例中是作為分隔符使用的。所以當在使用基類型為string的列表類型時,應當格外小心。舉例來說,假設我們定義了一個length取值為3的列表類型,同時這個列表類型是基於類型string。下面由三個元素組成的列表是合法的:“Asie Europe Afrique”;而由三個元素這樣組成的列表是不合法的:“AsIE Europe Amérique Latine”。即使“Amérique Latine”在列表外可以作為單獨的一個字符串存在,但當它包含在列表中,在Amérique和Latine之間的空格使得第四個項被有效地生成了,因此後面的那個例子不符合只有三個項的列表類型定義。
聯合類型
應用原子類型和列表類型,一個元素或者屬性的值可以為一個或者多個原子類型(列表類型)的實例。與之相比較,一個應用聯合類型(Union Type)包含了多個原子類型或者列表類型,而應用了聯合類型的元素或是屬性的值可以是這些原子類型或列表類型中的一個類型實例。為了顯示這一點,我們建立一個用於表示美國州的、為兩個字母縮寫或者數字列表的聯合類型。zipUnion聯合類型由一個原子類型和一個列表類型構成的(參見代碼12)。
CA 95630 95977 95945 AK 當我們在定義一個聯合類型時,元素union的memberTypes屬性的值包含了聯合類型中所有類型的列表。現在,假定我們聲明了一個zipUnion類型的元素,稱為zips,zips元素有效的實例可參見代碼12。
此外,對於聯合類型而言,還有兩個描述性質的參數pattern和enumeration也可以應需要使用。