XSD 1.1 утверждает, чтобы сравнить даты
Я написал несколько утверждений для сравнения пар дат в XSD 1.1, но ни одно из них не работает.
Примеры:
ВХОД
<Records content-date="2006-05-04T18:13:51.0Z">
<Record issuance-date="2006-05-04T18:13:51.0Z"
last-update-date="2006-05-04T18:13:51.0Z"
last-renewal-date="2006-05-04T18:13:51.0Z" >
</Record>
<Record issuance-date="2006-05-04T18:13:51.0Z"
last-update-date="2006-05-04T18:13:51.0Z" last-renewal-date="2006-05-04T18:13:51.0Z">
<Event event-date="2006-05-04T18:13:51.0Z" event-type="INITIAL_REGISTRATION">
</Event>
</Record>
</Records>
XSD 1.1 утверждает:
<xs:assert id="plausibility-issuance-date-plausibility"
test="@issuance-date < ./@content-date"/>
а также
<xs:assert id="plausibility-file-and-record-timezones"
test="timezone-from-dateTime(Record/@issuance-date) = timezone-from-dateTime(REcords@content-date)"/>
Прочитав о представлении даты и времени и часового пояса, я немного ошеломлен.
Может кто-нибудь, пожалуйста, скажите мне:
- где ошибки (надеюсь понятно, что я пытаюсь сравнить)?
- Есть ли набор простых примеров такого рода, которые облегчают следовать?
1 ответ
Ваш xs: assert XPATH неверен, так как предполагает, что issuance-date
а также content-date
являются атрибутами одного и того же элемента, но это не так.
Вы можете использовать assert с этим примером XPATH, чтобы сказать, что "нет записи с issuance-date
больше или равно, чем его родитель content-date
":
empty(Record[@issuance-date ge ../@content-date])
Пример XSD:
<xs:element name="Records">
<xs:complexType>
<xs:sequence>
<xs:element name="Record" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="issuance-date" type="xs:dateTime"/>
<xs:attribute name="last-update-date" type="xs:dateTime"/>
<xs:attribute name="last-renewal-date" type="xs:dateTime"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="content-date" type="xs:dateTime"/>
<xs:assert id="plausibility-issuance-date-plausibility" test="empty(Record[@issuance-date ge ../@content-date])"/>
</xs:complexType>
</xs:element>