データディクショナリ data-dictionary
はじめに introduction
ビジネスユーザーはデータディクショナリを介すことで、バックエンドデータソースの情報を使用できます。基礎となるデータモデルの技術的な詳細情報を把握する必要はありません。データディクショナリは、複数のデータディクショナリ要素(DDE)で構成されます。これらのデータ要素を使用して、バックエンドデータを(顧客対応に使用する入力として)レターに統合します。
データディクショナリは、基礎となるデータ構造とその関連する属性を説明するメタデータの独立した表現です。データディクショナリはビジネス用語を使用して作成されます。また、基礎となるデータモデルの 1 つまたは複数にマッピングできます。
データディクショナリは、単純要素、複合要素、コレクション要素という 3 種類の要素から構成されます。単純 DDE は、都市名などの情報を保持する文字列、数値、日付、ブーリアン値などのプリミティブ要素です。複合 DDE は他の DDE を含むものであり、そのタイプはプリミティブ、複合、コレクションのいずれでもかまいません。例として、郵便番号、国、都道府県、市町村、地名、番地で構成される住所が挙げられます。コレクションは、同類の単純 DDE または複合 DDE のリストです。例として、複数の住所や、請求先と出荷先の住所が異なる顧客が挙げられます。
Correspondence Management は、バックエンド、顧客、または受信者に固有のデータを使用して、異なる顧客向けの通信を作成します。それらの固有のデータは、データディクショナリの構造に従って格納されています。例えば、ドキュメントの作成時に「{First Name} さん」、「{姓}様」などの名前を使用できます。
ビジネスユーザーは一般的に、XSD(xml スキーマ)、Java クラスなどの、メタデータ表現に関する知識を必要としません。ただし、通常はソリューションを構築するために、これらのデータ構造や属性へのアクセスが必要となります。
データディクショナリのワークフロー data-dictionary-workflow
- 作成者がデータディクショナリを作成します。作成には、スキーマを読み込むか、または新規に作成します。
- 作成者はデータディクショナリに基づいてレターとインタラクティブ通信を作成し、レターとインタラクティブ通信のデータディクショナリ要素を必要な箇所に関連付けます。
- 作成者はサンプルデータの XML ファイルをダウンロードできます。これはデータディクショナリのスキーマに基づいたものです。作成者はサンプルデータの XML ファイルを編集できます。これはテストデータとしてデータディクショナリに関連付けることができます。レターのプレビューでも同様の操作が可能です。
- レターのプレビュー時に、作成者はデータが入ったレターをプレビューすることを選択できます(カスタムプレビュー)。作成者が提供したデータが入力された状態でレターが開きます。通信を作成するインターフェイスが開きます。このレターをプレビューしているエージェントは、レターのコンテンツ、データ、および添付ファイルを変更して最終的なレターを送信できます。レターの作成について詳しくは、通信の作成を参照してください。
前提条件 prerequisite
互換パッケージをインストールし、「フォーム」ページで「データディクショナリ」オプションを表示します。
データディクショナリを作成 createdatadictionary
データディクショナリの作成にはデータディクショナリエディターを使用します。または、XSD スキーマファイルをアップロードしてデータディクショナリを作成することができます。後からフィールドなどの必須の情報をさらに追加して、このデータディクショナリを拡張できます。データディクショナリの作成方法を問わず、ビジネスプロセスの所有者にはバックエンドシステムに関する知識は必要がありません。ビジネスプロセスの所有者に必要とされるのは、プロセスのドメインオブジェクトとその宛先に関する知識だけです。
-
フォーム/データディクショナリ を選択します。
-
「データディクショナリを作成」を選択します。
-
プロパティ画面で以下を追加します。
-
タイトル:(オプション)データディクショナリのタイトルを入力します。タイトルは一意である必要はなく、特殊文字や英語以外の文字を含めることもできます。レターなどのドキュメントフラグメントは、タイトル(利用可能な場合)を用いて参照されます。タイトルは、サムネールやアセットプロパティなどで使用されます。データディクショナリは、名前ではなく、タイトルで参照されます。
-
名前:データディクショナリの一意の名前。「名前」フィールドに入力できるのは、英語の文字、数字、ハイフンのみです。「名前」フィールドは、タイトルフィールドに基づいて自動的に入力されます。「タイトル」フィールドに入力された特殊文字、スペース、および英数字以外の文字はハイフンに置き換えられます。「タイトル」フィールドの値は「名前」フィールドに自動的にコピーされますが、値を編集することもできます。
-
説明:(オプション)データディクショナリの説明。
-
タグ:(オプション)カスタムタグを作成するには、テキストフィールドに値を入力して Enter を押します。タグのテキストフィールドの下にタグが表示されます。このテキストを保存すると、新しく追加されたタグも作成されます。
-
拡張プロパティ:(オプション)「フィールドを追加」を選択して、データディクショナリのメタデータ属性を指定します。「プロパティ名」列に、固有のプロパティ名を入力します。「値」列に、プロパティに関連付ける値を入力します。
-
-
(オプション)データディクショナリの XSD スキーマ定義をアップロードするには、データディクショナリの構造ウィンドウの「XML スキーマをアップロード」を選択します。XSD ファイルを参照して選択し、「開く」を選択します。データディクショナリは、アップロードされた XML スキーマに基づいて作成されます。データディクショナリで要素の表示名や説明を調整する必要があります。これを行うには、要素の名前をタップして選択し、右側のペインのフィールドで説明、表示名、およびその他の詳細を編集します。
計算済み DD 要素について詳しくは、「計算済みデータディクショナリ要素」を参照してください。
note note NOTE ユーザーインターフェイスを使用することで、スキーマファイルのアップロードをスキップして、新規でデータディクショナリを構築することもできます。新規で構築するには、この手順をスキップし次の手順に進みます。 -
「次へ」を選択します。
-
プロパティを追加画面でデータディクショナリに要素を追加します。また、データディクショナリの基本構造を取得するためにスキーマをアップロードすることで、要素の追加や削除、詳細の編集を行うことができます。
要素の右側の 3 つのドットを選択し、データディクショナリの構造に要素を追加できます。
「複合要素」、「コレクション要素」または「プリミティブ要素」を選択します。
- 複合 DDE は他の DDE を含むものであり、そのタイプはプリミティブ、複合、コレクションのいずれでも構いません。例として、郵便番号、国、都道府県、市町村、地名、番地で構成される住所が挙げられます。
- プリミティブ DDE は、文字列、数値、日付、ブール値などの要素であり、都市名などの情報を保持します。
- コレクションは、同類の単純 DDE または複合 DDE のリストです。例として、複数の住所や、請求先と出荷先の住所が異なる顧客が挙げられます。
次に、データディクショナリの作成ルールを示します。
- データディクショナリ内のトップレベル DDE として使用できるのは、複合タイプのみです。
- 名前、参照名および要素タイプは、データディクショナリと DDE において必須のフィールドです。
- 参照名は一意にする必要があります。
- 親 DDE(複合)には、同じ名前の 2 つの子を指定できません。
- 列挙型には、プリミティブな String 型のみが含まれます。
複合要素、コレクション要素、プリミティブ要素について、およびデータディクショナリ要素の操作について詳しくは、データディクショナリ要素の XML スキーマへのマッピングを参照してください。
データディクショナリにおける検証について詳しくは、データディクショナリエディターの検証を参照してください。
-
(オプション)要素を選択後に、「詳細設定」タブでプロパティ(属性)を追加できます。また、「フィールドを追加」を選択して、DD 要素のプロパティを拡張できます。
-
(オプション)要素の右側の 3 つのドットをタップして「削除」を選択すると、要素を削除できます。
note note NOTE 子ノードを持つ複合要素またはコレクション要素を削除すると、その子ノードも削除されます。 -
(オプション)データディクショナリの構造ペインの要素を選択し、フィールドと変数リストパネルで、要素に関連する必要な属性を変更または追加します。要素に関連付けられた必要な属性を変更または追加します。
-
「保存」を選択します。
1 つ以上のデータディクショナリのコピーを作成 create-copies-of-one-or-more-data-dictionary
既存のデータディクショナリをコピーしてペーストすることにより、そのデータディクショナリに類似するプロパティやコンテンツを持つ 1 つ以上のデータディクショナリをすばやく作成することができます。
- データディクショナリのリストで、目的のデータディクショナリを選択します。UI にコピーアイコンが表示されます。
- 「コピー」を選択します。UI に貼り付けアイコンが表示されます。
- 「貼り付け」を選択します。貼り付けダイアログが表示されます。システムにより、新しいデータディクショナリに名前とタイトルが自動的に割り当てられます。
- 必要に応じて、保存するデータディクショナリのコピーのタイトルと名前を編集します。
- 「貼り付け」を選択します。データディクショナリのコピーが作成されます。これで、新しく作成されたデータディクショナリで必要な変更を行うことができます。
データディクショナリ要素を参照するドキュメントフラグメントまたは文書を確認する see-the-document-fragments-or-documents-that-refer-to-a-data-dictionary-element
データディクショナリの編集中または表示中は、データディクショナリ内のどの要素が、どのテキスト、条件、レター、インタラクティブ通信に参照されているか確認できます。
-
データディクショナリを編集するには、次のいずれかの操作を行います。
- データディクショナリにポインタを合わせ、「編集」を選択します。
- データディクショナリを選択し、ヘッダーにある「編集」を選択します。
- データディクショナリにポインタを合わせ、「選択」を選択します。その後、ヘッダーにある「編集」を選択します。
または、データディクショナリを選択して表示します。
-
データディクショナリ内では、単純型要素を選択します。複合要素とコレクション要素には参照がありません。
要素の基本プロパティ、詳細プロパティと共に「貸したコンテンツ」も表示されます。
-
「貸したコンテンツ」を選択します。
「貸したコンテンツ」タブでは、テキスト、条件、レター、インタラクティブ通信が表示されます。それぞれの見出しには、選択した要素の参照数も表示されます。
-
要素を参照するアセットについて、見出しを選択して名前を確認します。
-
他の要素の貸したコンテンツを表示するには、その要素を選択します。
-
要素を参照するアセットを表示するには、名前を選択します。アセット、レターまたはインタラクティブ通信がブラウザーに表示されます。
テストデータの操作 working-with-test-data
-
データディクショナリページで「選択」を選択します。
-
テストデータをダウンロードするデータディクショナリを選択し、「サンプル XML データをダウンロード」を選択します。
-
警告メッセージで「OK」を選択します。XML ファイルがダウンロードされます。
-
XML ファイルを Notepad その他の XML エディターで開きます。XML ファイルは、データディクショナリおよび要素内のプレースホルダー文字列と同じ構造を持っています。レターのテストに使うデータでプレースホルダー文字列を置き換えます。
code language-xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Company> <Name>string</Name> <Type>string</Type> <HeadOfficeAddress> <Street>string</Street> <City>string</City> <State>string</State> <Zip>string</Zip> </HeadOfficeAddress> <SalesOfficeAddress> <Street>string</Street> <City>string</City> <State>string</State> <Zip>string</Zip> </SalesOfficeAddress> <HeadCount>1.0</HeadCount> <CEO> <PersonName> <FirstName>string</FirstName> <MiddleName>string</MiddleName> <LastName>string</LastName> </PersonName> <DOB>string</DOB> <CurrAddress> <Street>string</Street> <City>string</City> <State>string</State> <Zip>string</Zip> </CurrAddress> <DOJ>14-04-1973</DOJ> <Phone>1.0</Phone> </CEO> </Company>
note note NOTE この例では、XML がコレクション要素に 3 つの値のスペースを作成しますが、値の数は必要に応じて増減できます。 -
データエントリの作成後は、テストデータを含むレターをプレビューする際にこの XML ファイルを使用できます。
テストデータは DD で追加できます(DD を選択して「テストデータをアップロード」を選択し、この XML ファイルをアップロードします)。
この操作を行うと、レターの通常の(カスタムではない)プレビューの際に、この XML データが使用されるようになります。また、「カスタム」を選択して、この XML をアップロードできます。
サンプル samples
データディクショナリ実装の詳細コードサンプルを以下に示します。
データディクショナリにアップロード可能なサンプルスキーマ sample-schema-that-can-be-uploaded-to-the-data-dictionary
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="DCT" targetNamespace="DCT" xmlns:xs="https://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Company">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Type" type="xs:anySimpleType"/>
<xs:element name="HeadOfficeAddress" type="Address"/>
<xs:element name="SalesOfficeAddress" type="Address" minOccurs="0"/>
<xs:element name="HeadCount" type="xs:integer"/>
<xs:element name="CEO" type="Employee"/>
<xs:element name="Workers" type="Employee" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Employee">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="CurrAddress" type="Address"/>
<xs:element name="DOJ" type="xs:date"/>
<xs:element name="Phone" type="xs:integer"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="PersonName" type="Name"/>
<xs:element name="DOB" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Name">
<xs:sequence>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="MiddleName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Address">
<xs:sequence>
<xs:element name="Street" type="xs:string"/>
<xs:element name="City" type="xs:string"/>
<xs:element name="State" type="xs:string"/>
<xs:element name="Zip" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
DDE に関連付けられる共通属性 common-attributes-associated-with-a-dde
DDE に関連付けられる共通属性について、以下の表に示します。
計算済みデータディクショナリ要素 computedddelements
データディクショナリには、計算済み要素を含めることもできます。計算済みデータディクショナリ要素は、常に式と関連付けられます。実行時にこの式が評価され、データディクショナリ要素の値が取得されます。計算済み DDE 値は、他の DDE 値またはリテラルによる関数です。デフォルトでは、JSP 式言語(EL)の式がサポートされます。EL 式は ${ } の文字を使用します。有効な式にはリテラル、演算子、変数(データディクショナリ要素の参照)および関数呼び出しを含めることができます。式においてデータディクショナリ要素を参照する際は、DDE の参照名を使用します。あるデータディクショナリに含まれるすべてのデータディクショナリ要素は、それぞれ一意の参照名によって特定されます。
計算済み DDE PersonFullName は、${PersonFirstName} ${PersonLastName} などの EL 連結式に関連付けることができます。
XSD とデータディクショナリの間のデータタイプマッピング data-type-mapping-between-xsd-and-data-dictionary-br
XSD を書き出すには、固有のデータマッピングが必要になります。これについては、次の表に示します。DDI 列は、DDI で利用できる DDE 値のタイプを示します。
データディクショナリからサンプルデータファイルをダウンロード download-a-sample-data-file-from-a-data-dictionary
データディクショナリを作成したら、XML サンプルデータファイルをダウンロードすると、テキストのエントリを作成できます。
-
データディクショナリページで「選択」を選択し、目的のデータディクショナリを選択します。
-
「サンプル XML データをダウンロード」を選択します。
-
警告メッセージで「OK」を選択します。
Correspondence Management は、選択されたデータディクショナリの構造に基づいて XML ファイルを作成し、<data-dictionary-name>-SampleData の名称でコンピューターにダウンロードします。これにより、このファイルを XML エディターまたはテキストエディターで編集することで、レターの作成の際にデータエントリを作成することができるようになります。
メタデータの国際化 internationalization-of-meta-data
同じレターを異なる言語で顧客へ送信する場合、データディクショナリとデータディクショナリ要素の表示名、説明、および列挙値のセットをローカライズすることができます。
データディクショナリのローカライズ localize-data-dictionary
-
データディクショナリページで「選択」を選択し、目的のデータディクショナリを選択します。
-
「ローカリゼーションデータをダウンロード」を選択します。
-
警告メッセージで「OK」を選択します。Correspondence Management が DataDictionary-<DDname>.zip のという名前の zip ファイルをお使いのコンピューターにダウンロードします。
-
Zip ファイルには .properties ファイルが含まれています。このファイルは、ダウンロードされたデータディクショナリを定義します。プロパティファイルのコンテンツは以下のようになります。
code language-ini #Wed May 20 16:06:23 BST 2015 DataDictionary.EmployeeDD.description= DataDictionary.EmployeeDD.displayName=EmployeeDataDictionary DataDictionaryElement.name.description= DataDictionaryElement.name.displayName=name DataDictionaryElement.person.description= DataDictionaryElement.person.displayName=person
プロパティファイルの構造は、データディクショナリの説明と表示名、およびデータディクショナリ内のデータディクショナリの各要素をそれぞれ 1 行で定義します。さらに、プロパティファイルは各データディクショナリ要素の列挙値セットを 1 行で定義します。データディクショナリと同様に、対応するプロパティファイルは複数のデータディクショナリ要素の定義を持つことができます。さらに、このファイルには 1 つ以上の列挙値セットの定義を含めることができます。
-
別のロケールの .properties ファイルをアップデートするには、ファイルの表示名と説明の値をアップデートします。ローカライズする各言語でファイルのインスタンスをさらに作成します。サポートする言語はフランス語、ドイツ語、日本語、英語のみです。
-
更新したプロパティファイルを、それぞれ次の名前で保存します。
_fr_FR.properties French
_de_DE.properties German
_ja_JA.properties Japanese
_en_EN.properties English
-
.properties ファイル(または複数のロケール用のファイル)を 1 つの .zip ファイルにアーカイブします。
-
データディクショナリページで、詳細/ローカリゼーションデータのアップロード を選択し、ローカライズ済みのプロパティファイルを含む zip ファイルを選択します。
-
ローカリゼーションの変更を表示するには、ブラウザーのロケールを変更します。
データディクショナリの検証 ddvalidations
データディクショナリの作成または更新時に、データディクショナリエディターは以下の検証を強制的に行います。
- 複合タイプのみを、データディクショナリのトップレベル要素として使用できます。
- リーフレベルでは、複合要素とコレクション要素を使用できません。リーフレベルでは、プリミティブ(文字列、日付、数値、ブーリアン)要素のみが許可されます。この検証では、子 DDE なしの複合要素やコレクション要素が存在しないことが確認されます。
- データディクショナリを作成するために XSD ファイルをアップロードする際、データディクショナリエディターは、データディクショナリを作成するための最上位要素(複数存在する場合)を要求します。
- データディクショナリに必要なパラメーターは、この名前だけです。
- 親 DDE(複合)には、同じ名前の 2 つの子を指定できません。
- DDE が必須のパラメーターでない場合にのみ、DDE が計算済みとしてマークされていることを確認します。必須の要素の計算はできず、計算済みの要素を必須にすることもできません。また、コレクション要素と複合要素は計算済み要素にはできません。
- DDE が計算済みではない場合のみ、DDE が必須としてマークされていることを確認します。また、コレクションのタイプ(コレクション要素の唯一の子)を示す「collectionElement」ではないことを確認します。
- データディクショナリまたは DDE の extendedProperties では、空のキーや重複するキーは許可されません。
- 拡張プロパティのキーまたは値の内部でコロン(:)や縦棒(|)を使用しないでください。これらの禁止文字の使用について検証は行われません。
データディクショナリレベルで適用される検証
- データディクショナリ名は null にできません。
- データディクショナリ名には、英数字のみを使用する必要があります。
- データディクショナリの子要素のリストは、null や空にできません。
- データディクショナリに複数のトップレベルのデータディクショナリ要素を含めることはできません。
- 複合タイプのみを、データディクショナリのトップレベル要素として使用できます。
データディクショナリ要素レベルで適用される検証
- どの DDE 名も null にできません。またスペースを含めることはできません。
- すべての DDE の要素タイプを「not null/non null」にする必要があります。
- すべての DDE 参照名を null にすることはできません。
- すべての DDE 参照名は、一意である必要があります。
- すべての DDE 参照には、英数字およびアンダースコア「_」しか使用できません。
- すべての DDE 表示名には、英数字およびアンダースコア「_」しか使用できません。
- リーフレベルでは、複合要素とコレクション要素を使用できません。リーフレベルでは、プリミティブ(文字列、日付、数値、ブーリアン)要素のみが許可されます。この検証では、子 DDE なしの複合要素やコレクション要素が存在しないことが確認されます。
- 複合親 DDE(複合)は、同じ名前の子を 2 つ持つことはできません。
- ENUM サブタイプは、文字列および数値要素にのみ使用します。
- コレクション要素および複合要素は計算できません。
- DDE は、計算と必須の両方を行うことはできません。
- 計算済み DDE には有効な式を含める必要があります。
- 計算済み DDE に XML バインディングは指定できません。
- コレクション DDE のタイプを示す DDE は、計算済みまたは必須の要素として指定できません。
- サブタイプが列挙型の DDE は、値セットを null または空にすることはできません。
- コレクション DDE の XML バインディングで、属性へのマッピングはできません。
- XML バインディング構文は、有効なものである必要があります(@ を 1 つだけ使用する、@ は属性名の前にのみ使用するなど)。
データディクショナリ要素の XML スキーマへのマッピング mappingddetoschema
データディクショナリは XML スキーマから作成することも、データディクショナリユーザーインターフェイスを使用して作成することもできます。データディクショナリ内のすべてのデータディクショナリ要素(DDE)には XML バインディングフィールドがあり、DDE のバインディングを XML スキーマの要素に格納できます。各 DDE のバインディングは、親 DDE に対する相対パスにします。
データディクショナリの実装の詳細を示すサンプルモデルとコードサンプルについて以下に示します。
単純な(プリミティブ)要素のマッピング mapping-simple-primitive-elements
プリミティブ DDE とは、本来アトミックなフィールドまたは属性を表します。複合タイプ(複合 DDE)または繰り返し要素(コレクション DDE)以外で定義されたプリミティブ DDE は、XML スキーマ内のどの場所にも格納できます。プリミティブ DDE に対応するデータの場所は、その親 DDE のマッピングには依存しません。プリミティブ DDE は、XML バインディングフィールドのマッピング情報を使用して値を特定します。マッピングは次のいずれかに解釈されます。
- 属性
- 要素
- テキストコンテキスト
- なし(無視された DDE)
次の例は、単純なスキーマを示しています。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema">
<xs:element name='age' type='integer'/>
<xs:element name='price' type='decimal'/>
</xs:schema>
複合要素のマッピング mapping-composite-elements
複合要素ではバインディングがサポートされていません。バインディングが提供されても無視されます。プリミティブタイプの構成要素であるすべての子 DDE のバインディングは、絶対パスである必要があります。複合 DDE の子要素に対して絶対マッピングが使用できるので、XPath バインディングの観点で柔軟性が高くなります。複合 DDE を XML スキーマの複合タイプ要素にマッピングすると、その子要素のバインディングの範囲が制限されます。
以下の例は、メモ(note)のスキーマを示しています。
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
コレクション要素のマッピング mapping-collection-elements
コレクション要素は、基数が 1 より大きい別のコレクション要素にのみマッピングされます。コレクション DDE の子 DDE には、親の XML バインディングに対する相対(ローカル)XML バインディングが含まれます。コレクション要素の子 DDE は親と同じ基数を持つ必要があるので、基数の制約を守るために相対バインディングを必須とし、子 DDE が繰り返しなしの XML スキーマ要素を指さないようにする必要があります。以下の例では、「TokenID」の基数は、親コレクション DDE の「Tokens」と同じである必要があります。
コレクション DDE を XML スキーマ要素にマッピングする場合:
-
コレクション要素に対応する DDE のバインディングは、絶対 XPath である必要があります。
-
コレクション要素のタイプを表す DDE には、バインディングを指定しません。指定しても、バインディングは無視されます。
-
コレクション要素のすべての子 DDE のバインディングは、親コレクション要素の相対パスである必要があります。
以下の XML スキーマは、名前が Tokens で maxOccurs 属性が「unbounded」の要素を宣言しています。つまり、Tokens はコレクション要素です。
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Tokens>
<TokenID>string</TokenID>
<TokenText>
<TextHeading>string</TextHeading>
<TextBody>string</TextBody>
</TokenText>
</Tokens>
<Tokens>
<TokenID>string</TokenID>
<TokenText>
<TextHeading>string</TextHeading>
<TextBody>string</TextBody>
</TokenText>
</Tokens>
<Tokens>
<TokenID>string</TokenID>
<TokenText>
<TextHeading>string</TextHeading>
<TextBody>string</TextBody>
</TokenText>
</Tokens>
</Root>
このサンプルに関連付けられる Token.xsd は次のようになります。
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Tokens" type="TokenType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="TokenType">
<xs:sequence>
<xs:element name="TokenID" type="xs:string"/>
<xs:element name="TokenText">
<xs:complexType>
<xs:sequence>
<xs:element name="TextHeading" type="xs:string"/>
<xs:element name="TextBody" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>