---
schema_version: "1"
id: b7f7d4652880f93b8d59ae4618ef7c5f1299d8b2bea812ce864faf0e3b7d0be2
title: XML スキーマの再利用
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.5/dataweave-type-reuse-xml-schema.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.5/dataweave-type-reuse-xml-schema
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 9a96ef81bb4f263b87edd21a9d1c60d28002f30e1de5b5943cf90ed22842924a
description: MuleSoft Documentation Site
release: "2.5"
latest: false
---
# XML スキーマの再利用

`xmlschema!`​ モジュールローダーを使用して、XML スキーマファイル (​`.xsd`​) をモジュールとして DataWeave スクリプトにインポートできます。このローダーにより、各自のスキーマで宣言されている型を DataWeave で直接使用できます。 DataWeave は、XSD ファイルを読み込み、ファイルの宣言を他の DataWeave モジュールの型と同じようにアクセスできる DataWeave 型ディレクティブを変換します。ディレクティブを使用して、新しい型を作成したり、変数の型をチェックしたり、パターンを照合したり、型を使用する新しい関数を宣言したりします。DataWeave では、これらの型の使用方法に制限はありません。

次の例は、DataWeave スクリプトでパス ​`org/weave/myfolder/User.xsd`​ の XSD ファイルを検索する方法を示しています。

import \* from xmlschema!org::weave::myfolder::User

## [](#インポート構文)インポート構文

XML スキーマの型をインポートするには、以下の構文を使用します。

- `typeToImport`​: `*`​ を使用してスキーマで定義されているすべての型をインポートしたり、スキーマの 1 つの型 (​`Root`​ など) をインポートしたりできます。異なる名前の XML スキーマの型 (​`Root as Person`​ など) をインポートすることもできます。これにより、スクリプトでその名前を使用して型を参照できます。
- `pathToXsdSchemaFile`​: スキーマファイルへのパスを指定するには、ファイルの区切り文字を ​`::`​ に置き換えて、ファイル名の ​`.xsd`​ 拡張子を削除します。たとえば、スキーマへのパスが ​`example/schema/Person.xsd`​ の場合、​`example::schema::Person`​ を使用します。

import \_typesToImport\_ from xmlschema!\_pathToXsdSchemaFile\_

次の例は、型をインポートする方法を示しています。

import \* from xmlschema!example::schema::Person

## [](#dataweave-スクリプトでの型の使用)DataWeave スクリプトでの型の使用

次の例は、型を使用して XML スキーマファイルを DataWeave スクリプトにインポートする方法を示しています。

XSD ファイル (​`User.xsd`​):

```XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Root">
        <xs:complexType>
            <xs:choice>
                <xs:element name="employee" type="employee"/>
                <xs:element name="member" type="member"/>
            </xs:choice>
            <xs:attribute name="id" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="employee">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>


    <xs:complexType name="member">
        <xs:sequence>
            <xs:element name="id" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
```

DataWeave スクリプト:

```dataweave
%dw 2.0
import * from xmlschema!org::weave::myfolder::User


{
      Root @(id:"test") :{
        employee: {
            "name": "Mariano"
        }
      } match {
             case is Root -> true
             else -> false
        }
}
```

## [](#xml-モデルから-dataweave-型へ)XML モデルから DataWeave 型へ

XML スキーマの型システムは DataWeave 型ディレクティブに変換されますが、この 2 つの型モデルは異なるため、結果として DataWeave 型で表される XML モデルがまったく同じにはならない可能性があります。 次のファイルは、XSD がどのように DataWeave コードに変換されるのかを示しています。これらのファイルは動的に生成されて表示されませんが、生成された XSD ファイルの型がどのようにコンシュームされるのかを理解するのに役立ちます。

### [](#組み込みの-xml-スキーマの型)組み込みの XML スキーマの型

DataWeave では、次の XSD 型がサポートされています。​`xs`​ は XMLSchema のデフォルトの名前空間です。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">XSD 型</th>
<th class="tableblock halign-left valign-top">DataWeave 型</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:number</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:int</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:integer</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:long</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:short</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:byte</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:double</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:decimal</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:unsignedLong</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:unsignedInt</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:unsignedShort</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:unsignedByte</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:positiveInteger</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:negativeInteger</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:nonNegativeInteger</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:nonPositiveInteger</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:hexBinary</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Binary</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:base64Binary</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Binary</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:boolean</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:any</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:string</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:normalizedString</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:datetime</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:time</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Time</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>xs:date</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocalDateTime</code></p></td>
</tr>
</tbody>
</table>

XSD:

```XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"  xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Root">
        <xs:complexType>
            <xs:all>
                <xs:element name="string" type="xs:string"/>
                <xs:element name="normalizedString" type="xs:normalizedString"/>


                <xs:element name="integer" type="xs:integer"/>
                <xs:element name="negativeInteger" type="xs:negativeInteger"/>
                <xs:element name="int" type="xs:int"/>
                <xs:element name="unsignedInt" type="xs:unsignedInt"/>
                <xs:element name="unsignedLong" type="xs:unsignedLong"/>
                <xs:element name="unsignedShort" type="xs:unsignedShort"/>
                <xs:element name="float" type="xs:float"/>
                <xs:element name="double" type="xs:double"/>


                <xs:element name="date" type="xs:date"/>
                <xs:element name="dateTime" type="xs:dateTime"/>
                <xs:element name="time" type="xs:time"/>


                <xs:element name="boolean" type="xs:boolean"/>


                <xs:element name="hexBinary" type="xs:hexBinary"/>
                <xs:element name="base64Binary" type="xs:base64Binary"/>
                <xs:element name="decimal" type="xs:decimal"/>








            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>
```

生成された DataWeave モジュール

```dataweave
%dw 2.0


type RootElementDefinition = {| Root: { string: String, normalizedString: String, integer: Number, negativeInteger: Number, int: Number, unsignedInt: Number, unsignedLong: Number, unsignedShort: Number, float: Number, double: Number, date: LocalDateTime, dateTime: DateTime, time: Time, boolean: Boolean, hexBinary: Binary, base64Binary: Binary, decimal: Number } |}


type Root = RootElementDefinition
```

### [](#ルート要素の宣言)ルート要素の宣言

XSD ファイルで宣言されている各ルート要素 (​`<xs:element>`​) では、以下が生成されます。

- 要素名の後に ​`ElementDefinition`​ 拡張が続く DataWeave ​`type`​ ディレクティブ。
- XSD のすべてのルート要素で構成される、​`Union`​ 型の ​`Root`​ という ​`type`​ ディレクティブ。

次の例は、ルート要素を宣言する方法を示しています。

XSD:

```XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">


    <xs:element name="Root">
        <xs:complexType>
            <xs:sequence>
                <xs:element type="xs:string" name="color" default="Red"/>
                <xs:element type="xs:integer" name="age" default="12"/>
            </xs:sequence>
            <xs:attribute type="xs:string" name="type" default="ALBA"/>
        </xs:complexType>
    </xs:element>


    <xs:element name="AnotherRoot">
        <xs:complexType>
            <xs:sequence>
                <xs:element type="xs:string" name="name" default="Red"/>
            </xs:sequence>
            <xs:attribute type="xs:string" name="type"/>
        </xs:complexType>
    </xs:element>
</xs:schema>
```

生成された DataWeave モジュール

```dataweave
%dw 2.0


type AnotherRootElementDefinition = {| AnotherRoot @("type"?: String): {- name: String -} |}


type RootElementDefinition = {| Root @("type"?: String): {- color: String, age: Number -} |}


type Root = AnotherRootElementDefinition | RootElementDefinition
```

### [](#複雑型)複雑型

各自のスキーマで参照したり、他の構造で再利用したりできる、スキーマの最上位要素として宣言されている名前付き複雑型は、独自の型ディレクティブを生成します。これらの型ディレクティブ名には、​`Definition`​ 拡張が続く ​`complextype`​ 名が含まれます。

次の例は、複雑型を宣言する方法を示しています。

XSD:

```XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Root">
        <xs:complexType>
            <xs:choice>
                <xs:element name="employee" type="employee"/>
                <xs:element name="member" type="member"/>
            </xs:choice>
            <xs:attribute name="id" default="foo"/>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="employee">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>


    <xs:complexType name="member">
        <xs:sequence>
            <xs:element name="id" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
```

生成された DataWeave モジュール

```dataweave
%dw 2.0


type EmployeeDefinition = { employee: {- name: String -} }


type MemberDefinition = { member: {- id: String -} }


type RootElementDefinition = {| Root @(id?: String): {| employee: EmployeeDefinition.employee |} | {| member: MemberDefinition.member |} |}


type Root = RootElementDefinition
```

### [](#importsincludes)Imports/Includes

XSD スキーマファイルの imports または includes を使用すると、指定された ​`schemaLocation`​ にあるスキーマファイルを参照するために XML スキーマモジュールローダーを使用する ​`import`​ ディレクティブが DataWeave モジュールに含まれます。この場所は、メインスキーマに相対的に宣言されている必要があります。次の例の[型の選択](https://docs.mulesoft.com/jp/dataweave/2.5/dataweave-selecting-types)の使用方法に注意してください。

XSD:

```XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
						xmlns:common="http://common.com/COMMON">


	<xsd:import schemaLocation="common.xsd" namespace="http://common.com/COMMON" />


	<xsd:element name="Root" type="common:RequestHeader"/>


</xsd:schema>
```

生成された DataWeave モジュール

```dataweave
%dw 2.0


ns ns0 http://common.com/COMMON


import xmlschema!org::mule::weave::v2::module::xmlschema::moduleloader::imports::common


type RootElementDefinition = {| Root: common::RequestHeaderDefinition.ns0#RequestHeader |}


type Root = RootElementDefinition
```

### [](#choice)Choice

この XML スキーマ構造を DataWeave の ​`UnionType`​ にマップできます。

XSD:

```XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Root">
        <xs:complexType>
            <xs:choice>
                <xs:element name="employee" type="employee"/>
                <xs:element name="member" type="member"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="employee">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>


    <xs:complexType name="member">
        <xs:sequence>
            <xs:element name="id" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
```

生成された DataWeave モジュール

```dataweave
%dw 2.0


type EmployeeDefinition = { employee: {- name: String -} }


type MemberDefinition = { member: {- id: String -} }


type RootElementDefinition = {| Root: {| employee: EmployeeDefinition.employee |} | {| member: MemberDefinition.member |} |}


type Root = RootElementDefinition
```

### [](#名前空間)名前空間

XML スキーマファイルの名前空間は、DataWeave 型ディレクティブに直接変換されます。

次の例は、要素が存在する特定の ​`targetNamespace`​ 属性を設定する方法を示しています。DataWeave に変換されるこの名前空間では、これらの型の選択および移動が必要になります。

XSD:

```XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema attributeFormDefault="unqualified" targetNamespace="http://NamespaceTest.com/CommonTypes" elementFormDefault="qualified"  xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Root">
        <xs:complexType>
            <xs:all>
                <xs:element name="string" type="xs:string"/>
                <xs:element name="normalizedString" type="xs:normalizedString"/>
                <xs:element name="integer" type="xs:integer"/>
                <xs:element name="negativeInteger" type="xs:negativeInteger"/>
                <xs:element name="int" type="xs:int"/>
                <xs:element name="unsignedInt" type="xs:unsignedInt"/>
                <xs:element name="unsignedLong" type="xs:unsignedLong"/>
                <xs:element name="unsignedShort" type="xs:unsignedShort"/>
                <xs:element name="float" type="xs:float"/>
                <xs:element name="double" type="xs:double"/>
                <xs:element name="date" type="xs:date"/>
                <xs:element name="dateTime" type="xs:dateTime"/>
                <xs:element name="time" type="xs:time"/>
                <xs:element name="boolean" type="xs:boolean"/>
                <xs:element name="hexBinary" type="xs:hexBinary"/>
                <xs:element name="base64Binary" type="xs:base64Binary"/>
                <xs:element name="decimal" type="xs:decimal"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>
```

生成された DataWeave モジュール

```dataweave
%dw 2.0


ns ns0 http://NamespaceTest.com/CommonTypes


type RootElementDefinition = {| ns0#Root: { ns0#string: String, ns0#normalizedString: String, ns0#integer: Number, ns0#negativeInteger: Number, ns0#int: Number, ns0#unsignedInt: Number, ns0#unsignedLong: Number, ns0#unsignedShort: Number, ns0#float: Number, ns0#double: Number, ns0#date: LocalDateTime, ns0#dateTime: DateTime, ns0#time: Time, ns0#boolean: Boolean, ns0#hexBinary: Binary, ns0#base64Binary: Binary, ns0#decimal: Number } |}


type Root = RootElementDefinition
```