XML スキーマをフォームモデルとして使用してアダプティブフォームを作成する場合は、XML スキーマに関する基本的な知識が必要です。 また、この記事を読む前に以下のコンテンツを読んでおくことをお勧めします。
AEM Formsでは、既存の XML スキーマをフォームモデルとして使用したアダプティブフォームの作成がサポートされています。 この XML スキーマは、組織のバックエンドシステムによってデータが生成または使用される構造を表します。
XML スキーマの使用の主な特長は、以下のとおりです。
XML スキーマは、単純な要素と複雑な要素のタイプで構成されます。 要素には、その要素にルールを追加する属性が含まれています。これらの要素と属性がアダプティブフォームにドラッグされると、対応するアダプティブフォームコンポーネントに自動的にマッピングされます。
この XML 要素とアダプティブフォームコンポーネントのマッピングは、次のようになります。
XML 要素または属性 | アダプティブフォームコンポーネント |
---|---|
xs:string |
テキストボックス |
xs:boolean |
チェックボックス |
|
数値ボックス |
xs:date |
日付選択 |
xs:enumeration
|
ドロップダウン |
任意の複合型要素 | パネル |
XML スキーマの例を次に示します。
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="https://adobe.com/sample.xsd"
xmlns="https://adobe.com/sample.xsd"
xmlns:xs="https://www.w3.org/2001/XMLSchema"
>
<xs:element name="sample" type="SampleType"/>
<xs:complexType name="SampleType">
<xs:sequence>
<xs:element name="leaderName" type="xs:string" default="Enter Name"/>
<xs:element name="assignmentStartBirth" type="xs:date"/>
<xs:element name="gender" type="GenderEnum"/>
<xs:element name="noOfProjectsAssigned" type="IntType"/>
<xs:element name="assignmentDetails" type="AssignmentDetails"
minOccurs="0" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="AssignmentDetails">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="durationOfAssignment" type="xs:unsignedInt" use="required"/>
<xs:attribute name="numberOfMentees" type="xs:unsignedInt" use="required"/>
<xs:attribute name="descriptionOfAssignment" type="xs:string" use="required"/>
<xs:attribute name="financeRelatedProject" type="xs:boolean"/>
</xs:complexType>
<xs:simpleType name="IntType">
<xs:restriction base="xs:int">
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="GenderEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Female"/>
<xs:enumeration value="Male"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
XML スキーマにはルート要素が 1 つだけ含まれていることを確認します。2 つ以上のルート要素を持つ XML スキーマはサポートされていません。
次の属性を XML スキーマ要素に追加して、関連するアダプティブフォームのフィールドに特別なプロパティを追加できます。
スキーマプロパティ | アダプティブフォームでの使用 | サポート対象 |
---|---|---|
use=required |
フィールドを必須にする |
属性 |
default="default value" |
デフォルト値を追加します | 要素と属性 |
minOccurs="3" |
最小オカレンスを指定します ( 繰り返し可能なサブフォーム(複合型)の場合 ) |
要素(複合型) |
maxOccurs="10"
|
最大発生回数を指定します ( 繰り返し可能なサブフォーム(複合型)の場合 ) |
要素(複合型) |
スキーマ要素をアダプティブフォームにドラッグすると、デフォルトのキャプションが次の方法で生成されます。
例えば、userFirstName
スキーマ要素を追加した場合、アダプティブフォームで生成されるキャプションは User First Name
となります。
XML スキーマの要素に以下の制限を追加して、アダプティブフォームコンポーネントで許容される値を制限できます。
スキーマプロパティ |
データタイプ |
説明 |
コンポーネント |
|
文字列 |
コンポーネントで許可される最大桁数を指定します。 桁数は 1 以上である必要があります。 |
|
|
文字列 |
数値および日付の上限を指定します。デフォルトでは、最大値が含まれます。 |
|
|
文字列 |
数値および日付の下限を指定します。デフォルトでは、最小値が含まれます。 |
|
|
ブール値 |
true の場合、フォームのコンポーネントで指定された数値または日付は、maximum プロパティに指定された数値または日付よりも小さい値である必要があります。 false の場合、フォームのコンポーネントで指定された数値または日付は、maximum プロパティに指定された数値または日付以下の値である必要があります。 |
|
|
ブール値 |
true の場合、フォームのコンポーネントで指定された数値または日付は、minimum プロパティに指定された数値または日付よりも大きい値である必要があります。 false の場合、フォームのコンポーネントで指定された数値または日付は、minimum プロパティに指定された数値または日付以上の値である必要があります。 |
|
|
文字列 |
コンポーネントで許可される最小文字数を指定します。最小の長さは 0 以上である必要があります。 |
|
|
文字列 |
コンポーネントで許可される最大文字数を指定します。最大長は 0 より大きい値にする必要があります。 |
|
|
文字列 |
1 つのコンポーネントで使用できる正確な文字数を指定します。 長さは 0 以上である必要があります。 |
|
|
文字列 |
コンポーネントで許可する小数点以下の桁数の最大値を指定します。 fractionDigits は、0 以上である必要があります。 |
|
|
文字列 |
文字のシーケンスを指定します。文字が指定されたパターンに適合すると、コンポーネントはその文字を受け入れます。 pattern プロパティは、対応するアダプティブフォームコンポーネントの検証パターンにマッピングされます。 |
|
ツリーのどの要素がどの XML 要素に関連付けられているかを知るには、どうすればよいですか?
コンテンツファインダーで要素をダブルクリックすると、ポップアップにフィールド名と、 bindRef
. このプロパティはツリー要素をスキーマ内の要素または属性にマッピングします。
bindRef フィールドは、ツリー要素とスキーマ内の要素または属性の間の関連付けを示します。
属性には、bindRef
値に @
記号が含まれているので、要素と区別できます。例えば、/config/projectDetails/@duration
。
繰り返し可能なサブフォーム(minOccurs 値または maxOccurs 値が 1 より大きい)では、サブフォーム(任意の複合型から生成された構造)の個々の要素をドラッグできないのはなぜですか?
繰り返し可能なサブフォームでは、完全なサブフォームを使用する必要があります。選択した一部のフィールドのみを使用する場合は、構造全体を使用し、不要部分を削除します。
コンテンツファインダーに長く複雑な構造があります。特定の要素を見つけるにはどうすればよいですか?
以下の 2 つのオプションがあります。
bindRef とは
bindRef
は、アダプティブフォームコンポーネントとスキーマ要素または属性との接続です。これは、このコンポーネントまたはフィールドから取得された値が出力 XML で使用できる、XPath
を指定しています。bindRef
は、事前入力された XML からフィールドの値を事前に入力する際にも使用されます。