XML Schema 字串資料型別及約束詳解

小万哥丶發表於2024-05-24

字串資料型別用於包含字元字串的值。字串資料型別可以包含字元、換行符、回車符和製表符。

以下是模式中字串宣告的示例:

<xs:element name="customer" type="xs:string"/>

您文件中的一個元素可能如下所示:

<customer>John Smith</customer>

或者可能是這樣的:

<customer>       John Smith     </customer>

注意:如果使用字串資料型別,XML 處理器將不會修改值。


NormalizedString 資料型別

normalizedString 資料型別派生自 String 資料型別。

normalizedString 資料型別也包含字元,但 XML 處理器將刪除換行符、回車符和製表符。

以下是模式中 normalizedString 宣告的示例:

<xs:element name="customer" type="xs:normalizedString"/>

您文件中的一個元素可能如下所示:

<customer>John Smith</customer>

或者可能是這樣的:

<customer>     John Smith     </customer>

注意:在上面的示例中,XML 處理器將用空格替換製表符。


Token 資料型別

token 資料型別也派生自 String 資料型別。

token 資料型別也包含字元,但 XML 處理器將刪除換行符、回車符、製表符、前導和尾隨空格,以及多個空格。

以下是模式中 token 宣告的示例:

<xs:element name="customer" type="xs:token"/>

您文件中的一個元素可能如下所示:

<customer>John Smith</customer>

或者可能是這樣的:

<customer>     John Smith     </customer>

注意:在上面的示例中,XML 處理器將刪除製表符。

資料型別

請注意,以下所有資料型別均源自字串資料型別(除了字串本身)!

名稱 描述
ENTITIES
ENTITY
ID 表示 XML 中的 ID 屬性的字串(僅與模式屬性一起使用)
IDREF 表示 XML 中的 IDREF 屬性的字串(僅與模式屬性一起使用)
IDREFS
language 包含有效語言標識的字串
Name 包含有效 XML 名稱的字串
NCName
NMTOKEN 表示 XML 中的 NMTOKEN 屬性的字串(僅與模式屬性一起使用)
NMTOKENS
normalizedString 不包含換行符、回車或製表符的字串
QName
string 字串
token 不包含換行符、回車、製表符、前導或尾隨空格或多個空格的字串

字串資料型別的限制

可以與字串資料型別一起使用的限制:

  • 列舉
  • 長度
  • 最大長度
  • 最小長度
  • 模式(NMTOKENS、IDREFS 和 ENTITIES 不能使用此約束)
  • 空白

XSD 日期和時間資料型別

日期和時間資料型別用於包含日期和時間值。

日期資料型別

日期資料型別用於指定日期。

日期以以下形式指定:“YYYY-MM-DD”,其中:

  • YYYY 表示年份
  • MM 表示月份
  • DD 表示日期

注意:所有元件都是必需的!

以下是模式中日期宣告的示例:

<xs:element name="start" type="xs:date"/>

您文件中的元素可能如下所示:

<start>2002-09-24</start>

時區

要指定時區,您可以透過在時間後面新增“Z”來輸入 UTC 時間的時間,如下所示:

<start>09:30:10Z</start>

或者您可以透過在時間後面新增正數或負數時間來指定 UTC 時間的偏移量,如下所示:

<start>09:30:10-06:00</start>

<start>09:30:10+06:00</start>

日期時間資料型別

日期時間資料型別用於指定日期和時間。

日期時間以以下形式指定:“YYYY-MM-DDThh:mm:ss”,其中:

  • YYYY 表示年份
  • MM 表示月份
  • DD 表示日期
  • T 表示所需時間部分的開始
  • hh 表示小時
  • mm 表示分鐘
  • ss 表示秒

注意:所有元件都是必需的!

以下是模式中日期時間宣告的示例:

<xs:element name="startdate" type="xs:dateTime"/>

您文件中的元素可能如下所示:

<startdate>2002-05-30T09:00:00</startdate>

或者可能如下所示:

<startdate>2002-05-30T09:30:10.5</startdate>

時區

要指定時區,您可以透過在時間後面新增“Z”來輸入 UTC 時間的日期時間,如下所示:

<startdate>2002-05-30T09:30:10Z</startdate>

或者您可以透過在時間後面新增正數或負數時間來指定 UTC 時間的偏移量,如下所示:

<startdate>2002-05-30T09:30:10-06:00</startdate>

<startdate>2002-05-30T09:30:10+06:00</startdate>

持續時間資料型別

持續時間資料型別用於指定時間間隔。

時間間隔以以下形式指定:“PnYnMnDTnHnMnS”,其中:

  • P 表示週期(必需)
  • nY 表示年數
  • nM 表示月數
  • nD 表示天數
  • T 表示時間部分的開始(如果您要指定小時、分鐘或秒,則必需)
  • nH 表示小時數
  • nM 表示分鐘數
  • nS 表示秒數

以下是模式中持續時間宣告的示例:

<xs:element name="period" type="xs:duration"/>

您文件中的元素可能如下所示:

<period>P5Y</period>

上面的示例表示五年的週期。

或者可能如下所示:

<period>P5Y2M10D</period>

上面的示例表示五年、兩個月和 10 天的週期。

或者可能如下所示:

<period>P5Y2M10DT15H</period>

上面的示例表示五年、兩個月、10 天和 15 小時的週期。

或者可能如下所示:

<period>PT15H</period>

上面的示例表示 15 小時的週期。

負持續時間

要指定負持續時間,請在 P 之前輸入減號:

<period>-P10D</period>

上面的示例表示負 10 天的週期。

日期和時間資料型別

名稱 描述
date 定義日期值
dateTime 定義日期和時間值
duration 定義時間間隔
gDay 定義日期的一部分 - 日(DD)
gMonth 定義日期的一部分 - 月(MM)
gMonthDay 定義日期的一部分 - 月和日(MM-DD)
gYear 定義日期的一部分 - 年(YYYY)
gYearMonth 定義日期的一部分 - 年和月(YYYY-MM)
time 定義時間值

日期資料型別的限制

可以與日期資料型別一起使用的限制:

  • 列舉
  • 最大獨佔
  • 最大包容
  • 最小獨佔
  • 最小包容
  • 模式
  • 空白

XSD 數值資料型別

十進位制資料型別用於表示數值。

十進位制資料型別

十進位制資料型別用於指定數值。

以下是模式中十進位制宣告的示例:

<xs:element name="price" type="xs:decimal"/>

您文件中的元素可能如下所示:

<price>999.50</price>

或者可能如下所示:

<price>+999.5450</price>

或者可能如下所示:

<price>-999.5230</price>

或者可能如下所示:

<price>0</price>

或者可能如下所示:

<price>14</price>

整數資料型別

整數資料型別用於指定沒有小數部分的數值。

以下是模式中整數宣告的示例:

<xs:element name="price" type="xs:integer"/>

您文件中的元素可能如下所示:

<price>999</price>

或者可能如下所示:

<price>+999</price>

或者可能如下所示:

<price>-999</price>

或者可能如下所示:

<price>0</price>

數值資料型別

請注意,以下所有資料型別均源自十進位制資料型別(除了十進位制本身)!

名稱 描述
byte 一個帶符號的 8 位整數
decimal 一個十進位制值
int 一個帶符號的 32 位整數
integer 一個整數值
long 一個帶符號的 64 位整數
negativeInteger 只包含負值(..,-2,-1)的整數
nonNegativeInteger 只包含非負值(0,1,2,..)的整數
nonPositiveInteger 只包含非正值(..,-2,-1,0)的整數
positiveInteger 只包含正值(1,2,..)的整數
short 一個帶符號的 16 位整數
unsignedLong 一個無符號的 64 位整數
unsignedInt 一個無符號的 32 位整數
unsignedShort 一個無符號的 16 位整數
unsignedByte 一個無符號的 8 位整數

數值資料型別的限制

可以與數值資料型別一起使用的限制:

  • 列舉
  • 小數位數
  • 最大獨佔
  • 最大包容
  • 最小獨佔
  • 最小包容
  • 模式
  • 總位數
  • 空白

XSD 雜項資料型別

其他雜項資料型別包括布林型、base64Binary、hexBinary、float、double、anyURI、QName 和 NOTATION。

布林型資料型別

布林型資料型別用於指定真值或假值。

以下是模式中布林型宣告的示例:

<xs:attribute name="disabled" type="xs:boolean"/>

您文件中的元素可能如下所示:

<price disabled="true">999</price>

注意:布林型的合法值為 true、false、1(表示 true)和 0(表示 false)。

二進位制資料型別

二進位制資料型別用於表示二進位制格式的資料。

我們有兩種二進位制資料型別:

  • base64Binary(Base64 編碼的二進位制資料)
  • hexBinary(十六進位制編碼的二進位制資料)

以下是模式中十六進位制二進位制宣告的示例:

<xs:element name="blobsrc" type="xs:hexBinary"/>

任意 URI 資料型別

任意 URI 資料型別用於指定 URI。

以下是模式中任意 URI 宣告的示例:

<xs:attribute name="src" type="xs:anyURI"/>

注意:如果 URI 包含空格,請用 %20 替換。

雜項資料型別

名稱 描述
anyURI
base64Binary
boolean
double
float
hexBinary
NOTATION
QName

雜項資料型別的限制

可以與其他資料型別一起使用的限制:

  • 列舉(布林型資料型別不能使用此約束)
  • 長度(布林型資料型別不能使用此約束)
  • 最大長度(布林型資料型別不能使用此約束)
  • 最小長度(布林型資料型別不能使用此約束)
  • 模式
  • 空白

XSD 元素

元素 說明
all 指定子元素可以以任何順序出現。每個子元素可以出現 0 次或 1 次
annotation 指定用於模式註釋的頂級元素
any 允許作者使用模式未指定的元素擴充套件 XML 文件
anyAttribute 允許作者使用模式未指定的屬性擴充套件 XML 文件
appinfo 指定應用程式使用的資訊(必須位於註釋內部)
attribute 定義屬性
attributeGroup 定義用於複雜型別定義中的屬性組
choice 允許宣告中包含的元素中只有一個出現在包含元素內部
complexContent 定義包含混合內容或僅包含元素的複雜型別上的擴充套件或限制
complexType 定義複雜型別元素
documentation 在模式中定義文字註釋(必須位於註釋內部)
element 定義元素
extension 擴充套件現有的 simpleType 或 complexType 元素
field 指定用於定義標識約束中使用的值的 XPath 表示式
group 定義用於複雜型別定義中的元素組
import 將具有不同目標名稱空間的多個模式新增到文件中
include 將具有相同目標名稱空間的多個模式新增到文件中
key 指定作為鍵的屬性或元素值(在例項文件中作為唯一、非空且始終存在的)
keyref 指定屬性或元素值與指定鍵或唯一元素的值相對應
list 將簡單型別元素定義為值列表
notation 描述 XML 文件中非 XML 資料的格式
redefine 從外部模式中重新定義簡單和複雜型別、組和屬性組
restriction 在 simpleType、simpleContent 或 complexContent 上定義限制
schema 定義模式的根元素
selector 指定選擇一組元素以進行標識約束的 XPath 表示式
sequence 指定子元素必須按順序出現。每個子元素可以出現 0 次到任意次數
simpleContent 包含僅擴充套件或限制文字型別複雜型別或簡單型別的內容,並且不包含元素
simpleType 定義簡單型別並指定有關屬性或僅文字元素的值的約束和資訊
union 將簡單型別定義為指定簡單資料型別的值集合(聯合)
unique 定義元素或屬性值必須在範圍內是唯一的

XSD 資料型別的限制/特徵

約束 描述
enumeration 定義可接受值的列表
fractionDigits 指定允許的最大小數位數。必須等於或大於零
length 指定允許的精確字元或列表項數目。必須等於或大於零
maxExclusive 指定數值的上限(該值必須小於此值)
maxInclusive 指定數值的上限(該值必須小於或等於此值)
maxLength 指定允許的最大字元或列表項數目。必須等於或大於零
minExclusive 指定數值的下限(該值必須大於此值)
minInclusive 指定數值的下限(該值必須大於或等於此值)
minLength 指定允許的最小字元或列表項數目。必須等於或大於零
pattern 定義可接受的確切字元序列
totalDigits 指定允許的最大數字位數。必須大於零
whiteSpace 指定如何處理空格(換行符、製表符、空格和回車符)

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章