Entwerfen eines JSON-Schemas für ein adaptives Formular (Kernkomponenten) creating-adaptive-forms-using-json-schema

Version
Artikel-Link
Foundation
Hier klicken
Kernkomponenten
Dieser Artikel

Voraussetzungen prerequisites

Die Erstellung eines adaptiven Formulars basierend auf Kernkomponenten mithilfe eines JSON-Schemas als Formularmodell erfordert grundlegende Kenntnisse des JSON-Schemas. Es wird empfohlen, den folgenden Inhalt vor diesem Artikel durchzulesen.

Verwenden eines JSON-Schemas als Formularmodell using-a-json-schema-as-form-model

Adobe Experience Manager Forms unterstützt die Erstellung eines adaptiven Formulars basierend auf Kernkomponenten durch Verwendung eines vorhandenen JSON-Schemas als Formularmodell. Dieses JSON-Schema stellt die Struktur dar, in der Daten vom Back-End-System in Ihrem Unternehmen produziert oder genutzt werden. Das JSON-Schema, das Sie verwenden, sollte mit den Spezifikationen der Version 4 konform sein.

Die wichtigsten Funktionen bei Verwendung eines JSON-Schemas sind wie folgt:

  • Die Struktur der JSON-Datei wird als Baumstruktur in der Registerkarte für die Content-Suche im Authoring-Modus für ein adaptives Formular angezeigt. Sie können Elemente aus der JSON-Hierarchie in das adaptive Formular ziehen, basierend auf Kernkomponenten.
  • Sie können das Formular mit JSON-Elementen vorausfüllen, die mit dem zugehörigen Schema konform sind.
  • Bei der Übermittlung werden die benutzerseitig eingegebenen Daten in einem JSON-Format gesendet, das dem zugehörigen Schema entspricht.
  • Sie können das Formular auch basierend auf dem JSON-Schema gemäß den Spezifikationen der Version 2012-20 erstellen.

Ein JSON-Schema besteht aus einfachen und komplexen Elementtypen. Die Elemente weisen Attribute auf, die dem Element Regeln hinzufügen. Wenn diese Elemente und Attribute auf ein adaptives Formular gezogen werden, werden sie automatisch den entsprechenden Komponenten des adaptiven Formulars zugeordnet.

Diese Zuordnung von JSON-Elementen zu Komponenten adaptiver Formulare ist wie folgt:

"birthDate": {
              "type": "string",
              "format": "date",
              "pattern": "date{DD MMMM, YYYY}",
              "aem:affKeyword": [
                "DOB",
                "Date of Birth"
              ],
              "description": "Date of birth in DD MMMM, YYYY",
              }
JSON-Element, -Eigenschaften oder -Attribute
Komponente des adaptiven Formulars

Zeichenfolgen-Eigenschaften mit enum- und enumNames-Beschränkung.

Syntax,

{

"type" : "string",

"enum" : ["M", "F"]

"enumNames" : ["Male", "Female"]

}

Dropdown-Komponente:

  • Die in „enumNames“ aufgeführten Werte werden in der Dropbox angezeigt.
  • Die in „enum“ aufgeführten Werte werden zur Berechnung verwendet.

Zeichenfolgen-Eigenschaft mit format-Beschränkung, Zum Beispiel „email“ oder „date“.

Syntax,

{

"type" : "string",

"format" : "email"

}

  • E-Mail-Komponente wird zugeordnet, wenn der Typ „string“ lautet und das Format „email“.
  • Textfeld-Komponente mit Validierung wird zugeordnet, wenn der Typ „string“ lautet und das Format „hostname“.

{

"type" : "string",

}

Textfeld
Zahleneigenschaft
Numerisches Feld mit Subtyp „float“.
Ganzzahl-Eigenschaft
Numerisches Feld mit Subtyp „integer“.
Boolesche Eigenschaft
Schalter
Objekteigenschaft
Bedienfeld
Array-Eigenschaft
Wiederholbares Bedienfeld mit „min“ und „max“ gleich „minItems“ und „maxItems“. Nur homogene Arrays werden unterstützt. Daher muss die Elementbeschränkung ein Objekt sein, kein Array.

Allgemeine Schema-Eigenschaften common-schema-properties

Das adaptive Formular verwendet die im JSON-Schema verfügbaren Informationen, um jedes generierte Feld zuzuordnen. Führen Sie insbesondere die folgenden Aufgaben aus:

  • Die title-Eigenschaft dient als Bezeichnung für die Komponenten des adaptiven Formulars.
  • Die description-Eigenschaft ist als lange Beschreibung für Komponenten von adaptiven Formularen festgelegt.
  • Die default-Eigenschaft dient als Ausgangswert für ein Feld in einem adaptiven Formular.
  • Die maxLength-Eigenschaft wird dem maxlength-Attribut einer Textfeldkomponente zugewiesen.
  • Die Eigenschaften minimum, maximum, exclusiveMinimum und exclusiveMaximum werden für Komponenten vom Typ „numerisches Feld“ verwendet.
  • Um Bereiche für eine DatePicker component-Komponente zu unterstützen, werden die zusätzlichen JSON-Schemaeigenschaften minDate und maxDate bereitgestellt.
  • Mithilfe der Eigenschaften minItems und maxItems wird die Anzahl der Elemente/Felder eingeschränkt, die einer Bedienfeldkomponente hinzugefügt oder daraus entfernt werden können.
  • Die readOnly-Eigenschaft legt das readonly-Attribut einer Komponente eines adaptiven Formulars fest.
  • Die required-Eigenschaft kennzeichnet ein adaptives Formularfeld als obligatorisch, während im Falle eines Bedienfelds (wobei „type“ ein Objekt ist) die endgültigen übermittelten JSON-Daten Felder mit leerem Wert entsprechend diesem Objekt enthalten.
  • Die pattern-Eigenschaft ist als Validierungsmuster (regulärer Ausdruck) im adaptiven Formular festgelegt.
  • Die Erweiterung der JSON-Schema-Datei „.schema.json“ muss beibehalten werden. Beispiel: <filename>.schema.json.

Beispiel für ein JSON-Schema sample-json-schema

JSON-Schema v4
code language-json
{
"$schema": "https://json-schema.org/draft-04/schema#",
"definitions": {
  "employee": {
  "type": "object",
  "properties": {
    "userName": {
     "type": "string"
   },
    "dateOfBirth": {
     "type": "string",
     "format": "date"
    },
    "email": {
    "type": "string",
    "format": "email"
    },
    "language": {
     "type": "string"
   },
    "personalDetails": {
     "$ref": "#/definitions/personalDetails"
   },
    "projectDetails": {
     "$ref": "#/definitions/projectDetails"
    }
  },
  "required": [
   "userName",
   "dateOfBirth",
   "language"
  ]
  },
    "personalDetails": {
   "type": "object",
  "properties": {
     "GeneralDetails": {
    "$ref": "#/definitions/GeneralDetails"
   },
    "Family": {
     "$ref": "#/definitions/Family"
    },
    "Income": {
     "$ref": "#/definitions/Income"
   }
   }
     },
  "projectDetails": {
   "type": "array",
   "items": {
   "properties": {
   "name": {
    "type": "string"
   },
   "age": {
    "type": "number"
   },
   "projects": {
    "$ref": "#/definitions/projects"
   }
  }
 },
 "minItems": 1,
 "maxItems": 4
},
"projects": {
 "type": "array",
 "items": {
  "properties": {
   "name": {
    "type": "string"
   },
   "age": {
    "type": "number"
   },
   "projectsAdditional": {
    "$ref": "#/definitions/projectsAdditional"
   }
  }
 },
 "minItems": 1,
 "maxItems": 4
},
"projectsAdditional": {
 "type": "array",
 "items": {
  "properties": {
   "Additional_name": {
    "type": "string"
   },
   "Additional_areacode": {
    "type": "number"
   }
  }
 },
 "minItems": 1,
 "maxItems": 4
},
"GeneralDetails": {
 "type": "object",
 "properties": {
  "age": {
   "type": "number"
  },
  "married": {
   "type": "boolean"
  },
  "phone": {
   "type": "number",
  },
  "address": {
   "type": "string"
  }
 }
},
"Family": {
 "type": "object",
 "properties": {
  "spouse": {
   "$ref": "#/definitions/spouse"
  },
  "kids": {
   "$ref": "#/definitions/kids"
  }
 }
},
"Income": {
 "type": "object",
 "properties": {
  "monthly": {
   "type": "number"
  },
  "yearly": {
   "type": "number"
  }
 }
},
"spouse": {
 "type": "object",
 "properties": {
  "name": {
   "type": "string"
  },
  "Income": {
   "$ref": "#/definitions/Income"
  }
 }
},
"kids": {
 "type": "array",
 "items": {
  "properties": {
   "name": {
    "type": "string"
   },
   "age": {
    "type": "number"
   }
  }
 },
 "minItems": 1,
 "maxItems": 4
}
},
"type": "object",
"properties": {
"employee": {
 "$ref": "#/definitions/employee"
}
}
}
JSON-Schema 2012-20
code language-json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/employee.schema.json",
  "$defs": {
    "employee": {
      "type": "object",
      "properties": {
        "userName": {
          "type": "string"
        },
        "dateOfBirth": {
          "type": "string",
          "format": "date"
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "language": {
          "type": "string"
        },
        "personalDetails": {
          "$ref": "#/$defs/personalDetails"
        },
        "projectDetails": {
          "$ref": "#/$defs/projectDetails"
        }
      },
      "required": [
        "userName",
        "dateOfBirth",
        "language"
      ]
    },
    "personalDetails": {
      "type": "object",
      "properties": {
        "GeneralDetails": {
          "$ref": "#/$defs/GeneralDetails"
        },
        "Family": {
          "$ref": "#/$defs/Family"
        },
        "Income": {
          "$ref": "#/$defs/Income"
        }
      }
    },
    "projectDetails": {
      "type": "array",
      "items": {
        "properties": {
          "name": {
            "type": "string"
          },
          "age": {
            "type": "number"
          },
          "projects": {
            "$ref": "#/$defs/projects"
          }
        }
      },
      "minItems": 1,
      "maxItems": 4
    },
    "projects": {
      "type": "array",
      "items": {
        "properties": {
          "name": {
            "type": "string"
          },
          "age": {
            "type": "number"
          },
          "projectsAdditional": {
            "$ref": "#/$defs/projectsAdditional"
          }
        }
      },
      "minItems": 1,
      "maxItems": 4
    },
    "projectsAdditional": {
      "type": "array",
      "items": {
        "properties": {
          "Additional_name": {
            "type": "string"
          },
          "Additional_areacode": {
            "type": "number"
          }
        }
      },
      "minItems": 1,
      "maxItems": 4
    },
    "GeneralDetails": {
      "type": "object",
      "properties": {
        "age": {
          "type": "number"
        },
        "married": {
          "type": "boolean"
        },
        "phone": {
          "type": "number",
        },
        "address": {
          "type": "string"
        }
      }
      }
  }
  }

Die wichtigsten Änderungen zwischen den Spezifikationen des JSON-Schemas v4 und des JSON-Schemas 2020-12 lauten wie folgt:

  • Die ID ist als $id deklariert.
  • Definitionen sind als $defs deklariert.

Wiederverwendbare Schemadefinitionen reusable-schema-definitions

Definitionsschlüssel kennzeichnen wiederverwendbare Schemas. Die wiederverwendbaren Schemadefinitionen werden verwendet, um Fragmente zu erstellen. Ein JSON-Beispielschema mit Definitionen wird unten angezeigt:

{
  "$schema": "https://json-schema.org/draft-04/schema#",

  "definitions": {
    "address": {
      "type": "object",
      "properties": {
        "street_address": { "type": "string" },
        "city":           { "type": "string" },
        "state":          { "type": "string" }
      },
      "required": ["street_address", "city", "state"]
    }
  },

  "type": "object",

  "properties": {
    "billing_address": { "$ref": "#/definitions/address" },
    "shipping_address": { "$ref": "#/definitions/address" }
  }
}

Das obige Beispiel definiert einen Kundendatensatz, bei dem jede Kundin und jeder Kunde über eine Versand- und eine Rechnungsadresse verfügt. Die Struktur der beiden Adressen ist gleich: Straße, Ort und Land. Daher sollten Sie die Adressen nicht duplizieren. Das erleichtert auch das Hinzufügen und Löschen von Feldern, wodurch zukünftige Änderungen einfach sind.

Einschränken der gültigen Werte für eine Komponente eines adaptiven Formulars limit-acceptable-values-for-an-adaptive-form-component

Sie können die folgenden Einschränkungen zu JSON-Schema-Elementen hinzufügen, um die für eine Kernkomponente des adaptiven Formulars akzeptablen Werte zu begrenzen:

Schemaeigenschaft
Datentyp
Beschreibung
Komponente
maximum
Zeichenfolge
Legt die Obergrenze für numerische Werte und Daten fest. Standardmäßig ist der Höchstwert enthalten.
  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
minimum
Zeichenfolge
Legt die Untergrenze für numerische Werte und Daten fest. Standardmäßig ist der Mindestwert enthalten.
  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
exclusiveMaximum
Boolesch

Wenn „true“, muss der numerische Wert oder das Datum, der bzw. das in der Komponente des Formulars festgelegt ist, kleiner sein als der numerische Wert oder das Datum, der bzw. das für die Eigenschaft „maximum“ angegeben ist.

Wenn „false“, muss der numerische Wert oder das Datum, der bzw. das in der Komponente des Formulars festgelegt ist, kleiner oder gleich dem numerischen Wert oder Datum sein, der bzw. das für die Eigenschaft „maximum“ angegeben ist.

  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
exclusiveMinimum
Boolesch

Wenn „true“, muss der numerische Wert oder das Datum, der bzw. das in der Komponente des Formulars festgelegt ist, größer sein als der numerische Wert oder das Datum, der bzw. das für die Eigenschaft „minimum“ angegeben ist.

Wenn „false“, muss der numerische Wert oder das Datum, der bzw. das in der Komponente des Formulars festgelegt ist, größer oder gleich dem numerischen Wert oder Datum sein, der bzw. das für die Eigenschaft „minimum“ angegeben ist.

  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
minLength
Zeichenfolge
Legt die zulässige Mindestanzahl von Zeichen in einer Komponente fest. Die minimale Länge muss größer oder gleich null sein.
  • Textfeld
maxLength
Zeichenfolge
Legt die zulässige Höchstzahl von Zeichen in einer Komponente fest. Die maximale Länge muss größer oder gleich null sein.
  • Textfeld
pattern
Zeichenfolge

Legt die Reihenfolge der Zeichen fest. Eine Komponente akzeptiert die Zeichen, wenn sie dem angegebenen Muster entsprechen.

Die Eigenschaft „pattern“ ist dem Überprüfungsmuster der entsprechenden Komponente des adaptiven Formulars zugeordnet.

  • Alle adaptiven Formulare, die einem XSD-Schema zugeordnet sind
maxItems
Zeichenfolge
Gibt die maximale Anzahl von Elementen in einem Array an. Die maximale Anzahl von Elementen muss größer oder gleich null sein.
minItems
Zeichenfolge
Gibt die Mindestanzahl von Elementen in einem Array an. Die Mindestanzahl von Elementen muss größer oder gleich null sein.

Aktivieren von schemakonformen Daten enablig-schema-compliant-data

Gehen Sie wie folgt vor, damit alle auf einem JSON-Schema basierenden adaptiven Formulare bei der Formularübermittlung schemakonforme Daten generieren können:

  1. Navigieren Sie zur Experience Manager-Web-Konsole unter https://server:host/system/console/configMgr.
  2. Suchen Sie nach der Web-Kanal-Konfiguration für adaptive Formulare und interaktive Kommunikation.
  3. Wählen Sie die Konfiguration aus, um sie im Bearbeitungsmodus zu öffnen.
  4. Aktivieren Sie das Kontrollkästchen zum Generieren schemakonformer Daten.
  5. Speichern Sie die Einstellungen.

Web-Kanal-Konfiguration für adaptive Formulare und interaktive Kommunikation

Nicht unterstützte Konstrukte non-supported-constructs

Adaptive Formulare bieten keine Unterstützung für folgende JSON-Schemakonstrukte:

  • Null-Typ
  • Union-Typen wie „any“ und „and“
  • „OneOf“, „AnyOf“, „AllOf“ und „NOT“;
  • Nur homogene Arrays werden unterstützt. Daher muss die Elementbeschränkung ein Objekt sein, kein Array.
  • URI-Verweise in $ref

Häufig gestellte Fragen frequently-asked-questions

Warum kann ich nicht einzelne Elemente eines Teilformulars (Struktur aus einem komplexen Typ generiert) für wiederholbare Teilformulare ziehen (Wert von „minOccurs“ oder „maxOccurs“ ist größer als 1)?

In einem wiederholbaren Teilformular müssen Sie das gesamte Teilformular verwenden. Wenn Sie nur einzelne Felder nutzen möchten, verwenden Sie die gesamte Struktur und löschen Sie unerwünschte Felder.

Ich habe eine lange komplexe Struktur in der Inhaltssuche. Wie kann ich ein bestimmtes Element suchen?

Es gibt zwei Optionen:

  • Scrollen Sie durch die Baumstruktur
  • Verwenden Sie das Suchfeld, um ein Element zu finden

Welche Erweiterung sollte die JSON-Schema-Datei aufweisen?

Für eine JSON-Schema-Datei muss immer die Erweiterung .schema.json verwendet werden. Beispiel: <filename>.schema.json.

Wird aem:afProperties als Teil des JSON-Schemas im adaptiven Forms auf der Basis von Kernkomponenten unterstützt?

Nein, aem:afProperties wird für Kernkomponenten nicht unterstützt. Diese Eigenschaft wird nur für Foundation-Komponenten unterstützt.

Siehe auch see-also

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab