적응형 양식에 대한 JSON 스키마 디자인(핵심 구성 요소) creating-adaptive-forms-using-json-schema

버전
문서 링크
Foundation
여기 클릭
핵심 구성 요소
이 문서

사전 요구 사항 prerequisites

JSON 스키마를 양식 모델로 사용하여 핵심 구성 요소를 기반으로 하는 적응형 양식을 작성하려면 JSON 스키마에 대한 기본적인 이해가 필요합니다. 이 문서 전에 다음 내용을 읽어 보는 것이 좋습니다.

양식 모델로 JSON 스키마 사용 using-a-json-schema-as-form-model

Adobe Experience Manager Forms에서는 기존 JSON 스키마를 양식 모델로 사용하여 핵심 구성 요소를 기반으로 하는 적응형 양식 만들기를 지원합니다. 이 JSON 스키마는 조직의 백엔드 시스템이 데이터를 생산 또는 소비하는 구조를 나타냅니다. 사용하는 JSON 스키마는 v4 사양을 준수해야 합니다.

JSON 스키마 사용의 주요 기능은 다음과 같습니다.

  • JSON 구조는 적응형 양식의 작성 모드에서 콘텐츠 파인더 탭에 트리로 표시됩니다. 요소를 JSON 계층에서 핵심 구성 요소를 기반으로 하는 적응형 양식으로 드래그하여 추가할 수 있습니다.
  • 연결된 스키마와 호환되는 JSON을 사용하여 양식을 미리 채울 수 있습니다.
  • 제출 시 사용자가 입력한 데이터는 관련 스키마에 맞는 JSON으로 제출됩니다.
  • 2012-20 버전의 사양에 따라 JSON 스키마를 기반으로 양식을 만들 수도 있습니다.

JSON 스키마는 간단하고 복잡한 요소 유형으로 구성됩니다. 요소에는 요소에 규칙을 추가하는 속성이 있습니다. 이러한 요소와 속성을 적응형 양식으로 드래그하면 해당 적응형 양식 구성 요소에 자동으로 매핑됩니다.

적응형 양식 구성 요소와 JSON 요소의 이 매핑은 다음과 같습니다.

"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 요소, 속성 또는 속성
적응형 양식 구성 요소

enum 및 enumNames 제약 조건을 사용하는 문자열 속성입니다.

구문,

{

"type" : "string",

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

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

}

드롭다운 구성 요소:

  • enumNames에 나열된 값은 드롭 상자에 표시됩니다.
  • 열거형에 나열된 값은 계산에 사용됩니다.

형식 제약 조건이 있는 문자열 속성. (예: 이메일 및 날짜)

구문,

{

"type" : "string",

"format" : "email"

}

  • 유형이 문자열이고 포맷이 이메일인 경우 이메일 구성 요소는 매핑됩니다.
  • 유형이 문자열이고 형식이 hostname인 경우 유효성 검사가 있는 Textbox 구성 요소가 매핑됩니다.

{

"type" : "string",

}

텍스트 필드
number 속성
하위 형식이 float
(으)로 설정된 숫자 필드
정수 속성
하위 유형이 정수
(으)로 설정된 숫자 필드
부울 속성
전환
개체 속성
패널
배열 속성
min 및 max가 각각 minItems 및 maxItems와 같은 반복 가능한 패널. Homogeneous 배열만 지원됩니다. 따라서 항목 제약 조건은 배열이 아닌 개체여야 합니다.

일반 스키마 속성 common-schema-properties

적응형 양식은 JSON 스키마에서 사용할 수 있는 정보를 사용하여 생성된 각 필드를 매핑합니다. 특히

  • title 속성은 적응형 양식 구성 요소에 대한 레이블 역할을 합니다.
  • description 속성은 적응형 양식 구성 요소에 대한 긴 설명으로 설정됩니다.
  • default 속성은 적응형 양식 필드의 초기 값 역할을 합니다.
  • maxLength 속성이 텍스트 필드 구성 요소의 maxlength 특성으로 설정되어 있습니다.
  • minimum, maximum, exclusiveMinimumexclusiveMaximum 속성은 Numeric Box 구성 요소에 사용됩니다.
  • DatePicker component 추가 JSON 스키마 속성 minDatemaxDate에 대한 범위를 지원하기 위해 제공됩니다.
  • minItemsmaxItems 속성은 패널 구성 요소에서 추가하거나 제거할 수 있는 항목/필드의 수를 제한하는 데 사용됩니다.
  • readOnly 속성은 적응형 양식 구성 요소의 readonly 특성을 설정합니다.
  • required 속성은 적응형 양식 필드를 필수 항목으로 표시하지만 패널(유형이 개체인 경우)에서 최종 제출된 JSON 데이터에는 해당 개체에 해당하는 빈 값이 있는 필드가 있습니다.
  • pattern 속성은 적응형 양식에서 유효성 검사 패턴(정규 표현식)으로 설정되어 있습니다.
  • JSON 스키마 파일의 확장은 .schema.json을 유지해야 합니다. 예: <filename>.schema.json.

샘플 JSON 스키마 sample-json-schema

JSON 스키마 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 스키마 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"
        }
      }
      }
  }
  }

JSON 스키마 V4에서 버전 2020-12 사양으로 주요 변경 사항은 다음과 같습니다.

  • ID가 $id(으)로 선언되었습니다.
  • 정의가 $defs(으)로 선언되었습니다.

재사용 가능한 스키마 정의 reusable-schema-definitions

정의 키는 재사용 가능한 스키마를 식별하는 데 사용됩니다. 재사용 가능한 스키마 정의는 조각을 만드는 데 사용됩니다. 정의가 있는 샘플 JSON 스키마가 아래에 제공됩니다.

{
  "$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" }
  }
}

위의 예에서는 각 고객에게 배송 주소와 청구 주소가 모두 있는 고객 레코드를 정의합니다. 두 주소의 구조는 동일하며 주소에는 거리 주소, 도시 및 주가 있으므로 주소를 복제하지 않는 것이 좋습니다. 또한 향후 변경 시 필드를 쉽게 추가 및 삭제할 수 있습니다.

적응형 양식 구성 요소에 허용되는 값 제한 limit-acceptable-values-for-an-adaptive-form-component

JSON 스키마 요소에 다음 제한 사항을 추가하여 적응형 양식 핵심 구성 요소에 허용되는 값을 제한할 수 있습니다.

스키마 속성
데이터 형식
설명
구성 요소
maximum
문자열
숫자 값 및 날짜의 상한을 지정합니다. 기본적으로 최대값이 포함됩니다.
  • 숫자 상자
  • 숫자 스텝퍼
  • 날짜 선택기
minimum
문자열
숫자 값 및 날짜의 하한을 지정합니다. 기본적으로 최소값이 포함됩니다.
  • 숫자 상자
  • 숫자 스텝퍼
  • 날짜 선택기
exclusiveMaximum
부울

true인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최대 속성에 지정된 숫자 값 또는 날짜보다 작아야 합니다.

false인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최대 속성에 지정된 숫자 값 또는 날짜보다 작거나 같아야 합니다.

  • 숫자 상자
  • 숫자 스텝퍼
  • 날짜 선택기
exclusiveMinimum
부울

true인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최소 속성에 지정된 숫자 값 또는 날짜보다 커야 합니다.

false인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최소 속성에 지정된 숫자 값 또는 날짜보다 크거나 같아야 합니다.

  • 숫자 상자
  • 숫자 스텝퍼
  • 날짜 선택기
minLength
문자열
구성 요소에 허용되는 최소 문자 수를 지정합니다. 최소 길이는 0보다 크거나 같아야 합니다.
  • 텍스트 상자
maxLength
문자열
구성 요소에 허용되는 최대 문자 수를 지정합니다. 최대 길이는 0보다 크거나 같아야 합니다.
  • 텍스트 상자
pattern
문자열

문자 시퀀스를 지정합니다. 문자가 지정된 패턴을 따르는 경우 구성 요소가 문자를 허용합니다.

패턴 속성은 해당 적응형 양식 구성 요소의 유효성 검사 패턴에 매핑됩니다.

  • XSD 스키마에 매핑된 모든 적응형 Forms 구성 요소
maxItems
문자열
배열의 최대 항목 수를 지정합니다. 최대 항목은 0보다 크거나 같아야 합니다.
minItems
문자열
배열의 최소 항목 수를 지정합니다. 최소 항목은 0보다 크거나 같아야 합니다.

스키마 호환 데이터 활성화 enablig-schema-compliant-data

양식 제출 시 모든 JSON 스키마 기반 적응형 Forms이 스키마 호환 데이터를 생성할 수 있도록 하려면 다음 단계를 따르십시오.

  1. https://server:host/system/console/configMgr의 Experience Manager 웹 콘솔로 이동합니다.
  2. 적응형 양식 및 대화형 통신 웹 채널 구성 ​을 찾습니다.
  3. 을(를) 선택하여 편집 모드로 구성을 엽니다.
  4. 스키마 호환 데이터 생성 확인란을 선택하십시오.
  5. 설정을 저장합니다.

적응형 양식 및 대화형 통신 웹 채널 구성

지원되지 않는 구문 non-supported-constructs

적응형 Forms은 다음 JSON 스키마 구성을 지원하지 않습니다.

  • Null 유형
  • 및 와 같은 유니온 유형
  • OneOf, AnyOf, AllOf 및 NOT
  • Homogeneous 배열만 지원됩니다. 따라서 항목 제약 조건은 배열이 아닌 개체여야 합니다.
  • $ref의 URI 참조

자주 묻는 질문 frequently-asked-questions

반복 가능한 하위 양식(minOccours 또는 maxOccurs 값이 1보다 큼)에 대해 하위 양식(복합 유형에서 생성된 구조)의 개별 요소를 드래그할 수 없는 이유는 무엇입니까?

반복 가능한 하위 양식에서는 전체 하위 양식을 사용해야 합니다. 선택 필드만 사용하려는 경우 전체 구조를 사용하고 원하지 않는 구조는 삭제하십시오.

콘텐츠 파인더에 긴 복잡한 구조가 있습니다. 특정 요소를 찾으려면 어떻게 해야 합니까?

다음 두 가지 옵션이 있습니다.

  • 트리 구조를 스크롤합니다.
  • 검색 상자를 사용하여 요소 찾기

JSON 스키마 파일의 확장명은 무엇입니까?

JSON 스키마 파일의 확장명은 .schema.json이어야 합니다. 예: <filename>.schema.json.

핵심 구성 요소를 기반으로 하는 적응형 Forms에서 aem:afProperties이(가) JSON 스키마의 일부로 지원됩니까?

아니요. aem:afProperties은(는) 핵심 구성 요소에 대해 지원되지 않습니다. 이 속성은 기초 구성 요소에서만 지원됩니다.

추가 참조 see-also

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