共用方式為


推斷簡單型別的規則

更新: November 2007

說明 XmlSchemaInference 類別如何推斷屬性和項目的資料型別。

XmlSchemaInference 類別會將屬性和項目的資料型別推斷為簡單型別。本節將說明可能的推斷型別、多種不同的值如何調節為單一型別,以及如何處理結構描述定義的 xsi 屬性。

推斷的型別

XmlSchemaInference 類別會將項目和屬性值推斷為簡單型別,並在產生的結構描述內包含型別屬性。所有推斷的型別皆為簡單型別。基底型別或 Facet 都不會納入結果結構描述中。

簡單型別介面圖形

在 XML 文件中發現的值會個別進行檢查。對某個值進行檢查時,即會推斷其型別。若在推斷屬性或項目的型別後,發現該屬性或項目的值不符合目前推斷的型別,XmlSchemaInference 類別就會針對每組規則提升型別。這些規則將在本主題稍後的<型別提升>一節中討論。

下列表格列出可能出現在結果結構描述中的推斷型別。

簡單型別

說明

boolean

True、False、0、1。

byte

介於 -128 與 127 之間的整數。

unsignedByte

介於 0 與 255 之間的整數。

short

介於 –32768 與 32767 之間的整數。

unsignedShort

介於 0 與 65535 之間的整數。

int

介於 –2147483648 與 2147483647 之間的整數。

unsignedInt

介於 0 與 4294967295 之間的整數。

long

介於 –9223372036854775808 與 9223372036854775807 之間的整數。

unsignedLong

介於 0 與 18446744073709551615 之間的整數。

integer

可能會以 "-" 開頭的有限數值。

decimal

含有 0 至 28 位精準度的數值。

float

其後可以為 "E" 或 "e" 的十進位數,最後再接上代表指數的整數值。十進位值可介於 -16777216 與 16777216 之間。指數值可介於 –149 與 104 之間。

浮點數允許用特殊的值代表無限值與非數字值。浮點數的特殊值包括:0、-0、INF、-INF、NaN。

double

與浮點數相同,不同之處在於十進位值可介於 -9007199254740992 與 9007199254740992 之間,而指數值可介於 –1075 與 970 之間。

雙精度浮點數允許用特殊的值代表無限值與非數字值。浮點數的特殊值包括:0、-0、INF、-INF、NaN。

duration

W3C 期間格式。

dateTime

W3C 日期時間格式。

time

W3C 時間格式。

date

年份值限定於 0001 與 9999 之間。

gYearMonth

W3C 的西曆月份與年份格式。

string

一或多個 Unicode 字元。

型別提升

XmlSchemaInference 類別會逐一檢查屬性與項目的值。若發現任何值,就會推斷最嚴格且不帶正負號的型別。若在推斷屬性或項目的型別後,發現新的值不符合目前推斷的型別,則推斷的型別會提升為目前推斷型別與新值均適用的新型別。XmlSchemaInference 類別在提升推斷的型別時,會考量先前的值。

例如,請考量下列兩份 XML 文件中的 XML 片段:

<MyElement1 attr1="12" />

<MyElement1 attr1="52344" />

當發現第一個 attr1 值時,attr1 的型別會根據值 12 被推斷為 unsignedByte。當發現第二個 attr1 時,其型別會根據目前推斷型別 unsignedByte 與目前的 52344 值被提升為 unsignedShort。

此時,請考量下列兩份 XML 文件中的 XML:

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

當發現第一個 attr2 值時,會根據 0 的值將 attr2 的型別推斷為 unsignedByte。當發現第二個 attr2 時,此型別會根據目前推斷型別 unsignedByte 和目前的 true 值提升為 string,因為在提升推斷型別時,XmlSchemaInference 類別會考量之前的值。然而,若不是像上述範例一樣在兩個不同的 XML 文件中發現兩個 attr2,而是在相同的 XML 文件中發現時,attr2 將會被推斷為 boolean。

http://www.w3.org/2001/XMLSchema-instance 命名空間中會忽略的屬性

下列結構描述定義的屬性會在結構描述推斷期間遭到忽略。

屬性

描述

xsi:type

若發現項目指定了 xsi:type,則 xsi:type 將被忽略。

xsi:nil

若發現項目具有 xsi:nil 屬性,表示其推斷結構描述中的項目宣告具有 nillable="true" 值。將 xsi:nil 屬性設為 true 的項目不能有子項目。

xsi:schemaLocation

如果發現 xsi:schemaLocation,即會加以忽略。

xsi:noNamespaceSchemaLocation

如果發現 xsi:noNamespaceSchemaLocation,則會加以忽略。

請參閱

概念

從 XML 文件推斷結構描述

推斷結構描述節點型別與結構的規則

其他資源

XML 結構描述物件模型 (SOM)