複雜型別都是通過限制或擴充套件其他的型別來派生,通過限制派生的新型別的值範圍是基型別值範圍的自己,新型別的所有例項對於基型別也是有效的,而擴充套件則可以為現有型別新增新的元素和屬性,基型別的例項對於擴充套件型別不一定有效。
從簡單型別或另乙個具有簡單內容的複雜型別派生複雜型別時,使用
xs:******content
元素。如果是擴充套件派生(泰安家屬性),則再
xs:******content
元素內部使用
xs:extension
元素。如果是限制派生,則在
xs:******content
元素內部使用
xs:restricton
元素。
如果複雜型別具有簡單內容,那麼所直接或間接派生於它的型別也必須具有簡單內容。
複雜內容包括
3中內容型別:純元素型別,混合型別和空元素型別。
當從具有複雜內容的另乙個複雜型別來派生複雜型別時,使用
xs:complexcontent
元素。如果是擴充套件派生(新增元素或屬性),則再
xs:complexcontent
元素內部使用
xs:extension
元素;如果是限制派生(限制基型別的內容模型或屬性),則再
xs:complexcontent
元素內部使用
xs:restriction
元素。
需要注意的是:
1.不能對乙個包含
all組的基型別進行擴充套件來新增新的元素(只新增屬性是可以的),這是因為
all組不能和其他的模型組一起使用,而且它必須出現在內容模型的頂部。
2.若想擴充混合內容,則需要在
xs:compelxtype
元素的mixed
設為true.
3.限制簡單內容的基型別必須是具有簡單內容的複雜型別,而不能是簡單型別。
4.限制空內容只能對基型別進行限制,派生型別也必須有空內容。例如:基型別中使用的是
xs:integer
,派生型別可變成
xs:positiveinteger。
我們可以使用
xsi:type
屬性可以直接為元素制定及型別,
xsi:type
屬性是schema
例項命名空間
的一部分。因此在使用
type
屬性前,宣告
schema
例項命名空間。
使用替換組,允許在內容模型中宣告的某個元素被其他元素所替換。替換組由頭元素和替換成員組成,頭元素和他的替換元素都必須作為全域性元素宣告,替換成員必須和頭元素有相同的型別,或者他們的型別是頭元素派生型別。頭元素是普通的全域性元素,但他的替換元素則需使用乙個特殊的屬性
substitutiongroup
,該屬性用於指定要替換的頭元素的名字。
可以使用
xs:element
和xs:complextype
元素的abstract
屬性設定為
true,
來將元素或者型別宣告成抽象的。抽象的元素和型別不能在例項文件中使用。將乙個元素宣告成抽象的,就需要使用替換組,在例項文件中用替換組成員來代替抽象元素。將乙個元素對應的型別定義宣告為抽象的,那麼該元素所有例項必須使用
xsi:
type
屬性類指定乙個非抽象的派生型別。
可以使用
xs:complextype
元素的final
屬性來控制型別的派生,使用
xs:block
屬性來控制再試文件中使用派生元素。
除了在xs:complextype
元素使用
block
屬性,還可以在
xs:element
元素上使用,他的取值除了包含
xs:complextype
元素的block
屬性外,還可以包含值
substitution
,表示阻止替換組中的成員來替換該元素。
Entity Framework 複雜型別
為了說明什麼是複雜屬性,先舉乙個例子。public class companyaddress public string companyname public string streetaddress public string city public string state public str...
Entity Framework 複雜型別
為了說明什麼是複雜屬性,先舉乙個例子。public class companyaddress public string companyname public string streetaddress public string city public string state public str...
基礎型別和複雜型別
基礎型別 number string boolean undefined null 引用型別 object array function 基本型別和複雜型別區別 解決基礎型別和複雜型別的賦值區別的方法 var arr a b c 希望brr和arr一樣,但是不要共用乙個位址 1.遍歷乙個乙個放進去 ...