UML から XSD への変換

目次

概説

この変換は、そのソースとして UML パッケージを受け入れ、 パッケージの適切なクラスをスキーマ要素に変換することによって、XML スキーマを生成します。 生成されたスキーマは、変換のターゲットとしてプロジェクトで指定した schema というフォルダーに保管されます。 スキーマを含むファイル名は、パッケージの名前と同じ名前で、 拡張子は .xsd です。

例えば、Address という名前のクラスを含んでいる PurchaseOrder という名前の UML パッケージがあるとします。 このパッケージをソースとして、この変換を実行すると、次の XML スキーマが生成されます。

UML モデル (少なくとも 1 つのパッケージを持つ) をソースとして選択すると、この変換によって、 モデル内のそれぞれのパッケージごとに、ステレオタイプ <<XSDProfile::schema>> またはキーワード schema を持つ XML スキーマが生成されます。 変換プロパティー Process unmarked packages の値を 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. 1 つ以上のモデルを開く。 モデルおよびパッケージをダブルクリックすると、関連するダイアグラムが表示されます。 ダイアグラムには、モデル、生成されたスキーマ、 およびそのスキーマの生成で使用したさまざまなステレオタイプのプロパティーおよび変換プロパティーが表示されます。

: 例モデルのオープン時に、そのモデルが XSDProfile の以前のバージョンを使用していることを通知し、 新規プロファイルに移行するかどうかを問い合わせるダイアログが表示されることがあります。 「はい」をクリックして新規バージョンのプロファイルに移行してください。

目次

変換の実行

以下の手順で変換を実行します。

  1. ワークスペースで、1 つ以上のパッケージを含む UML モデルを作成する。 それぞれのパッケージごとに、いくつかの UML クラスを作成します。
  2. オプションで以下を行う。

    これらのステップは、非単純 XML スキーマの UML モデルを作成する場合に必要です。UML 内の XML スキーマのモデリングについて詳しくは、 『UML 内の XML スキーマのモデリング: 優れた実例』の節を参照してください。

  3. まだモデリング・パースペクティブにいない場合は、モデリング・パースペクティブに切り替える。
  4. モデルまたはパッケージを右クリックして、次に「変換」 >「変換の実行」>「UML から XSD (UML to XSD)」とクリックする。
  5. 「変換の実行」ウィンドウの「ターゲット」ページで、 出力 XSD スキーマ・ファイルに書き込むプロジェクトを指定する。
  6. 「実行」をクリックする。

変換では、XSD スキーマが生成され、そのスキーマが schema という名前のフォルダー内の、指定したプロジェクトに配置されます。 ナビゲーター・ビューを使用して、生成されたスキーマを検査します。

目次

XSD テンプレート・モデルの使用

XSD テンプレート・モデルを使用して、UML モデルを作成することもできます。 これには、必要なモデル・ライブラリー XSDDataTypes が既にインポートされていて、XSD プロファイル が、パッケージに適用されるという利点があります。

  1. UML モデルを作成します。
    1. 「ファイル」>「新規」>「プロジェクト」>「UML プロジェクト」
    2. 「UML モデリング・プロジェクト」ダイアログで、 プロジェクト名を入力して、「次へ」をクリックする。
    3. 結果のダイアログで、 「XSD モデル (XSD Model)」 を選択して、 そのモデルに適切な名前を指定する。(ご使用の RSA/RSM のバージョンでは、「テンプレート」ペインに XSD Model のインスタンスが 2 つ確認できます。 これは、後の RSA/RSM のバージョンで修正されている既知の問題です。2 つの「XSD Model」項目のうちの 1 つを選択すれば問題ありません。)
    4. 「完了」をクリックする。
  2. 新規に作成した UML モデルは、モデル・テンプレートに基づくもので、必要なモデル・ライブラリーをインポートすることになります。 ここで、1 つ以上のパッケージを作成する必要があります。 以下を行ってパッケージを作成します。
    1. パッケージ XSD Model Building Block をオープンする。
    2. 「Ctrl」を押しながらパッケージ ${schema.name} をドラッグして、ルート・モデル上にドロップする。 これにより、XSD 変換プロファイル が適用済みのパッケージが作成されます。
    3. 「検索/置換」を使用して、パッケージの名前を ${schema.name} からより適した名前に変更する。
    4. パッケージに必要な UML クラスを移植する。
  3. まだモデリング・パースペクティブにいない場合は、モデリング・パースペクティブに切り替える。
    1. モデルまたはパッケージを右クリックして、次に「変換」 >「変換の実行」>「UML から XSD (UML to XSD)」とクリックする。
    2. 「変換の実行」ウィンドウの「ターゲット」ページで、 出力 XSD スキーマ・ファイルに書き込むプロジェクトを指定する。
    3. 「実行」をクリックする。

変換では、XSD スキーマが生成され、そのスキーマが schema という名前のフォルダー内の、指定したプロジェクトに配置されます。 ナビゲーター・ビューを使用して、生成されたスキーマを検査します。

目次

変換の詳細

変換ソース

この変換は、ソースとして、少なくとも 1 つのパッケージを含む UML モデル、または 1 つ以上の UML パッケージを受け入れます。

変換対象

この変換は、ターゲットとしてプロジェクトを受け入れます。

目次

変換プロパティー

この変換は、以下の変換プロパティーを定義します。

プロパティー 説明
Target Namespace 変換によって生成されたスキーマのターゲット・ネーム・スペース。 このプロパティーの値は、http://www.ibm.com/SampleXSDTransformation などの文字列です。
Target Namespace Prefix 変換によって生成されたスキーマのターゲット・ネーム・スペースの接頭部。 このプロパティーの値は、sxt などの文字列です。
Process UML class without stereotype or keyword

このプロパティーは、 クラスがステレオタイプまたはそれに関連付けされたキーワードを持たない場合に、変換が UML クラスを処理するかどうかを決定します。

このプロパティーの値は、true または false のいずれかです。 デフォルトで、この値は true に設定され、 変換は、トップレベル・パッケージのすべてのクラスを処理します。 (現時点で、変換では、ネスト・パッケージは処理されません。)

変換をパッケージ内のすべてのクラスに適用する必要がない場合は、 この値を false に設定して、XSDProfile の適切なステレオタイプまたはキーワードを変換するクラスに適用します。

Process UML package without stereotype or keyword

このプロパティーは、 パッケージがステレオタイプまたはそれに関連付けされたキーワードを持たない場合に、変換が UML パッケージを処理するかどうかを決定します。

このプロパティーの値は、true または false のいずれかです。 デフォルトで、この値は true に設定され、 変換は、すべてのトップレベル・パッケージを処理します。 (現時点で、変換では、ネスト・パッケージは処理されません。)

モデル内のすべてのトップレベル・パッケージに、変換を適用する必要がない場合は、 この値を false に設定して、XSDProfile の適切なステレオタイプ <<schema>> またはキーワード schema を変換対象のパッケージに適用します。

Convert a nested class to anonymous type implicitly

このプロパティーは、ネストするクラスおよびネストされるクラスの間に明示された関連がない場合に、変換が、ネスト・クラスを匿名タイプに変換するかどうかを決定します。

このプロパティーの値は、true または false のいずれかです。 デフォルトで、この値は false に設定され、 変換は、ネストするクラスとネストされるクラスの間に関連がある場合のみ、ネストされるクラスを匿名タイプに変換します。 この値が true に設定されている場合は、 すべてのネストされているクラスは、要素タイプがこれらの匿名タイプになっている要素を含んでいるネストされたクラスに対応した XSD タイプを持つ匿名タイプに変換されます。

このプロパティーの値を明示的に true に設定することによる匿名タイプの生成には、いくつかの制約事項があり、このため、慎重に使用するようにしてください。

目次

XSD プロファイル

UML から XSD 変換でサポートされている UML 内の複雑な XML スキーマのモデリングでは、XML スキーマ要素を表すために、UML 構成の小さなサブセットが使用されます。 このサブセットには、次の UML 要素、すなわち クラスプロパティー汎化関連、および 依存が含まれています。 シンプル・タイプ複合タイプ属性要素再使用可能グループなどの XML スキーマ要素をこのサブセットを使用して表すには、 XSD プロファイルをソース UML モデルに適用し、 さらに、このプロファイルからのステレオタイプを使用してステレオタイプの プロパティーを適切な値に設定することによって、それをマークアップする必要があります。

次のクラス図は、XSD プロファイルの UML モデルを示しています。

次の表では、ステレオタイプおよびそのプロパティーについて説明します。

ステレオタイプ メタクラス拡張 プロパティー コメント
annotation コメント kind
language
source

コメントは、アプリケーション情報または文書の注釈に変換されます。

プロパティー kind は、注釈のタイプ、すなわち documentation および appinfo を決定します。 プロパティー language および source は、資料の自然言語、および今後の資料のソースをそれぞれ指定します。

attribute プロパティー (クラスの) form
use

UML プロパティーは、タイプがシンプル・タイプで、多重度が [0..1] の場合には、複合タイプの属性または属性グループに変換されます。

ステレオタイプのプロパティー form は、属性名が、インスタンス文書で修飾される必要があるかどうかを決定します。 値は、qualifiedunqualified、または default のいずれかです。 値が default の場合は、値は、unqualified にデフォルト設定された schemaattributeFormDefault にデフォルト設定されます。

プロパティー use は、属性がオプションか必須かを決定します。 この値は、optionalprohibited、または required のいずれかです。 デフォルトで、この値は optional です。 値 prohibited は、現行のインプリメンテーションでは無視されます。

attributeGroup クラス
クラスは属性グループに変換されます。
complexType クラス anonymous
block
final
modelGroup
maxOccurs
minOccurs
mixed

クラスは複合タイプに変換されます。

プロパティー anonymous は、トップレベルの複合型宣言がスキーマに作成されているかどうかを判別します。 この値は、true または false です。 この値が true の場合は、 型宣言は生成されず、このクラスへのすべてのリファレンスは、属性または要素のタイプとして、 匿名タイプを持つ属性または要素宣言に変換されます。 デフォルトで、この値は false です。

プロパティー block は、タイプ置換をブロックするかどうかを決定します。 このプロパティーは、#allextension、  restriction、またはスペースで分けた extension および restriction のリストのいずれかです。 値 #all は、すべての派生タイプがこのタイプで置換されないようにし、extension は、このタイプのすべての拡張がこのタイプで置換されないようにし、restriction は、このタイプのすべての制限事項がこのタイプで置換されないようにします。 リスト "extension restriction" には、#all と同じ効果があります。 block プロパティーが指定されていない場合は、値のデフォルトは schemablockDefault プロパティーに設定されます。

プロパティー final は、 その他のタイプをこのタイプから派生させることができるかどうかを決定します。 この値は、#all または  (extension または restriction) のリストのいずれかです。  この値が #all の場合は、どのような種類の導出も許可されません。 より細かく制御するために、値は、restriction または extension のいずれかのキーワードをスペースで分離したリストとして設定できます。この値のデフォルトは、schemafinalDefault に設定されます。

プロパティー modelGroup は、タイプのコンテンツ・モデルを決定します。 modelGroup の値は、allchoice、または sequence です。 デフォルト値は、sequence です。

制約: modelGroup の値が all の場合、anonymous の値は false に設定しておく必要があります。 設定されていない場合は、制約違反が発生します。

minOccurs および maxOccurs の値は、sequence および choice グループが、複合タイプで出現する最小数および最大数です。 all モデル・グループの場合、maxOccurs1 でなければならず、minOccurs に許可されているのは 0 または 1 のみです。

boolean プロパティー mixed は、複合タイプが混合コンテンツを許可するかどうかを指定します。 デフォルトで、この値は false です。

element プロパティー (クラスの) block
final
form
nillable

プロパティーは、要素に変換されます。

プロパティー final は、グローバル要素にのみ適用され、 ローカル要素には適用されません。 このプロパティーは、他のタイプをこのタイプから派生させることができるかどうかを決定します。 この値は、#all または   (extension | restriction) のリストのいずれかです。  この値が #all の場合は、どのような種類の導出も許可されません。 より細かく制御するために、値は、restriction または extension のいずれかのキーワードをスペースで分離したリストとして設定できます。この値のデフォルトは、schemafinalDefault に設定されます。

ステレオタイプのプロパティー form は、要素名をインスタンス文書で修飾する必要があるかどうかを決定します。 値は、qualifiedunqualified、または default のいずれかです。 値が default の場合、値は、unqualified にデフォルト設定された schema の、elementFormDefault にデフォルト設定されます。

boolean プロパティー nillable は、xsi:nil がこの要素のインスタンスで使用可能かどうかを決定します。 デフォルトで、この値は false です。

enumeration クラス anonymous

クラスは、シンプル・タイプを表す他のクラスへの汎化関係がある場合は、XSD 列挙に変換されます。

プロパティー anonymous は、 列挙ファセットを持つトップレベルのシンプル型宣言が、スキーマに作成されているかどうかを判別します。 この値は、true または false です。 この値が true の場合は、 型宣言は生成されず、このクラスへのすべてのリファレンスは、属性または要素のタイプとして、 匿名タイプを持つ属性または要素宣言に変換されます。 デフォルトで、この値は false です。

global クラス

このステレオタイプを持つクラスは、 トップレベルの要素または属性宣言に変換されます。 クラスには、1 つだけプロパティーを含める必要があります。 プロパティーに <<attribute>> ステレオタイプまたはキーワードがある場合、そのクラスはトップレベル属性に変換されます。 そうでない場合は、トップレベル要素になります。

要素または属性の名前はプロパティーの名前と同じであり、 タイプはそのプロパティーのタイプになります。 

listOf 依存
依存のクライアントは、項目タイプが依存のサプライヤーになっている XSD リストに変換されます。 シンプル・タイプを表す 2 つのクラス間には、このような依存は 1 つのみ存在可能です。
modelGroup クラス anonymous
modelGroup

クラスは、sequence コンテンツ・モデルを持つ再使用可能名前付きモデル・グループに変換されます。

プロパティー anonymous は、トップレベル・グループ宣言が、スキーマに作成されているかどうかを判別します。 この値は、true または false です。 この値が true の場合、 グループ宣言は生成されません。 また、このクラスへのすべてのリファレンスは、ネスト・モデル・グループに変換されます。 値が false の場合、クラスへのリファレンスはモデル・グループ・リファレンスに変換されます。 デフォルトで、この値は false です。

プロパティー modelGroup は、グループのコンテンツ・モデルを決定します。modelGroup の値は、allchoice、または sequence です。 デフォルト値は、sequence です。

制約 : modelGroup の値が all の場合、anonymous の値を false に設定しておく必要があります。 設定されていない場合は、制約違反が発生します。

schema パッケージ attributeFormDefault
blockDefault
elementFormDefault
finalDefault
targetNamespace
targetNamespacePrefix

パッケージおよびその内容は、XSD スキーマに変換されます。 パッケージの名前は、スキーマ (ファイル) の名前になります。

プロパティー attributeFormDefault は、ローカル属性宣言が、修飾名を使用する必要があることを指定します。 この値は、qualified または unqualified です。 デフォルト値は、unqualified です。

プロパティー  blockDefault は、 複合タイプおよび要素宣言で使用する block 属性のデフォルト値を設定します。 block 属性は、要素置換またはタイプ置換をブロックするかどうかを決定します。 この属性は、#all または、1 つ以上の (extension または restriction または substitution) のスペース分離リストのいずれかです。

プロパティー elementFormDefault は、ローカル要素宣言が、 修飾名を使用するかどうかを指定します。 この値は、qualified または unqualified です。 デフォルト値は、unqualified です。

プロパティー   finalDefault は、複合タイプ、シンプル・タイプ、 および要素宣言で使用する final 属性のデフォルト値を設定します。 final 属性は、タイプ導出を不許可にするかどうかを決定します。 この属性は、#all または、1 つ以上の (extension または restriction または substitution または list または union) のスペース分離リストのいずれかです。

targetNamespace および targetNamespacePrefix の値を設定する場合は、これらの値は、 対応する変換プロパティーターゲット・ネーム・スペース、および ターゲット・ネーム・スペース接頭部でそれぞれ設定した値を指定変更します。

simpleType クラス anonymous
final
fractionDigits
length
maxExclusive
maxInclusive
maxLength
minExclusive
minInclusive
minLength
pattern
totalDigits
whiteSpace

クラスは、XSD 組み込みデータ・タイプ、他のシンプル・タイプ、または XSD 列挙タイプに汎化されている場合、 シンプル・タイプに変換されます。

プロパティー anonymous の値は、true または false のいずれかです。この値が true の場合、クラスは匿名タイプとして処理され、トップレベル型宣言は生成されません。

プロパティー final は、 その他のタイプをこのタイプから派生させることができるかどうかを決定します。 この値は、#all または、  (extension または restriction または list または union) のリストです。 この値が #all の場合は、どのような種類の導出も許可されません。 より細かく制御するために、restrictionextensionlist、または union のいずれかのキーワードのスペース分離リストとして値を設定できます。

残りのプロパティーは、XSD スキーマによって定義されているファセットを表します。 これらのファセットを使用して、値 の有効範囲の設定、値の長さおよび精度の制約、 有効な値が一致する必要がある正規表現の指定、 または組み込み XSD タイプからの制約によって派生したシンプル・タイプの空白処理の指定を行うことができます。 詳しくは、表『ファセットの意味』を参照してください。

これらすべてのファセットが、すべてのシンプル・タイプに適合するわけではないことに注意してください。 例えば、stringnormalizedString、および token から派生したシンプル・タイプの場合、適用できるファセットは、lengthminLengthmaxLength、  pattern、および whitespace です。 詳しくは、表『シンプル・タイプおよび適用可能なファセット』を参照してください。

unionOf 依存
依存のクライアントは、そのメンバーの 1 つとして、依存のサプライヤーを使用して、XSD 共用体に変換されます。 シンプル・タイプを表すクラスは、異なる (シンプル・タイプ) クラスへの、このような複数の依存を持つことができます。
wildcard プロパティー (クラスの) processContents
namespace

UML プロパティーは要素のワイルドカードに変換されます。プロパティーに wildcard のみでなく、キーワード attribute またはステレオタイプ <<attribute>> がある場合、属性のワイルドカードに変換されます。

プロパティー processContents は、置換属性または要素をどこまで厳密に妥当性検査するかを決定します。 これが skip の場合は、スキーマ・プロセッサーは検査を行いません。 これが lax の場合、 スキーマ・プロセッサーは、宣言を検出可能な属性または要素の妥当性検査を行い、 無効な場合にはエラーを発信します。 これが strict の場合は、 スキーマ・プロセッサーは、ネーム・スペースに関連付けされているスキーマ文書の検出を試行し、 すべての属性または要素の妥当性検査を行います。 デフォルトで、この値は strict に設定されています。

プロパティー namespace は、置換属性または要素がどのネーム・スペースに存在するかを指定します。許可されている値は、  (##any##otheranyURI のリスト、または ##targetNamespace、または ##local) のいずれかです。 これが ##any の場合、置換要素または属性は、任意のネーム・スペースに存在可能です。また、どのネーム・スペースにも存在しないことがあります。 これが ##other の場合、 置換要素または属性は、文書のターゲット・ネーム・スペース以外の任意のネーム・スペースに存在可能です。ただし、これらは 1 つのネーム・スペース内に存在している必要があります。 スキーマ文書 にターゲット・ネーム・スペースがない場合は、置換要素または属性は、 任意のネーム・スペースを 1 つだけ持つことができます。 これ以外の場合は、次の項目、##targetNamespace#local、または特定のネーム・スペースのいずれか、 またはすべてを含む値のスペース分離リストの場合があります。 ##targetNamespace は、置換要素または属性がスキーマ文書のターゲット・ネーム・スペースに存在している可能性があることを示し、 ##local は、置換要素または属性がネーム・スペースに存在する可能性がないことを示しています。

目次

キーワード

モデリング中のスキーマが、その要素を非常に詳細に指定する必要がない場合は、ステレオタイプではなく、 キーワードを使用できます。 次の表では、UML から XSD 変換によってサポートされているキーワードについて説明します。

キーワード UML 要素に適用可 コメント
annotation コメント コメントは、"appinfo" または "documentation" の注釈に変換されます。
attribute プロパティー (クラスの) プロパティーは、プロパティーの多重度が [0..1] の場合には、複合タイプの属性に変換されます。
attributeGroup クラス クラスは属性グループに変換されます。
complexType クラス クラスは複合タイプに変換されます。
element プロパティー プロパティーは、複合タイプの要素に変換されます。
enumeration クラス クラスは、シンプル・タイプを表す他のクラスへの汎化関係がある場合は、XSD 列挙に変換されます。
global クラス

このキーワードを持つクラスは、 トップレベルの要素または属性宣言に変換されます。 クラスには、1 つだけプロパティーを含める必要があります。 プロパティーに <<attribute>> ステレオタイプまたはキーワード attribute がある場合、そのクラスはトップレベル属性に変換されます。 そうでない場合は、トップレベル要素になります。

要素または属性の名前はプロパティー名から派生し、タイプはそのプロパティーのタイプから派生します。 

listOf 2 つのシンプル・タイプを表す 2 つのクラス間の依存 依存のクライアントは、項目タイプが依存のサプライヤーになっている XSD リストに変換されます。 シンプル・タイプを表す 2 つのクラス間には、このような依存は 1 つのみ存在可能です。
modelGroup クラス クラスは、sequence コンテンツ・モデルを持つ再使用可能名前付きモデル・グループに変換されます。
schema パッケージ

パッケージおよびその内容は、XSD スキーマに変換されます。 パッケージの名前は、スキーマ (ファイル) の名前になります。

キーワード schema を使用している場合は、 『変換プロパティー』、ターゲット・ネーム・スペース、およびターゲット・ネーム・スペース接頭部をそれぞれ適切な値に設定することによって、ターゲット・ネーム・スペースおよびターゲットネーム・スペース接頭部を指定する必要があります。

simpleType クラス クラスは、XSD 組み込みデータ・タイプまたはその他のシンプル・タイプに汎化されている場合、 シンプル・タイプに変換されます。
unionOf 2 つのシンプル・タイプを表す 2 つのクラス間の依存 依存のクライアントは、そのメンバーの 1 つとして、依存のサプライヤーを使用して、XSD 共用体に変換されます。 シンプル・タイプを表すクラスは、異なる (シンプル・タイプ) クラスへの、このような複数の依存を持つことができます。
wildcard プロパティー

UML プロパティーは要素のワイルドカードに変換されます。プロパティーに wildcard のみでなく、キーワード attribute がある場合、属性のワイルドカードに変換されます。

目次

モデル・ライブラリー: XSD 組み込みデータ型

44 のシンプル・タイプが XML Schema Recommendation に作成されます。 これらのシンプル・タイプは、文字列、数、日時の値などの共通データ・タイプを表し、XML 1.0 の属性タイプのレガシー・タイプも含まれています。XSD は、12 の制約ファセット も提供します。 これらのファセットは、シンプル・タイプの値の有効範囲を指定するために使用したり、 それらの値の長さおよび精度を制限したり、有効な値のリストを列挙したり、 有効な値が一致する必要がある正規表現を指定することができます。

新規シンプル・タイプは、組み込みタイプ、またはその他シンプル・タイプから、ファセットを適切な値に設定することによって、 派生させることができます。 これを行うには、UML モデルで使用可能な組み込みタイプの表記を使用する必要があります。

組み込みシンプル・タイプは、クラスとしてモデル化され、XSDDataTypes という名前のモデル・ライブラリーで使用可能になっています。 これらのタイプにアクセスするには、XSDDataTypes ライブラリーをご使用のモデルにインポートする必要があります。XSDDataTypes モデル・ライブラリーをインポートするには、 モデル・エクスプローラーで、モデルのルート (モデル自体) を右クリックして、 「モデル・ライブラリーのインポート...」を選択し、 ドロップダウン・リストから「XSDDataTypes」を選択します。

新規シンプル・タイプ (ユーザー定義シンプル・タイプ) を定義するには、XSDDataTypes モデルの適切なクラスから特化して、 <<simpleType>> ステレオタイプのプロパティーを使用して、定義済みタイプの値を制約する必要があります。以下に例を示します。

Quantity の最大値は、例えば <<simpleType>>maxInclusive プロパティーを 100 に設定することによって、100 に制限できます。

目次

UML から XSD へのマッピング・ルール

UML 内の XML スキーマのモデリングの目的は、XML スキーマのビジュアル表示を作成し、UML から XSD 変換を使用してスキーマを生成することです。 分析は、XML スキーマのほとんどの基本機能が、UML モデル要素によって表記可能であることを示しています。 次の表では、UML の概念、および XML Schema Definition (XSD) の対応する概念の間のマッピングのサブセットを示します。

UML の概念 XML スキーマの概念
パッケージ 接頭部付き単一ネーム・スペース
クラス タイプおよび再使用可能グループ
  • 複合タイプおよびマッチング要素宣言
  • シンプル・タイプ
  • 属性グループ、名前付きモデル・グループ、および置換グループ
列挙 UML 列挙リテラルと等価の列挙ファセットを持つ XSD 文字列シンプル・タイプの制限。 これは、XSD プロファイルからの <<enumeration>> ステレオタイプが適用されている UML クラスを使用している場合の事象とは異なることに注意してください。 ステレオタイプ化された UML クラスを使用することによって、より一般的な XSD 列挙が使用可能です。
クラスのプロパティー 複合タイプの要素および属性
関連 (集約) 組み込まれている要素の子クラス (複合タイプ)
汎化 タイプ導出
  • 複合タイプの拡張による導出
  • 複合タイプの制限による導出
  • シンプル・タイプの制限による導出
オブジェクト・アイデンティティー ユーザー指定キー・フィールドまたは明示的アイデンティティー機構 (まだ実装されていません)

マッピング・ルール: パッケージ -> XSD スキーマ

UML 要素 XSD 要素 コメント
ステレオタイプ <<schema>> を持つパッケージ ターゲット・ネーム・スペースおよびターゲット・ネーム・スペース接頭部を持つスキーマ パッケージ内のコンテンツは、.xsd ファイル内のスキーマを作成します。 スキーマ・ファイルの名前は、パッケージと同じ名前です。

<<schema>> ステレオタイプのプロパティー attributeFormDefault および elementFormDefault を使用して、生成されたスキーマ上に attributeFormDefault および elementFormDefault 属性を指定できます。

ステレオタイプの代わりにキーワード schema を使用する場合は、  『変換プロパティー』、ターゲット・ネーム・スペース、および ターゲット・ネーム・スペース接頭部 の値をそれぞれ設定することによって、 ターゲット・ネーム・スペースおよびその接頭部を指定する必要があります。

マッピング・ルール: クラス -> 複合タイプ、プロパティー -> 要素およびプロパティー -> 属性

UML 要素 XSD 要素 コメント
ステレオタイプ <<complexType>> を持つクラス 複合タイプ ステレオタイプのプロパティー modelGroup が、allchoice、または sequence の可能な値の 1 つに設定されていない場合、複合タイプは sequence モデル・グループを使用して生成されます。
キーワード complexType を持つクラス 複合タイプ 複合タイプは、sequence モデル・グループを使用して生成されます。
キーワードまたはステレオタイプを持たないクラス 複合タイプ 変換プロパティー Process unmarked class の値が true に設定されている場合のみ、複合タイプが生成されます。 これ以外の場合は、クラスは無視されます。 複合タイプが生成されている場合、そのモデル・グループは、sequence に設定されます。
プロパティー 複合タイプの要素
<<attribute>> ステレオタイプ、 またはキーワード attribute を持つプロパティー 複合タイプの属性

プロパティーは、そのプロパティーのタイプがシンプル・タイプで、 その多重度が [0..1] になっている場合のみ、属性に変換されます。 これ以外の場合は、要素に変換されます。

デフォルト値を指定している場合は、プロパティーはデフォルト値を使用してオプション属性に 変換されます。 プロパティーを読み取り専用にしてデフォルト値を指定している場合は、 デフォルトに固定されたそのプロパティーの値を使用して、属性に変換されます。 どちらの場合も、プロパティーの多重度を [0..1] に設定する必要があります。

ステレオタイプ <<attribute>> のプロパティー use を使用して、属性をオプションまたは必須にします。use の値を required に設定して、デフォルト値を指定し、プロパティーを読み取り専用にしている場合は、 デフォルト値および読み取り専用指定は無視されます。

マッピング・ルール: <<global>>  を持つクラス -> グローバル要素または属性

UML 要素 XSD 要素 コメント
1 つのプロパティーを含む、ステレオタイプ <<global>> またはキーワード "global" を持つクラス。 グローバル (トップレベル) 要素または属性。

クラスには、1 つだけプロパティーを含める必要があります。 プロパティーに <<attribute>> ステレオタイプまたはキーワード attribute がある場合、そのクラスはトップレベル属性に変換されます。 そうでない場合は、トップレベル要素になります。

要素または属性の名前はプロパティー名から派生し、タイプはそのプロパティーの タイプから派生します。


マッピング・ルール: <<global>> クラス間の汎化関係 -> 置換グループ

UML 要素 XSD 要素 コメント
ステレオタイプ <<global>> が適用されているクラス間の汎化関係。 <<global>> ステレオタイプのクラスで表されるグローバル要素によって構成される置換グループ。 グローバル要素の置換グループを形成するには、それらのタイプ (クラス) 自体が等価の汎化関係にある必要があります。

以下の例では、グローバル要素 dress は置換グループのヘッドであり、グローバル要素 shirt および trouser はメンバーです。これらの要素のタイプが、グローバル要素間の汎化関係と等価の汎化関係にあることに注意してください。


マッピング・ルール: クラス -> シンプル・タイプ

UML 要素 XSD 要素 コメント
ステレオタイプ <<simpleType>> またはキーワード simpleType を持つクラス

ユーザー定義シンプル・タイプ。

組み込みシンプル・タイプまたはその他のユーザー定義シンプル・タイプの制限

組み込みシンプル・タイプまたは他のユーザー定義シンプル・タイプ、 または XSD 列挙タイプとの汎化関係が必要です。

マッピング・ルール: クラス -> XSD 列挙

UML 要素 XSD 要素 コメント
ステレオタイプ <<enumeration>> またはキーワード enumeration を持つクラス XSD 列挙。
指定された列挙ファセットを持つシンプル・タイプ
組み込みシンプル・タイプまたは他のユーザー定義シンプル・タイプとの汎化関係が必要です。

マッピング・ルール: UML 列挙 -> XSD 列挙

UML 要素 XSD 要素 コメント
UML 列挙 XSD 列挙、制限ベースの XSD:文字列、および指定された列挙ファセットを持つシンプル・タイプ 他のシンプル・タイプへの汎化は必要ありません。

マッピング・ルール: クラス -> 再使用可能グループ: モデル・グループおよび属性グループ

UML 要素 XSD 要素 コメント
ステレオタイプ <<modelGroup>> を持つクラス 名前付きモデル・グループ ステレオタイプのプロパティー modelGroup が、allchoice、または sequence の可能な値の 1 つに設定されていない場合、モデル・グループは sequence モデル・グループを使用して生成されます。
キーワード modelGroup を持つクラス 名前付きモデル・グループ 名前付きモデル・グループは、sequence モデル・グループを使用して生成されます。
ステレオタイプ <<attributeGroup>> またはキーワード attributeGroup を持つクラス 属性グループ クラスのそれぞれのプロパティーは、属性グループ・メンバーに変換されます。 ただし、それぞれのプロパティーは、シンプル・タイプに変換可能なタイプで、多重度 [0..1] を持つものとします。 これ以外の場合は、プロパティーは無視されます。

プロパティーは、XSD 属性にのみ変換可能なため、必ずしもステレオタイプ <<attribute>> をプロパティーに適用する必要はありません。 ただし、属性に追加プロパティー (required、form、その他) を指定する場合は、<<attribute>> ステレオタイプを適用し、 ステレオタイプのプロパティーを適切な値に設定する必要があります。

マッピング・ルール: クラス導出

UML 要素 XSD 要素 コメント
クラス A は他のクラス B からの派生です。

複合タイプ A の複合コンテンツ拡張である複合タイプ B。

クラス A またはクラス B は、ステレオタイプ <<complexType>> またはキーワード complexType を持つことができます。

クラス A もクラス B も、「すべて」のモデル・グループまたはコンテンツ・モデルを持つことはできません。 「すべて」のモデル・グループでクラスを拡張しようとすると、制約違反になります。

クラス B は、ステレオタイプ <<modelGroup>><<attributeGroup>> も持つことはできません。キーワード modelGroup または attributeGroup も持つことはできません。 すなわち、複合タイプは、モデル・グループまたは属性グループを拡張できません。

クラス A は、<<simpleType>> ステレオタイプまたは キーワード simpleType を持つ他のクラス B から派生しています。

シンプル・タイプのシンプル・コンテンツ拡張である複合タイプ B。 クラス B のプロパティーは、どれもシンプル・コンテンツ拡張の属性になります。

シンプル・タイプからの派生の唯一の目的は、属性を追加することです。 そのため、クラス B のプロパティーのタイプはシンプル・タイプでなければならず、 その多重度は [0..1] でなければなりません。それ以外の場合、モデルは制約違反になります。

マッピング・ルール: 関連 -> 複合タイプ要素

UML 要素 XSD 要素 コメント
関連 (単方向またはコンポジット集約) クラス A -> クラス B 複合タイプ B タイプの複合タイプ A の要素 要素名は、関連の端のロール名によって決定されます。

マッピング・ルール: プロパティー -> 複合タイプ要素

UML 要素 XSD 要素 コメント
Class A には、Class B タイプの 1 つ以上のプロパティーが含まれています。 複合タイプ B タイプの複合タイプ A の要素 要素名は、プロパティーの名前によって決定されます。

マッピング・ルール: 関連 -> モデル・グループ・リファレンスおよび属性グループ・リファレンス

UML 要素 XSD 要素 コメント

クラス A から <<modelGroup>> ステレオタイプを持つクラス B への関連 (単方向の関連またはコンポジット集約)。 

クラス A -> <<attributeGroup>> ステレオタイプを持つクラス C

複合タイプ A のモデル・グループ・リファレンス。

複合タイプ A の属性グループ・リファレンス。


<<modelGroup>> ステレオタイプを持つクラス A から、同じく <<modelGroup>> ステレオタイプを持つクラス B への関連 (単方向の関連またはコンポジット集約)  クラス A で表されるモデル・グループ内のモデル・グループ参照
<<attributeGroup>> ステレオタイプを持つクラス A から、同じく <<attributeGroup>> ステレオタイプを持つクラス B への関連 (単方向の関連またはコンポジット集約)  クラス A で表される属性グループ内の属性グループ参照。



マッピング・ルール: 依存 -> List および Union タイプ

UML 要素 XSD 要素 コメント
2 つのシンプル・タイプ間に、ステレオタイプ <<listOf>> またはキーワード listOf を持つ依存

List タイプ。

依存のクライアントは、依存のサプライヤー・リストであるシンプル・タイプに変換されます。

依存のクライアントおよびサプライヤーは、 両方シンプル・タイプである必要があり、それぞれの間には、<<listOf>> が 1 つだけ存在している必要があります。 これら 2 つのクラス間には、これ以外の関係があってはなりません。

クライアント・シンプル・タイプおよび 1 つ以上のサプライヤー間に、ステレオタイプ <<unionOf>> またはキーワード unionOf を持つ依存 Union タイプ。

依存のクライアントは、依存のサプライヤーの共用体であるシンプル・タイプに変換されます。

依存のクライアントおよびサプライヤーは、 両方シンプル・タイプである必要があり、それぞれの間には、<<unionOf>> が 1 つ以上存在しています。 これらのクラス間には、これ以外の関係があってはなりません。

目次

マッピング・ルール: クラス -> 匿名複合タイプ

UML 要素 XSD 要素 コメント

ステレオタイプ <<complexType>> およびステレオタイプのプロパティー anonymous = true を持ち、複合タイプを表記する他のクラス B によって参照されるクラス A。

クラス A は、匿名複合タイプに 変換されます。

リファレンスは、複合タイプ (クラス B によって表記される) の属性または要素に変換されます。 要素または属性のタイプは、この匿名タイプによって定義されます。

要素名または属性名は、関連の端のロール名またはプロパティー名によって決定されます。

クラス A が匿名として指定されているため、このクラスには、トップレベル複合型宣言は生成されません。

マッピング・ルール: クラス -> 匿名シンプル・タイプ

UML 要素 XSD 要素 コメント
ステレオタイプ <<simpleType>> およびステレオタイプのプロパティー anonymous = true を持ち、複合タイプを表記する他のクラス B によって参照されるクラス A

クラス A は、匿名シンプル・タイプ に変換されます。

リファレンスは、複合タイプ (クラス B によって表記される) の属性または要素に変換されます。 要素または属性のタイプは、この匿名タイプによって定義されます。

要素名または属性名は、関連の端のロール名またはプロパティー名によって決定されます。

クラス A が匿名として指定されているため、このクラスには、トップレベル・シンプル型宣言は生成されません。

マッピング・ルール: クラス -> 匿名列挙

UML 要素 XSD 要素 コメント
ステレオタイプ <<enumeration>> およびステレオタイプのプロパティー anonymous = true を持ち、複合タイプを表記する他のクラス B によって参照されるクラス A

クラス A は、匿名列挙に 変換されます。

リファレンスは、複合タイプ (クラス B によって表記される) の属性または要素に変換されます。 要素または属性のタイプは、この匿名タイプによって定義されます。

要素名または属性名は、関連の端のロール名またはプロパティー名によって決定されます。

クラス A が匿名として指定されているため、このクラスには、列挙ファセットを持つトップレベル・シンプル型宣言は生成されません。

マッピング・ルール: 匿名モデル・グループへのリファレンス -> シーケンスおよび選択グループのネスト

UML 要素 XSD 要素 コメント

ステレオタイプ <<modelGroup>> およびプロパティー anonymous = true の値を持つ、クラス A およびクラス B 間の関連 (単方向集約またはコンポジット集約)

クラス B によって表記される名前付きモデル・グループのモデル・グループを含むクラス A を表記する複合タイプ。

このマッピングは、 A も B もコンテンツ・モデル all を持たない場合のみ有効です。
ステレオタイプ <<modelGroup>> を持つクラス A、およびステレオタイプ <<modelGroup>> とプロパティー anonymous = true の値を持つクラス B との間の関連 (単方向集約またはコンポジット集約) クラス B によって表記される名前付きモデル・グループのモデル・グループを含むクラス A を表記する 名前付きモデル・グループ。 このマッピングは、 A も B もコンテンツ・モデル all を持たない場合のみ有効です。

モデル・グループへの上記リファレンスは、クラス・プロパティーを使用してモデル化することもできます。

UML 要素 XSD 要素 コメント
ステレオタイプ <<modelGroup>> およびプロパティー anonymous = true の値を持つ、タイプがクラス B のプロパティーを含むクラス A クラス B によって表記される名前付きモデル・グループのモデル・グループを含むクラス A を表記する複合タイプ。 このマッピングは、 A も B もコンテンツ・モデル all を持たない場合のみ有効です。
ステレオタイプ <<modelGroup>> およびプロパティー anonymous = true の値を持ち、タイプがクラス B のプロパティーを含むステレオタイプ <<modelGroup>> を持つクラス A クラス B によって表記される名前付きモデル・グループのモデル・グループを含むクラス A を表記する 名前付きモデル・グループ。 このマッピングは、 A も B もコンテンツ・モデル all を持たない場合のみ有効です。

マッピング・ルール: ネストされるクラス -> 匿名複合タイプ

UML 要素 XSD 要素 コメント
A および B 間の関連を持つネスト・クラス B を含むクラス A。 匿名タイプ B の複合タイプ A 内の要素。

ネストするクラスとネストされるクラスとの間には、関連が必要です。

クラス A に、関連の代わりに、タイプ B のプロパティーが含まれている場合、 同じスキーマ・コンポーネントが取得されます。



マッピング・ルール: ネストされるクラス -> 匿名シンプル・タイプ

UML 要素 XSD 要素 コメント
ステレオタイプ <<simpleType>> またはキーワード simpleType を持ち、A および B 間に関連を持つ、ネストされたクラス B を含むクラス A。 匿名シンプル・タイプ B の複合タイプ A 内の要素。

ネストするクラスとネストされるクラスとの間には、関連が必要です。

クラス A に、関連の代わりに、タイプ B のプロパティーが含まれている場合、 同じスキーマ・コンポーネントが取得されます。

マッピング・ルール: UML コメント -> 注釈

UML 要素 XSD 要素 コメント
コメント 注釈 UML 要素内のコメントは XSD 文書の注釈に変換されます。
<<annotation>> ステレオタイプを持つコメント 注釈 注釈のタイプ documentation または appinfo は、<<annotation>> ステレオタイプの kind プロパティーの値によって決定されます。 kind の値が documentation である場合、documentation 要素が作成されます。値が applicationInfo である場合は、appinfo 要素が作成されます。 kind のデフォルト値は documentation です。




マッピング・ルール: プロパティー -> 要素のワイルドカード

UML 要素 XSD 要素 コメント
ステレオタイプ <<wildcard>> またはキーワード wildcard を持つプロパティー。 複合タイプまたはモデル・グループに含まれる要素のワイルドカード 置換要素が含まれるネーム・スペース、および置換の妥当性検査の精度は、 <<wildcard>> ステレオタイプのプロパティー namespace および processContents によって決定されます。



マッピング・ルール: プロパティー -> 属性のワイルドカード

UML 要素 XSD 要素 コメント
ステレオタイプ <<attribute>><<wildcard>> またはキーワード、属性、およびワイルドカードを持つプロパティー。 複合タイプまたは属性グループに含まれる属性のワイルドカード 置換属性が含まれるネーム・スペース、および置換属性の妥当性検査の精度は、 <<wildcard>> ステレオタイプのプロパティー namespace および processContents によって決定されます。



UML 内の XML スキーマのモデリング: 優れた実例

UML 内の XML スキーマのモデリングの目的は、XML スキーマのビジュアル表示を作成し、UML から XSD 変換を使用してスキーマを生成することです。 通常ユーザーのモデルには、XSD 要素、および XSD とは無関係の要素を表わす要素があります。 このようなモデルを作成する場合には、以下のガイドラインに従うことが推奨されています。

  1. XSD 関連の要素および XSD に関連しない要素を別々のパッケージに配置します。
  2. 異なるターゲット・ネーム・スペースに属する XSD 関連要素を別のパッケージに配置します。
  3. XSD プロファイル』を XSD 関連要素を含むパッケージに適用します。 あるいは、XSD プロファイルをそのモデル自体に適用することもできます。
  4. <<schema>> ステレオタイプを『XSD プロファイル』から XSD 関連要素を含むそれぞれのパッケージに適用します。
  5. <<schema>> ステレオタイプのプロパティー targetNamespace および targetNamespacePrefix に、 適切な値を設定することによって、ターゲット・ネーム・スペースおよびその接頭部を指定します。
  6. 変換プロパティー』を使用して、UML から XSD への変換が処理する必要がある一連のパッケージおよびクラスのコンテンツを制御します。

目次

制限

この変換では、以下の XSD 要素を生成するためのルールがまだ実装されていません。

目次

付録 A. ファセットの意味

ファセット 意味
fractionDigits 小数桁数は、x 以下である必要があります。
length length の値は x にする必要があります。
maxExclusive 値は x 未満にする必要があります。
maxInclusive 値は x 以下にする必要があります。
maxLength 値の長さは x 以下にする必要があります。
minExclusive 値は x より大きくする必要があります。
minInclusive 値は x 以上にする必要があります。
minLength 値の長さは x 以上にする必要があります。
pattern x は、値が一致する正規表現の 1 つです。
totalDigits 有効数字の桁数は、x 以下にする必要があります。
whitespace スキーマ・プロセッサーは、x に応じて、保存、置換、または折りたたみ空白文字のいずれかにする必要があります。

目次

付録 B: シンプル・タイプおよび適用可能なファセット

次の表では、組み込みデータ型および適用できるファセットを列挙します。W3C の勧告が、ファセットとして enumeration を指定している場合でも、ここでは表に enumeration が組み込まれていません。 ここでは、ステレオタイプ<<enumeration>> を持つクラス、または UML 列挙を使用して、enumeration を表します。

データ型 (制限に基づく) 適用可能なファセット
ENTITY、ID、IDREF length、maxlength、minlength
空白文字は、collapseという値に固定されています。
パターンは [\i-[:]][\c-[:]]* です。
IDREFS length、maxlength、pattern
minlength は 1 です。
空白文字は、collapse という値に固定されています。
名前 length、maxlength、minlength
空白文字は折りたたみです。
パターンは \i\c* です。
NCName length、maxlength、minlength
空白文字は折りたたみです。
パターンは [\i-[:]][\c-[:]]* です。
NMTOKEN length、maxlength、minlength
空白文字は、collapse という値に固定されています。
パターンは \c+ です。
NMTOKENS length、maxlength
minlength は 1 です。
空白文字は、collapse という値に固定されています。
NOTATION length、maxlength、minlength、pattern
空白文字は、collapse という値に固定されています。
QNAME length、maxlength、minlength、pattern
空白文字は、collapse という値に固定されています。
anyURI、base64Binary、hexBinary length、maxlength、minlength、pattern
空白文字は、collapse という値に固定されています。
言語 length、maxlength、minlength
空白文字は折りたたみです。
パターンは ([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
空白文字は、折りたたみという値を持つように固定されています。
10 進数 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 を持つように固定されています。
空白文字は、折りたたみという値を持つように固定されています。
日時データ型 (date、time、dateTime、gYear,gYearMonth、gMonth、gMonthDay、gDay、duration)
maxExclusive、maxInclusive、minExclusive、minExclusive、pattern
空白文字は、折りたたみという値を持つように固定されています。
string、normalizedString、token length、maxLength、minLength、pattern
空白は、string の場合は preserve、normalizedString の場合は replace 、および token の場合は collapse です。


目次