Flex Gateway新着情報
Governance新着情報
Monitoring API Managerxmlschema!
モジュールローダーを使用して、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
次の例は、型を使用して XML スキーマファイルを DataWeave スクリプトにインポートする方法を示しています。
User.xsd
):<?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>
%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 型ディレクティブに変換されますが、この 2 つの型モデルは異なるため、結果として DataWeave 型で表される XML モデルがまったく同じにはならない可能性があります。 次のファイルは、XSD がどのように DataWeave コードに変換されるのかを示しています。これらのファイルは動的に生成されて表示されませんが、生成された XSD ファイルの型がどのようにコンシュームされるのかを理解するのに役立ちます。
DataWeave では、次の XSD 型がサポートされています。xs
は XMLSchema のデフォルトの名前空間です。
XSD 型 | DataWeave 型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?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>
%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
ディレクティブ。
次の例は、ルート要素を宣言する方法を示しています。
<?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>
%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
名が含まれます。
次の例は、複雑型を宣言する方法を示しています。
<?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>
%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
XSD スキーマファイルの imports または includes を使用すると、指定された schemaLocation
にあるスキーマファイルを参照するために XML スキーマモジュールローダーを使用する import
ディレクティブが DataWeave モジュールに含まれます。この場所は、メインスキーマに相対的に宣言されている必要があります。次の例の型の選択の使用方法に注意してください。
<?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>
%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
この XML スキーマ構造を DataWeave の UnionType
にマップできます。
<?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>
%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 に変換されるこの名前空間では、これらの型の選択および移動が必要になります。
<?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>
%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