XML 문자열과 EGL 변수 간 대응
이 주제에서는 XML(Extensible Markup Language) 문자열에 해당하는 EGL 레코드에 대해 설명합니다. 기타 주제에서는 써드파티 REST 서비스에 액세스하는 데 필요하듯이 Rich UI 개발자가 XML 데이터와 변수 간 변환을 수행하는 데 사용하는 함수(serviceLib.convertFromXML, serviceLib.convertToXML)에 대해 설명합니다.
XML 및 EGL 레코드
XML 문자열을 처리하는 데 사용되는 레코드(또는 레코드의 배열)의 기초인 EGL 레코드 파트를 정의할 수 있습니다. 레코드 파트는 XML 문자열의 유효성을 검증하는 데 사용되는 언어인 XML 스키마에서 발견되는 세부사항을 포함합니다.
XMLLib.convertToXML 함수를 사용하는 경우 EGL 레코드의 컨텐츠를 XML 문자열에 기록합니다. XMLLib.convertFromXML 함수를 사용하는 경우에는 XML 문자열을 EGL 레코드에 기록하며 문자열이 레코드에 지정된 유효성 검증 규칙을 이행하지 않으면 EGL 런타임에서 RuntimeException을 발행합니다.
<Employee>
<EmpNo>10</EmpNo>
<Name>Smith</Name>
</Employee>
Record Employee {XMLStructure = xmlStructureKind.sequence}
EmpNo INT;
Name STRING;
end
대부분의 경우 레코드 파트는 필드 이름의 세트를 포함하며 각 이름은 문자와 대소문자가 XML 문자열의 요소 또는 속성의 이름과 일치합니다. 이름이 일치하지 않는 경우 EGL 특성을 사용하여 XML 요소 또는 속성 이름을 지정합니다.
- 레코드에서 XML 문자열 지정. 레코드를 XML 문자열로 변환할 경우 문자열 작성 시 기본값을 승인하거나 EGL 런타임에서 XML 문자열의 요소 또는 속성에 지정하는 이름 같은 세부사항을 명시적으로 지정할 수 있습니다.
- 레코드에 기록되는 XML 문자열의 유효성 검증. 레코드에
XML 문자열을 기록할 경우 다음과 같은 경우에 EGL 런타임에서 RuntimeException을
발행합니다.
- 요소 또는 속성 이름이 동등한 레코드 필드 이름과 일치하지 않습니다(또는 특성 필드에 지정한 오버라이드와 일치하지 않음).
- XML 문자열과 관련 레코드의 구조가 일치하지 않습니다.
이 두 가지 사용법을 유념하십시오. 한 가지 경우는 XML 문자열 지정이고 다른 경우는 유효성 검증입니다.
<Sample color="green"></Sample>
Record root
Sample Sample? {@XMLElement {nillable = true}};
end
Record Sample {@XMlStructure = xmlStructureKind.simpleContent}
color STRING {@XMLAttribute{}};
value STRING;
end
- root.Sample이 빈 문자열("")인 경우 기록되는 출력은
다음과 같습니다.
<root><Sample color="green"></Sample></root> - root.Sample이 널이고 뒤에 언급된 것처럼
특성 필드 nillable이 설정된 경우 기록되는 출력은 다음과
같습니다.
<root><Sample xsi:nil="true></Sample></root>
<Employee>
<EmpNo department="Sales">10</EmpNo>
<Name>Smith</Name>
</Employee>
Record Employee{XMLStructure = xmlStructureKind.sequence}
EmpNo EmpNumber;
LastName STRING;
end
Record EmpNumber {XMLStructure = xmlStructureKind.simpleContent}
department STRING {@XMLAttribute{}};
value INT;
end
- STRING이나 STRING과 지정 호환 가능한 FLOAT, BIN 유형 또는 BIN의 정수 동등 항목(INT, SMALLINT 또는 BIGINT) 중 하나
- 기본 유형 중 하나를 기반으로 하는 데이터 항목
- 다른 비구조화 레코드 파트. 해당 파트의 필드는 앞서 설명된 유형 또는 다른 비구조화 레코드 파트로 제한됩니다. 레코드 파트 내에서 참조되는 레코드 파트는 여기에 나열된 유형의 필드만 포함할 수 있습니다.
- 앞선 유형의 배열
ANY 유형의 필드는 지원되지 않습니다.
중첩 레벨에 관계 없이 다른 레코드 파트에서 하나의 레코드 파트를 참조할 수 있습니다.
널 입력 가능 필드
Record Employee
EmpNo INT;
Name STRING?;
end
- 필드(예: EmpNo)가 널 입력 가능하지 않은 경우 누락되거나 값이 없는 요소를 읽으려 할 때 EGL 런타임에서 RuntimeException을 예외 처리(throw)합니다.
- 필드(예: Name)가 널 입력 가능한 경우에는 누락되거나 값이 없는 요소를 읽으려 할 때 EGL 런타임에서 예외를 처리하지 않습니다. 값이 없는 요소를 읽는 경우 값이 없는 요소의 속성은 유지됩니다.
XML 문자열에 레코드를 기록할 때 EGL 런타임에서 널을 처리하는 여러 방법에 대한 세부사항은 @XMLElement 특성(또는 @XMLRootElement), 특성 필드 nillable을 참조하십시오.
레코드 파트 특성
- 복합 특성 @XMLRootElement는 루트 XML 요소에 대한 이름 지정과 데이터 유형 세부사항을 제공합니다. 루트 XML 요소는 XML 문자열에서 최상위인 가장 포괄적인 요소입니다.
- 단순 특성 XMLStructure는 XML 요소 세트의 특성을 식별합니다.
해당 특성에 대한 세부사항은 “@RootElement”와 “XMLStructure”에 있습니다.
레코드 파트를 기반으로 레코드를 선언하는 경우 이들 특성을 대체할 수 없습니다.
레코드 필드 특성
- 복합 특성 @XMLElement는 XML 요소를 나타내는 레코드 필드의 세부사항을 제공합니다. 기본적으로 해당 특성이 적용됩니다.
- 복합 특성 @XMLAttribute은 XML 속성을 나타내는 레코드 필드의 세부사항을 제공합니다.
해당 특성에 대한 세부사항은 “@XMLElement”와 “@XMLAttribute”에 있습니다.
네임스페이스
Rich UI에서는 네임스페이스가 있는 XML 문자열의 읽기와 쓰기를 지원합니다. @RootElement, @XMLElement, @XMLAttribute 특성에서 네임스페이스를 참조할 수 있습니다.
XML에 기본 네임스페이스가 있는 경우 해당 네임스페이스에서 각 XML 요소에 레코드 필드를 정의할 때 네임스페이스를 참조해야 합니다. XML 속성은 기본 네임스페이스에 있지 않습니다. 속성에 네임스페이스 접두부가 있거나 속성이 네임스페이스에 없습니다.
XML에 대한 추가 정보
- W3 Schools는 XML 학습서와 XSD 학습서를 제공합니다. 다음 사이트에서 학습서에 액세스할 수 있으며 여기서 XML 또는 XSD를 검색할 수 있습니다.
- Margolis와 Sharpe가 쓴 SOA for the Business Developer(MC Press, 2007년 5월)에서 XML과 XSD에 대해 다루고 있습니다. 다음 사이트에서 이 책을 구입할 수 있습니다.
- 월드 와이드 웹(WWW) 컨소시엄에서 XML 스키마에 대한 상세 개요를 제공합니다.
EGL에서 사용할 수 있는 대체 방안 전체를 파악하려면 XML 관련 특성에 대한 주제를 검토하십시오. 또한 EGL 런타임에서는 “XML의 예외 레코드”에 설명된 것처럼 XMLProcessingException을 발행하는 경우가 있습니다.