UML 至 XSD 轉換

目錄

總覽

這項轉換接受 UML 套件作為其來源,並在套件內將適當的類別轉換成綱目的元素來產生 XML 綱目。產生的綱目儲存在名稱為 schema 的資料夾中,此資料夾是您在專案中所指定的轉換目標。檔案包含的綱目名稱和套件的名稱相同,但是副檔名為 .xsd

例如,假設您的 UML 套件名稱為 PurchaseOrder,其中包含的類別名稱為 Address。當您以此套件作為其來源來執行轉換時,會產生下列 XML 綱目。

如果您選取 UML 模型(至少有一個套件)作為來源,在具有造型 <<XSDProfile::schema>> 或關鍵字 schema 的模型中,這項轉換會為每個套件產生 XML 綱目。 如果您將轉換內容處理未標示的套件值設定為 True,轉換會為每個套件產生 XML 綱目。

目錄

瀏覽模型範例

軟體中隨附一組 UML 模型範例,可作為 UML 至 XSD 轉換的來源。安裝「UML 至 XSD」轉換之後,需要將範例從安裝目錄複製到工作區中。比方說,如果已在 RSA/eclipse 中安裝軟體,則範例會在下列資料夾中:RSA/eclipse/plugins/com.ibm.xtools.transform.samples.uml2.xsd/examples。 請執行下列動作在工作區中複製範例:

  1. 建立簡式專案:檔案 > 新增 > 專案...,再選取簡式 > 專案,再按下一步
  2. 設定專案名稱(例如 uml2xsd.examples),再按一下完成
  3. 複製下列目錄,<install-dir>/rsa/eclipse/plugins/com.ibm.xtools.transform.uml2.xsd/examples,其中 <install-dir> 是您安裝 Rational Software Development Platform 的位置。
  4. 開啟一個或多個模型。連按兩下模型,這時套件會開啟相關聯的圖型來顯示模型、產生的綱目以及用來產生綱目的各種造型內容和轉換內容。

附註:開啟模型範例時您可能會看到一個對話框,說明模型正在使用舊版的 XSDProfile,並詢問您是否要移轉至新的設定檔。您應該按一下來移轉至新版本的設定檔。

目錄

執行轉換

如果要執行這項轉換:

  1. 在您的工作區中建立含有一個或多個套件的 UML 模型。在每一個套件中建立幾個 UML 類別。
  2. 請選擇性地執行下列動作:

    如果您要建立非一般 XML 綱目的 UML 模型,這些步驟是必要的。如需在 UML 中建立 XML 綱目模型的相關資訊,請參閱在 UML 中建模 XML 綱目:最佳實務練習一節。

  3. 如果您不是在「建模」視景,請切換至「建模」視景。
  4. 用滑鼠右鍵按一下模型或套件,再按一下轉換 > 執行轉換 > UML 至 XSD
  5. 在「執行轉換」視窗的目標頁面上,指定要在其中寫入輸出 XSD 檔的專案。
  6. 按一下執行

這時轉換會產生 XSD 綱目,並將它們放在指定專案的資料夾 schema 中。使用「導覽器」視圖來檢查產生的綱目。

目錄

使用 XSD 範本模型

您也可以使用 XSD 範本模型建立 UML 模型。這樣做的好處是已匯入必要的模型程式庫 XSDDataTypes, 且 XSD 設定檔已套用至套件。

  1. 建立 UML 模型。
    1. 檔案 > 新增 > 專案 >UML 專案
    2. UML 建模專案對話框中輸入專案名稱,再按下一步
    3. 在出現的對話框中選取 XSD 模型,為模型設定適當的名稱。(如果是 RSA/RSM 版本,可能會在「範本」窗格看到兩個 XSD 模型的實例。這個已知的錯誤在較新版本的 RSA/RSM 中已經修正。選取兩個「XSD 模型」項目其中一個就可以繼續運作)。
    4. 按一下完成
  2. 這個新建的 UML 模型是以模型範本為基礎,而且將會匯入必要的模型程式庫。現在,您需要建立一或多個套件。作法如下:
    1. 開啟套件 XSD Model Building Block
    2. 將套件 ${schema.name} 拖放到根模型上。  這樣會建立已套用 XSD 轉換設定檔的套件。
    3. 使用尋找/取代將套件的名稱從 ${schema.name} 變更為較適當的名稱。
    4. 將必要的 UML 類別移入套件。
  3. 如果您不是在「建模」視景,請切換至「建模」視景。
    1. 用滑鼠右鍵按一下模型或套件,再按一下轉換 > 執行轉換 > UML 至 XSD
    2. 在「執行轉換」視窗的目標頁面上,指定要在其中寫入輸出 XSD 檔的專案。
    3. 按一下執行

這時轉換會產生 XSD 綱目,並將它們放在指定專案的資料夾 schema 中。使用「導覽器」視圖來檢查產生的綱目。

目錄

轉換詳細資料

轉換來源

這項轉換接受 UML 模型做為來源,此模型至少含有一個套件或一或多個 UML 套件。

轉換目標

這項轉換接受專案作為其目標。

目錄

轉換內容

這項轉換定義下列轉換內容:

內容 說明
目標名稱空間 轉換產生的綱目之目標名稱空間。這個內容的值是字串,例如,http://www.ibm.com/SampleXSDTransformation
目標名稱空間字首 轉換所產生綱目的目標名稱空間之字首。這個內容的值是字串,例如,sxt
處理不具造型或關鍵字的 UML 類別

這個內容決定如果類別沒有任何相關聯的造型或關鍵字時,轉換程序是否處理 UML 類別。

這個內容的值可以是 TrueFalse。預設值設為 True,且轉換會在最上層的套件中處理所有類別。 (轉換目前尚無法處理巢狀套件)。

如果不需要在套件中的所有類別上套用轉換,您必須將值設為 false, 並在您要轉換的類別上,套用 XSDProfile 中適當的模板或關鍵字。

處理不具造型或關鍵字的 UML 套件

這個內容決定如果類別沒有任何相關聯的造型或關鍵字時,轉換程序是否處理 UML 套件。

這個內容的值可以是 TrueFalse。預設值設為 True,且轉換會處理所有在最上層的套件。(目前轉換並不處理巢狀套件)。

如果您不需要將這項轉換套用至模型中的所有最上層套件,則需將其值設定為 False,並且從 XSDProfile 套用適當的造型 <<schema>> 或關鍵字 schema 到要轉換的套件中。

隱含地將巢狀類別轉換至匿名類型

當巢狀類別之間沒有明確的關聯時,這個內容會決定轉換是否將巢狀類別轉換成匿名類型。

這個內容的值可以是 TrueFalse。預設值為 False,而且只有巢狀類別和它之間有關聯時,這項轉換才會將巢狀類別轉換成匿名類型。如果值設為 true, 則所有巢狀類別會轉換成具有 XSD 類型的匿名類型,而 XSD 類型對應的巢狀類別含有這些匿名類型的元素。

將這個內容的值設為 true 來隱含地產生匿名類型有諸多限制,因此不建議採用。

目錄

XSD 設定檔

「UML 至 XSD」轉換支援在 UML 中非一般 XML 綱目的建模,使用一個 UML 建構的小子集來代表 XML 綱目元素。這個子集包含下列 UML 元素:類別內容一般化關聯相依關係。 若要使用此子集來代表 XML 綱目元素,例如簡式類型複數類型屬性元素可重覆使用的群組等, 您必須將 XSD 設定檔套用至來源 UML 模型, 並使用此設定檔中的模板來標示,同時將模板的內容設為適當的值。

下列類別圖顯示 XSD 設定檔的 UML 模型。

下表說明造型及其內容。

造型 meta 類別延伸 內容 註解
annotation Comment kind
language
source

註解會轉換成應用程式資訊或說明文件附註。

內容 kind 決定附註類型:documentationappinfo。 內容 languagesource 分別指定說明文件的自然語言和進一步說明文件的來源。

attribute Property (of Class) form
use

此 UML 內容會轉換成複數類型中的屬性,如果內容的類型為簡式類型且對應關係為 [0..1],則會轉換成屬性群組中的屬性。

造型內容 form 決定在實例文件中是否必須定義屬性名稱。其值可以是 qualifiedunqualifieddefault 其中之一。如果是 default,則值預設為 schemaattributeFormDefault, 預設值為 unqualified

內容 use 決定該屬性是選用性的或必要的。值可以是 optionalprohibitedrequired。依預設,它的值是 optional。 在目前的實作中,已忽略值 prohibited

attributeGroup Class
此類別轉換為屬性群組。
complexType Class anonymous
block
final
modelGroup
maxOccurs
minOccurs
mixed

此類別轉換為複式類型。

內容 anonymous 決定是否在綱目中建立最上層複數類型宣告。其值可以是 TrueFalse。如果是 True,則不會產生任何類型宣告,而且這個類別的任何參照都會轉換為屬性或使用匿名類型作為屬性或元素類型的元素宣告。依預設,值為 false

內容 block 決定是否封鎖類型替代。它可以有下列值其中之一:#allextensionrestriction 或一份以空格區隔的 extensionrestriction 的清單。值 #all 會防止任何衍生類型取代這個類型,extension 會防止這個類型的任何延伸取代這個類型,restriction 會防止這個類型的任何限制取代這個類型。清單 "extension restriction",和 #all 有相同的的效果。如果未指定 block 特性, 則值預設為 schemablockDefault 特性。

內容 final 決定是否可從這個類型衍生出其他類型。其值可以是 #all 或是一份(extensionrestriction)的清單。如果它的值是 #all,則不允許衍生任何類型。如需更明確的控制,值可以設為關鍵字 restrictionextension 。這個值是綱目finalDefault 之預設值。

內容 modelGroup 決定類型的內容模型。modelGroup 的值可以是 allchoicesequence。預設值為 sequence

限制 如果 modelGroup 的值為 all, 則 anonymous 的值必須設為 false。 否則違反限制。

minOccursmaxOccurs 的值決定 sequencechoice 群組在複數類型中出現的最小和最大次數。For an 以 all 模型群組而言,maxOccurs 必須為 1minOccurs 只能為 01

boolean 內容 mixed 指定複數類型是否容許混合內容。 依預設,值為 false

element Property (of Class) block
final
表單
nillable

這個內容會轉換為元素

內容 final 只能套用至廣域元素,不能套用至區域元素。此內容決定是否可從這個類型衍生出其他類型。其值可以是 #all 或是一份 (extension | restriction) 的清單。如果它的值是 #all,則不允許衍生任何類型。如需更明確的控制,值可以設為關鍵字 restrictionextension 。 這個值是綱目finalDefault 之預設值。

stereotype 內容 form 決定實例文件中是否必須完整的元素名稱。 其值可以是 qualifiedunqualifieddefault 其中之一。 如果是 default, 則值會預設為 schemaelementFormDefault, 預設值為 unqualified

boolean 內容 nillable 決定此元素的實例中是否可以使用 xsi:nil。 依預設,值為 false

enumeration Class anonymous

如果類別和另一個代表簡式類型的類別有一般化關係,則此類別會轉換為 XSD 列舉。

內容 anonymous 決定是否在綱目中建立具有列舉外觀 (facet) 的最上層簡式類型宣告。其值可以是 TrueFalse。如果是 True,則不會產生任何類型宣告,而且這個類別的任何參照都會轉換為屬性或使用匿名類型作為屬性或元素類型的元素宣告。依預設,值為 false

廣域 Class

具有此造型的類別會轉換為最上層元素或屬性宣告。此類別必須只有一個內容。如果此內容有一個 <<attribute>> 造型或關鍵字,則類別會轉換為最上層屬性。否則,會變成最上層元素。

元素或屬性的名稱同於內容的名稱,且類型同於內容的類型。 

listOf Dependency
相依關係的用戶端會轉換為 XSD 清單,而該清單的項目類型就是相依關係的供應者。如果兩個類別都代表簡式類型,那麼它們之間只能有一個此類的相依關係。
modelGroup Class anonymous
modelGroup

類別會轉換成具有 sequence 內容模型的可重覆使用的具名模型群組。

內容 anonymous 決定是否在綱目中建立最上層群組宣告。其值可以是 TrueFalse。如果是 True,就不會產生任何群組宣告,而且此類別的全部參照都會轉換為巢狀模型群組。如果值為 False,類別的參照就會轉換為模型群組參照。依預設,值為 false

內容 modelGroup 決定群組的內容模型。modelGroup 的值可以是 allchoicesequence。預設值為 sequence

限制 如果 modelGroup 的值為 all, 則 anonymous 的值必須設為 false。 否則違反限制。

schema Package attributeFormDefault
blockDefault
elementFormDefault
finalDefault
targetNamespace
targetNamespacePrefix

此套件和其內容會轉換為 XSD 綱目。套件的名稱會變成綱目(檔案)的名稱。

內容 attributeFormDefault 指定區域屬性宣告是否應該使用完整名稱。其值可以是 qualifiedunqualified。 預設值為 unqualified

內容 blockDefault 設定複數類型及元素宣告中使用的 block 屬性的預設值。 block 屬性決定是否封鎖元素替代或類型替代。可以有下列的值:#all 或(extensionrestrictionsubstitution)其中一或多個值的空格分隔清單。

內容 elementFormDefault 指定區域元素宣告是否應該使用完整名稱。其值可以是 qualifiedunqualified。預設值為 unqualified

內容 finalDefault 設定用於複數類型、簡式類型和元素宣告的 final 屬性之預設值。 final 屬性決定是否禁止類型衍生。 可以有下列的值:#all 或(extensionrestrictionsubstitutionlistunion)其中一或多個值的空格分隔清單。

如果您設定 targetNamespacetargetNamespacePrefix 的值, 這些值將置換您在相對應的轉換內容目標名稱空間目標名稱空間字首中分別設定的值。

simpleType Class anonymous
final
fractionDigits
length
maxExclusive
maxInclusive
maxLength
minExclusive
minInclusive
minLength
pattern
totalDigits
whiteSpace

如果類別與 XSD 內建資料類型、另一個簡式類型或 XSD 列舉類型之間具有一般化關係,此類別會轉換為簡式類型。

內容 anonymous 的值可以是 truefalse。 如果是 True,此類別會被視為匿名類型,而且不會產生任何最上層類型宣告。

內容 final 決定是否可從這個類型衍生出其他類型。 值可以是 #all 或  (extensionrestrictionlistunion)清單。 如果它的值是 #all,則不允許衍生任何類型。如需更特定的控制,可將此值設定為 restrictionextensionlistunion 任一關鍵字的以空格區隔之清單。

其他的內容代表由 XSD 綱目所定義的外觀 (facet)。您可以使用這些外觀來指定值的有效範圍、限制值的長度和精確度、指定有效值必須符合的正規表示式、或指定如何處理從內建 XSD 類型的限制所衍生的簡式類型中的空格。 如需詳細資料,請參閱表格外觀 (Facet) 的意義

請注意,並非所有的外觀都適用於全部的簡式類型。例如,對於從 stringnormalizedStringtoken 衍生的簡式類型,適用的外觀為 lengthminLengthmaxLengthpatternwhitespace。如需詳細資料,請參閱表格簡式類型和適用的外觀 (Facet)

unionOf Dependency
相依關係的用戶端會轉換為 XSD 聯集,而該聯集的相依關係供應者就是其成員之一。代表簡式類型的類別對於不同的(簡式類型)類別可以有多個此類的相依關係。
wildcard Property (of Class) processContents
namespace

此 UML 內容會轉換成元素萬用字元。如果內容除了有 wildcard 之外,還有關鍵字 attribute 或模板 <<attribute>>,則會轉換成屬性萬用字元。

內容 processContents 決定驗證取代屬性或元素的嚴格度。如果是 skip,綱目處理器就不會執行驗證。如果是 lax,綱目處理器會驗證找得到宣告的,或無效時會發生錯誤的屬性或元素。如果是 strict,綱目處理器會試圖尋找與名稱空間相關聯的綱目文件,並驗證所有的屬性或元素。依預設,值會設為 strict

內容 namespace 指定取代屬性或元素可能在哪些名稱空間。 容許的值是下列:anyURI##targetNamespace##local##any##other 清單的其中之一。如果是 ##any,取代元素或屬性可以在任何名稱空間,或不在名稱空間中。如果是 ##other,取代元素或屬性可以在除了文件的目標名稱空間以外的任何名稱空間中,但必須是在名稱空間中。如果綱目文件沒有目標名稱空間,取代元素或屬性可以有任何名稱空間,但必須只有一個。否則,它可以是以空白區隔的清單,其值包含任何或全部下列項目:##targetNamespace#local 或特定的名稱空間。##targetNamespace 指出取代元素或屬性可能在綱目文件的目標名稱空間中,而 ##local 指出取代元素或屬性可能不在名稱空間中。

目錄

關鍵字

如果您建模的綱目不需要在小詳細資料中指定其元素,您可能會想要使用關鍵字來代替造型。下表說明「UML 至 XSD」轉換所支援的關鍵字。

關鍵字 適用的 UML 元素 註解
annotation 註解 註解會轉換成 "appinfo" 或 "documentation" 附註。
attribute Property (of Class) 如果內容的對應關係是 [0..1],此內容會轉換成複數類型中的屬性。
attributeGroup Class 此類別轉換為屬性群組。
complexType Class 此類別轉換為複式類型。
element Property 此內容會轉換成複數類型的元素。
enumeration Class 如果類別和另一個代表簡式類型的類別有一般化關係,則此類別會轉換為 XSD 列舉。
global Class

具有此關鍵字的類別會轉換為最上層元素或屬性宣告。此類別必須只有一個內容。如果此內容有一個 <<attribute>> 造型或關鍵字 attribute,則類別會轉換為最上層屬性。否則,會變成最上層元素。

元素或屬性的名稱是衍生自內容的名稱,而類型則是衍生自內容的類型。

listOf 代表兩個簡式類型的兩個類別之間的相依關係 相依關係的用戶端會轉換為 XSD 清單,而該清單的項目類型就是相依關係的供應者。如果兩個類別都代表簡式類型,那麼它們之間只能有一個此類的相依關係。
modelGroup Class 此類別會轉換為具有 sequence 內容模型的可重複使用之名稱模型群組。
schema Package

此套件和其內容會轉換為 XSD 綱目。套件的名稱會變成綱目(檔案)的名稱。

如果使用關鍵字 schema,則需要分別將轉換內容目標名稱空間目標名稱空間字首設為適當的值,以指定目標名稱空間和目標名稱空間字首。

simpleType Class 如果此類別與 XSD 內建資料類型或另一個簡式類型有一般化關係,則類別會轉換為簡式類型。
unionOf 代表兩個簡式類型的兩個類別之間的相依關係 相依關係的用戶端會轉換為 XSD 聯集,而該聯集的相依關係供應者就是其成員之一。代表簡式類型的類別對於不同的(簡式類型)類別可以有多個此類的相依關係。
wildcard Property

此 UML 內容會轉換成元素萬用字元。如果內容除了有 wildcard 之外,還有關鍵字 attribute,則會轉換成屬性萬用字元。

目錄

模型程式庫:XSD 內建資料類型

「XML 綱目建議」中內建有四十四種簡式類型。這些簡式類型代表一般資料類型,例如字串、數字、日期與時間值,也包含 XML 1.0 中屬性類型的舊版類型。XSD 也提供十二種限制 Facet,可以用來指定簡式類型值的有效範圍、限制值的長度和精確度、 列舉有效值的清單,或指定有效值必須符合的正規表示式。

您可以將外觀 (facet) 設定為適當的值,來限制從內建類型或其他簡式類型衍生新的簡式類型。如果要採取這種方式,UML 模型中必須可以使用內建類型的表示法。

內建簡式類型被建模為類別,並在名稱為 XSDDataTypes 的模型程式庫中成為可用。 您需要在模型中匯入 XSDDataTypes 程式庫才能存取這些類型。若要匯入 XSDDataTypes 模型程式庫,請在「模型瀏覽器」中用滑鼠右鍵按一下模型的根(模型本身),選取匯入模型程式庫...,再從下拉清單選擇 XSDDataTypes

若要定義新的簡式類型(使用者定義簡式類型),您需要特製化 XSDDataTypes 模型中的適當類別,並使用 <<simpleType>> 造型的內容來限制定義的類型值。例如:

您可以將 <<simpleType>>maxInclusive 內容設為(假設) 100, 藉以將 Quantity 的最大值限制為 100

目錄

UML 至 XSD 對映規則

在 UML 中建模 XML 綱目的目的是要建立 XML 綱目的視覺化表示法,然後使用「UML 至 XSD」轉換來產生綱目。根據分析顯示可以使用 UML 模型元素來代表 XML 綱目的最基本功能。下表顯示在 UML 呈現的概念和 XML 綱目定義 (XSD) 的相對應概念之間的對映子集。

UML 概念 XML 綱目概念
Package 具有字首的單一名稱空間
Class 類型和可重複使用的群組
  • 複數類型和符合的元素宣告
  • 簡式類型
  • 屬性群組、名稱模型群組和替代群組
列舉 具有列舉 Facet 的 XSD 字串簡式類型的限制等同於 UML 列舉文字。 請注意,這不同於從 XSD 設定檔套用 <<enumeration>> 模板的 UML 類別。使用造型 UML 類別容許更多一般的 XSD 列舉。
類別的內容 元素和複數類型的屬性
關聯(聚集) 內含元素(複數類型)的子元素
一般化 類型衍生
  • 依複數類型的延伸來衍生
  • 依複數類型的限制來衍生
  • 依簡式類型的限制來衍生
物件身分識別 使用者指定的鍵值欄位或明確的身分識別機制(尚未實作)。

對映規則:套件 -> XSD 綱目

UML 元素 XSD 元素 註解
具有模板 <<schema>> 的套件 具有目標名稱空間和目標名稱空間字首的綱目 套件中的內容會製作 .xsd 檔案中的綱目。綱目檔的名稱和套件檔案的名稱相同。

<<schema>> 模板的內容 attributeFormDefault 和 elementFormDefault, 可以在產生的綱目上用來指定 attributeFormDefault 和 elementFormDefault 屬性。

如果使用關鍵字 schema 而非模板, 則必須分別設定 轉換內容目標名稱空間目標名稱空間字首的值,藉此提供目標名稱空間及其字首。

對映規則:類別 -> 複數類型、內容 -> 元素和內容 -> 屬性

UML 元素 XSD 元素 註解
具有造型 <<complexType>> 的類別 複數類型 如果造型內容 modelGroup 並未設定為下列可能的值之一:allchoicesequence,則會產生具有 sequence 模型群組的複數類型。
具有關鍵字 complexType 的類別 複數類型 產生具有 sequence 模型群組的複數類型。
不具有關鍵字或造型的類別 複數類型 只有當轉換內容 Process unmarked class 設為 true 時,才會產生複數類型。 否則,將會忽略類別。如果產生複數類型,其模型群組會設為 sequence
Property 複數類型的元素
具有 <<attribute>> 造型或關鍵字 attribute 的內容。 複數類型的屬性

只有內容的類型為簡式類型,而且對應關係為 [0..1] 時,內容才會轉換為屬性。否則會轉換成元素。

如果您提供預設值,該內容會轉換為具有預設值的選用性屬性。如果您使內容成為唯讀並提供預設值,則它會轉換成值固定為預設值的屬性。在這兩個例子中,您需要將內容的對應關係設定為 [0..1]。

您可以使用 <<attribute>> 造型的內容 use,來使屬性成為選用性的或必要的。如果將 use 的值設為 required, 且提供預設值並將內容設成唯讀,則會忽略指定的預設值和唯讀設定。

對映規則:具有 <<global>> 的類別 -> 廣域元素或屬性

UML 元素 XSD 元素 註解
具有模板 <<global>> 的類別, 或含有一個內容的關鍵字 "global"。 廣域(最上層)元素或屬性。

此類別必須只有一個內容。如果此內容有一個 <<attribute>> 造型或關鍵字 attribute,則類別會轉換為最上層屬性。否則會變成最上層元素。

元素或屬性的名稱是衍生自內容的名稱,而類型則是衍生自內容的類型。


對映規則:<<global>> 類別之間的一般化關係 -> 替代群組

UML 元素 XSD 元素 註解
在已套用模板 <<global>> 的類別之間的一般化關係。 替代群組,由具有 <<global>> 模板的類別所代表的廣域元素組成。 若要組成廣域元素的替代群組,類型(類別)本身必須具有相等的一般化關係。

在下列範例中,廣域元素 dress 是替代群組的開頭,而廣域元素 shirt 和 trouser 是成員。 請注意,這些元素的類型具有一般化關係,此一般化關係等於廣域元素之間的一般化關係。


對映規則:類別 -> 簡式類型

UML 元素 XSD 元素 註解
具有造型 <<simpleType>> 或關鍵字 simpleType 的類別

使用者定義的簡式類型。

內建簡式類型或另一個使用者定義簡式類型的限制

內建簡式類型或另一個使用者定義列舉類型或 XSD 列舉類型必須有一般化關係。

對映規則:類別 -> XSD 列舉

UML 元素 XSD 元素 註解
具有造型 <<enumeration>> 或關鍵字 enumeration 的類別 XSD 列舉。
指定列舉 Facet 的簡式類型
內建簡式類型或另一個使用者定義簡式類型必須有一般化關係。

對映規則:UML 列舉 -> XSD 列舉

UML 元素 XSD 元素 註解
UML 列舉 XSD 列舉,具有限制基礎 xsd:string 和具有指定列舉外觀 (facet) 的簡式類型。 對任何其他簡式類型不需要任何一般化。

對映規則:類別 -> 可重複使用的群組:群組模型和屬性模型

UML 元素 XSD 元素 註解
具有造型 <<modelGroup>> 的類別 名稱模型群組 如果造型內容 modelGroup 並未設定為下列可能的值之一:allchoicesequence,則會產生具有 sequence 模型群組的模型群組。
具有關鍵字 modelGroup 的類別 名稱模型群組 產生具有 sequence 模型群組的名稱模型群組。
具有造型 <<attributeGroup>> 或具有關鍵字 attributeGroup 的類別 屬性群組 提供可轉換為簡式類型且具有對應關係 [0..1] 的類型給類別的每一個內容,則其會轉換為屬性群組中的成員。否則,將會忽略內容。

因為內容只能轉換為 XSD 屬性,所以並不嚴格要求將造型 <<attribute>> 套用到內容中。不過,如果您想要為屬性指定其他內容(例如 requiredform 等等),您需要套用 <<attribute>> 造型,並將造型的內容設為適當的值。

對映規則:類別衍生

UML 元素 XSD 元素 註解
類別 A 衍生自其他類別 B。

複數類型 B 是複數類型 A 的複式內容延伸。

類別 A 或類別 B 可以有模板 <<complexType>> 或關鍵字 complexType

類別 A 和類別 B 兩者都不可以有 "all" 模型群組或內容模型。試圖延伸具有 "all" 模型群組的類別會造成違反限制。

類別 B 不能有造型 <<modelGroup>><<attributeGroup>>,也不能有關鍵字 modelGroupattributeGroup。 也就是說,複數類型不能延伸模型群組或屬性群組。

類別 A 衍生自另一個具有 <<simpleType>> 模板或關鍵字 simpleType 的類別 B。

複數類型 B 是簡式類型的簡式內容延伸。類別 B 的任何內容會變成簡式內容延伸的屬性。

衍生自簡式類型的唯一目的是要新增屬性。因此,類別 B 的內容類型必須為簡式類型,且對應關係必須為 [0..1]。 否則,模型會違反限制。

對映規則:關聯 -> 複數類型元素

UML 元素 XSD 元素 註解
關聯(導向或複合聚集)類別 A -> 類別 B 在複數類型 A 中類型為複數類型 B 的元素 元素名稱是由關聯端點的角色名稱所決定的。

對映規則:內容 -> 複數類型元素

UML 元素 XSD 元素 註解
類別 A 包含一或多個類型為類別 B 的內容 在複數類型 A 中類型為複數類型 B 的元素 元素名稱是由內容的名稱所決定的。

對映規則:關聯 -> 模型群組參照和屬性群組參照

UML 元素 XSD 元素 註解

從類別 A 至具有 <<modelGroup>> 模板的類別 B 的關聯(導向關聯或複合聚集)。

類別 A -> 具有 <<attributeGroup>> 模板的類別 C。

複數類型 A 中的模型群組參照。

複數類型 A 中的屬性群組參照。


從具有 <<modelGroup>> 模板的類別 A 至也有 <<modelGroup>> 模板的類別 B 的關聯(導向關聯或複合聚集) 類別 A 代表的模型群組中的模型群組參照
從具有 <<attributeGroup>> 模板的類別 A 至也有 <<attributeGroup>> 模板的類別 B 的關聯(導向關聯或複合聚集) 類別 A 代表的屬性群組中的屬性群組參照。



對映規則:相依關係 -> 清單和聯集類型

UML 元素 XSD 元素 註解
在兩個簡式類型之間具有造型 <<listOf>> 或關鍵字 listOf 的相依關係

清單類型。

相依關係的用戶端會轉換為簡式類型,也就是一份相依關係供應者的清單

相依關係的用戶端和供應者都必須是簡式類型,而且兩者之間只可以有一個 <<listOf>> 相依關係。 這兩個類別之間不能有其他任何關係。

在用戶端簡式類型和一或多個供應者之間,具有造型 <<unionOf>> 或關鍵字 unionOf 的相依關係 聯集類型。

相依關係的用戶端會轉換為簡式類型,成為相依關係供應者的聯集。

相依關係的用戶端和供應者都必須是簡式類型,而且兩者之間可以有一或多個 <<unionOf>> 相依關係。在這些類別之間不應有其他任何關係。

目錄

對映規則:類別 -> 匿名複數類型

UML 元素 XSD 元素 註解

具有模板 <<complexType>> 和模板內容 anonymous = true 的類別 A, 且另一個代表複數類型的類別 B 參照此類別。

類別 A 會轉換成匿名複數類型。 

此參照會轉換為複數類型(由類別 B 代表)的屬性或元素。元素或屬性的類型由這個匿名類型定義。

元素或屬性名稱由關聯端點的角色名稱或內容名稱來決定。

由於類別 A 指定為匿名,此類別不會產生最上層複數類型宣告。

對映規則:類別 -> 匿名簡式類型

UML 元素 XSD 元素 註解
類別 A 具有造型 <<simpleType>> 和造型內容 anonymous = true,而且被另一個代表複數類型的類別 B 所參照

類別 A 會轉換成匿名簡式類型。 

此參照會轉換為複數類型(由類別 B 代表)的屬性或元素。元素或屬性的類型由這個匿名類型定義。

元素或屬性名稱由關聯端點的角色名稱或內容名稱來決定。

由於類別 A 指定為匿名,此類別不會產生最上層簡式類型宣告。

對映規則:類別 -> 匿名列舉

UML 元素 XSD 元素 註解
類別 A 具有造型 <<enumeration>> 和造型內容 anonymous = true,而且被另一個代表複數類型的類別 B 所參照

類別 A 會轉換成匿名列舉。 

此參照會轉換為複數類型(由類別 B 代表)的屬性或元素。元素或屬性的類型由這個匿名類型定義。

元素或屬性名稱由關聯端點的角色名稱或內容名稱來決定。

由於類別 A 指定為匿名,此類別不會產生具有列舉 Facet 的最上層簡式類型宣告。

對映規則:參照至匿名模型群組 -> sequence 和 choice 群組的巢狀結構

UML 元素 XSD 元素 註解

類別 A 與具有模板 <<modelGroup>> 和內容值 anonymous = true 的類別 B 之間的關聯(導向或複合聚集)。

代表類別 A 的複數類型,包含類別 B 代表的具名模型群組的模型群組。

只有當 A 和 B 都沒有內容模型 all 時,這個對映才有效。
在具有造型 <<modelGroup>> 的類別 A 和具有造型 <<modelGroup>> 的類別 B 之間,且內容 anonymous 的值等於 true 的關聯(導向或複合聚集)。 代表類別 A 的名稱模型群組中包含代表類別 B 的名稱模型群組之模型群組。 只有當 A 和 B 都沒有內容模型 all 時,這個對映才有效。

上述模型群組的參照也可以使用類別內容來建立模型。

UML 元素 XSD 元素 註解
類別 A 包含的內容之類型是具有造型 <<modelGroup>> 的類別 B,且內容 anonymous 的值等於 true 代表類別 A 的複數類型中包含代表類別 B 的名稱模型群組之模型群組。 只有當 A 和 B 都沒有內容模型 all 時,這個對映才有效。
具有造型 <<modelGroup>> 的類別 A 包含的內容之類型是具有造型 <<modelGroup>> 的類別 B,且內容 anonymous 的值等於 true 代表類別 A 的名稱模型群組中包含代表類別 B 的名稱模型群組之模型群組。 只有當 A 和 B 都沒有內容模型 all 時,這個對映才有效。

對映規則:巢狀類別 -> 匿名複數類型

UML 元素 XSD 元素 註解
類別 A 中包含具有 A 和 B 間的關聯之巢狀類別 B。 在複數類型 A 中具有匿名類型 B 的元素

巢狀外圍類別和巢狀類別之間必須有關聯。

如果類別 A 包含類型 B 的內容而非關聯,則會取得相同的綱目元件。



對映規則:巢狀類別 -> 匿名簡式類型

UML 元素 XSD 元素 註解
類別 A 中包含具有造型 <<simpleType>> 或關鍵字 simpleType 的巢狀類別 B,而且在 A 和 B 之間有關聯。 在複數類型 A 中具有匿名簡式類型 B 的元素

巢狀外圍類別和巢狀類別之間必須有關聯。

如果類別 A 包含類型 B 的內容而非關聯,則會取得相同的綱目元件。

對映規則:UML 註解 -> 附註

UML 元素 XSD 元素 註解
註解 附註 UML 元素中的註解會轉換成 XSD 說明文件附註。
具有 <<annotation>> 模板的註解 附註 附註的類型(documentationappinfo), 視 <<annotation>> 模板的 kind 內容而定。 如果 kind 的值為。如果 kind 的值為 documentation, 則會建立 documentation 元素。 如果值為 applicationInfo,則會建立 appinfo 元素。 kind 的預設值為 documentation




對映規則:內容 -> 元素萬用字元

UML 元素 XSD 元素 註解
具有模板 <<wildcard>> 或關鍵字 wildcard 的內容。 在含括複數類型或模型群組中的元素萬用字元 可能出現取代元素的名稱空間及驗證取代的嚴格程度, 由 <<wildcard>> 模板的內容 namespaceprocessContents 來決定。



對映規則:內容 -> 屬性萬用字元

UML 元素 XSD 元素 註解
具有模板 <<attribute>><<wildcard>> 或關鍵字 attribute 和 wildcard 的內容。 在含括複數類型或屬性群組中的屬性萬用字元 可能出現取代屬性的名稱空間及驗證取代屬性的嚴格程度, 由 <<wildcard>> 模板的內容 namespaceprocessContents 來決定。



在 UML 中建模 XML 綱目:最佳實務練習

在 UML 中建模 XML 綱目的目的是要建立 XML 綱目的視覺化表示法,然後使用「UML 至 XSD」轉換來產生綱目。一般而言,在模型中會有代表 XSD 元素的元素,以及和 XSD 不相關的元素。 建議您在建置這種模型時牢記下列準則。

  1. 將 XSD 相關的元素和非 XSD 元素放置在分開的套件中。
  2. 將屬於不同目標名稱空間的 XSD 相關元素放置在不同的套件中。
  3. XSD 設定檔套用至含有 XSD 相關元素的套件。 或者,您也可以將「XSD 設定檔」套用至模型本身。
  4. XSD 設定檔中將 <<schema>> 模板套用至含有 XSD 相關元素的每一個套件。
  5. 針對 <<schema>> 造型的內容:targetNamespacetargetNamespacePrefix 設定適當的值,來指定目標名稱空間及其字首。
  6. 使用轉換內容來控制套件集的內容和「UML 至 XSD」轉換需要處理的類別。

目錄

限制

這項轉換尚未實作規則來產生下列 XSD 元素:

目錄

附錄 A:外觀 (facet) 的意義

Facet 意義
fractionDigits 小數位數必須小於或等於 x
length 值的長度必須為 x
maxExclusive 值必須小於 x
maxInclusive 值必須小於或等於 x
maxLength 值的長度必須小於或等於 x
minExclusive 值必須大於 x
minInclusive 值必須大於或等於 x
minLength 值的長度必須大於或等於 x
pattern x 為值可能符合的其中一個正規表示式
totalDigits 有效位數必須小於或等於 x
whitespace 綱目處理器應該保留、取代或收合空白,視 x 而定

目錄

附錄 B:簡式類型和適用的外觀 (facet)

下表列舉出內建資料類型和適用的外觀 (facet)。請注意,即使 W3C 中建議將 enumeration 指定為外觀 (facet),但本表中並未納入 enumeration。 我們以具有模板 <<enumeration>> 的類別或使用 UML 列舉來表示 enumeration

資料類型(限制基礎) 適用的 Facet
ENTITY、ID、IDREF length、maxlength、minlength
whitespace 固定為值 collapse
pattern 為 [\i-[:]][\c-[:]]*
IDREFS length、maxlength、pattern
minlength 為 1
收合的值中空格是固定的
名稱 length、maxlength、minlength
收合空格
pattern 為 \i\c*
NCName length、maxlength、minlength
whitespace 為 collapse
pattern 為 [\i-[:]][\c-[:]]*
NMTOKEN length、maxlength、minlength
whitespace 固定為值 collapse
pattern 為 \c+
NMTOKENS length、maxlength
minlength 為 1
whitespace 固定為值 collapse
NOTATION length、maxlength、minlength、pattern
收合的值中空格是固定的
QNAME length、maxlength、minlength、pattern
whitespace 固定為值 collapse
anyURI、base64Binary、hexBinary length、maxlength、minlength、pattern
whitespace 固定為值 collapse
語言 length、maxlength、minlength
收合空格
pattern 為 ([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]{1,8})(-[a-zA-Z]{1,8})*
float、double maxExclusive、maxInclusive、minExclusive、minExclusive、pattern
whitespace 固定為值 collapse
decimal maxExclusive、maxInclusive、minExclusive、minExclusive、fractionDigits、totalDigits、pattern
空格是固定的,以取得收合
整數資料類型 (integer、byte、int、long、negativeInteger、nonNegativeInteger、nonPositiveInteger、positiveInteger、unsignedByte、unsignedInt、unsignedLong、unsignedShort)

maxExclusive、maxInclusive、minExclusive、minExclusive、totalDigits、pattern
fractionDigits 是固定的,以取得值 0
whitespace 固定為值 collapse
日期與時間的資料類型 (date、time、dateTime、gYear、gYearMonth、gMonth、gMonthDay、gDay、duration)
maxExclusive、maxInclusive、minExclusive、minExclusive、pattern
空格是固定的,以取得收合
string、normalizedString、token length、maxLength、minLength、pattern
whitespace 為 preserve 表示 string, replace 表示 normalizedString, collapse 表示 token


目錄