응용프로그램이 브로커에 메시지를 보낼 때, 메시지 데이터가 해석되는 방식은 메시지 컨텐츠 자체와 메시지 플로우 구성에 따라 달라집니다. 응용프로그램이 일반 XML 구문 분석기 또는 XML 물리적 형식에 맞도록 조정한 MRM 구문 분석기가 해석하게 될 메시지를 보내는 경우, 응용프로그램은 XML 스키마 기본 DateTime 데이터 유형이 표시하는 날짜 또는 시간을 포함시킬 수 있습니다.
각 테이터 조각의 XML 스키마 데이터 유형은 ESQL 데이터 유형으로 변환되고, 논리적 메시지 트리에서 작성되는 요소는 변환된 유형입니다. 입력 메시지의 DateTime 데이터가 선택한 스키마 데이터 유형의 규칙과 일치하지 않으면, 논리적 메시지 트리에 쓰는 구문 분석기의 값은 메시지가 MRM 도메인에 있고 메시지 플로우가 입력 메시지의 유효성을 검증했어도 수정됩니다. (유효성 검증은 일반 XML 메시지에 사용할 수 없습니다.)
이것은 입력 DateTime 데이터 하위 필드에 영향을 미칩니다.
다음 예제는 아래와 같은 지점을 표시합니다.
입력 데이터 XML 스키마 데이터 유형 | 스키마 규칙 | 비트스트림의 입력 값 | 논리적 트리(대괄호 안의 ESQL 데이터 유형)에 기록된 값 |
---|---|---|---|
xsd:DateTime | CCYY-MM-DDThh:mm:ss | 2002-12-31T23:59:59 | 2002-12-31 23:59:59(TIMESTAMP) |
--24 | 1970-01-24(DATE) | ||
23:59:59 | 23:59:59(TIME) | ||
xsd:date | CCYY-MM-DD | 2002-12-31 | 2002-12-31(DATE) |
2002-12-31T23:59:59 | 2002-12-31(DATE) | ||
-06-24 | 1970-06-24(DATE) | ||
xsd:time | hh:mm:ss | 14:15:16 | 14:15:16(TIME) |
xsd:gDay | ---DD | ---24 | 1970-01-24(DATE) |
xsd:gMonth | --MM | --12 | 1970-12-01(DATE) |
xsd:gMonthDay | --MM-DD | --12-31 | 1970-12-31(DATE) |
xsd:gYear | CCYY | 2002 | 2002-01-01(DATE) |
xsd:gYearMonth | CCYY-MM | 2002-12 | 2002-12-01 (DATE) |
어떤 스키마 DateTime 데이터 유형을 사용할지 생각할 때, 메시지가 MRM 도메인에 있고 메시지 플로우가 메시지의 유효성을 검증하도록 구성되었다면 하위 필드 누락이 유효성 검증 예외를 일으킬 수 있다는 사실을 명심해야 합니다.
Gday, gMonth, gMonthDay, gYear 및 gYearMonth 스키마 데이터 유형은 반복되는 특정 기간을 기록하는 데 사용합니다. 이러한 스키마 데이터 유형에서 사용되는 반복 기간은 ESQL에서 특정 지점으로 저장되어 있기 때문에 유효성 검증이 켜져 있는 경우, 잠재적인 혼란을 일으킬 수 있습니다.
예를 들면, gDay(월별 날짜) 유형인 24번째 날이 논리적 트리에 기록될 때, 누락된 월과 년 하위 필드는 현재 시간(1970년 1월)에서 제공되어 1970-01-24일을 반환합니다. 사용자가 이 날짜를 가공하도록(예: 10일의 간격을 더해 유효화된 출력을 생성) ESQL을 코딩한 경우, 예외가 발생합니다. 계산의 결과인 1970-02-03은 올바르지 않은데, 이는 해당 날짜의 월 하위 필드가 해당 시간대 날짜와 더이상 일치하지 않기 때문입니다.