여러 성격 템플릿 데이터 형식
MULTIPLE_PERSONALITY 데이터 형식은 서로 다른 시간에 다른 데이터 형식을 보유할 수 있는 값을 나타냅니다. 이 데이터 형식은 C 언어 공용 구조체 데이터 형식과 유사합니다.
*DataType: MULTIPLE_PERSONALITY 템플릿이 C 언어 공용 구조체 데이터 형식과 마찬가지로 여러 데이터 형식에 속하는 값을 허용할 수 있는 데이터 형식을 정의하도록 지시합니다. MULTIPLE_PERSONALITY 데이터 형식은 값의 ID(즉, 데이터 형식)를 확인하려고 시도하며, 식별된 데이터 형식에 속하도록 템플릿에서 값이 명시적으로 정의된 경우와 동일한 XML을 출력합니다. 즉, 문자열 또는 정수 또는 SYMBOL을 포함하도록 MULTIPLE_PERSONALITY 데이터 형식이 정의되고 값이 실제로 정수인 경우 XML 출력은 정수 데이터 형식에 대한 것입니다.
클라이언트가 내보낸 값의 데이터 형식을 결정하는 데 도움이 되는 성격 태그 특성도 내보내집니다. 필터는 각 잠재적 데이터 형식을 사용하여 값을 구문 분석하여 값의 데이터 형식을 결정합니다. 입력 값의 가장 큰 양과 일치하는 데이터 형식이 선택됩니다. 동률인 경우 목록에서 먼저 나타나는 요소 형식이 선택됩니다.
참고 이 평가 알고리즘을 속일 수 있는 값 구문을 생성할 수 있으므로 나열할 요소 형식을 선택할 때는 주의해야 합니다. 형식은 구문 분석 알고리즘으로 충분히 구별할 수 있어야 합니다. 예를 들어 파서 필터는 XML 구문을 인식하지 못하므로 두 XML_TYPE 데이터 형식을 구분할 수 없습니다. 그러나 이러한 경우 후보 데이터 형식의 정의에는 파서가 구분하는 데 도움이 되는 *ArrayLabel 지시문이 포함될 수 있습니다.
다음 지시문은 MULTIPLE_PERSONALITY 데이터 형식을 정의하는 데 사용됩니다.
*ElementType(필수). 이 값이 가정할 수 있는 잠재적인 데이터 형식을 정의하는 템플릿 이름 목록입니다.
*ElementTags(필수). 클라이언트가 실제로 값에 할당된 데이터 형식을 식별하는 데 도움이 되는 태그 목록입니다. 제공되는 태그 수는 *ElementType에 나열된 템플릿의 수와 같아야 합니다. 태그는 값을 나타내는 생성된 XML 요소의 성격 특성에 표시됩니다. 예를 들어 데이터 형식이 여러 성격 데이터 형식의 배열인 경우 배열의 개별 멤버를 나타내는 요소에는 성격 특성이 포함됩니다. 배열 자체에 정의된 성격이 없으므로 전체 배열을 나타내는 요소는 성격 특성을 포함하지 않습니다. 대신 배열의 개별 멤버에는 고유한 고유한 성격 특성 값이 있습니다.
다음 템플릿을 고려합니다.
*Template: INT_OR_QUALNAME_EX
{
*Type: DATATYPE
*DataType: MULTIPLE_PERSONALITY
*ElementType: (INTEGER, QUALNAME_EX, QUOTEDSTRING)
*ElementTags: (integer, QualNameEx, QuotedString)
}
이 템플릿은 INTEGER 값, QUALNAME_EX 값 또는 QUOTEDSTRING 값을 보유할 수 있는 데이터 형식을 정의합니다. 선택한 데이터 형식은 해당 사용자 정의 ElementTag로 식별됩니다.
다음 GDL 항목을 고려합니다.
*rcNameID: ( RESDLL.stdname.467 )
*rcNameID: (0x117 )
다음 RC_NAME_ID2 템플릿을 고려해 보세요.
*Template: RC_NAME_ID2
{
*Name: "*rcNameID"
*Type: ATTRIBUTE
*ValueType: INT_OR_QUALNAME_EX
*Additive: LEAST_TO_MOST_RECENT
}
이전 템플릿에서 GDL 항목을 해석하는 경우 결과 XML 출력은 다음과 같습니다.
<GDL_ATTRIBUTE Name="*rcNameID" Personality="QualNameEx" >
<feature xsi:type="GDLW_string">RESDLL</feature>
<option xsi:type="GDLW_string">stdname</option>
<resourceID xsi:type="GDLW_int">467</resourceID>
</GDL_ATTRIBUTE>
<GDL_ATTRIBUTE Name="*rcNameID" Personality="integer"
xsi:type="GDLW_int" >279</GDL_ATTRIBUTE>
MULTIPLE_PERSONALITY 형식에서 생성된 XML 출력과 실제 형식 간의 유일한 차이점은 값의 실제 데이터 형식을 클라이언트에 알리기 위해 추가되는 추가 성격 태그 특성입니다.
예를 들어 다음과 같이 배열의 각 멤버가 MULTIPLE_PERSONALITY 형식인 배열을 만들 수 있습니다.
*Template: DT_ARRAY_OF_MP
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: INT_OR_QUALNAME_EX
*RequiredDelimiter: ","
*OptionalDelimiter: "<20 09>"
*ElementTags: (ArrayMember)
*ArraySize: *
}
*Template: ARRAY_OF_MP
{
*Name: "*rcNameID_List"
*Type: ATTRIBUTE
*ValueType: DT_ARRAY_OF_MP
}
또한 위의 템플릿을 사용하여 다음 인스턴스 데이터를 처리할 수 있습니다. 이 데이터는 각각 다른 성격을 가지는 세 개의 여러 성격 개체를 포함하는 배열입니다.
*rcNameID_List:( RESDLL.stdname.467, 0x117, "Quote" )
이 처리를 수행하면 다음 XML 스냅샷이 생성됩니다.
<GDL_ATTRIBUTE Name="*rcNameID_List" >
<ArrayMember Personality="QualNameEx">
<feature xsi:type="GDLW_string">RESDLL</feature>
<option xsi:type="GDLW_string">stdname</option>
<resourceID xsi:type="GDLW_int">467</resourceID>
</ArrayMember>
<ArrayMember Personality="integer" xsi:type="GDLW_int">279</ArrayMember>
<ArrayMember Personality="QuotedString" xsi:type="GDLW_string">Quote</ArrayMember>
</GDL_ATTRIBUTE>
스냅샷에서 알 수 있듯이 파서는 세 배열 멤버 각각에 대해 올바른 성격을 결정하고 각 멤버의 요소에 있는 성격 특성을 설정하여 적절한 성격을 나타냅니다.