Главная » XSLT » Как воспользоваться расширенной системой типов в XPath 2.0

0

Задача

Вы скрупулезно применяете схемы при обработке XML-документов и хотели бы пожать плоды своих трудов.

Решение

Если вы проверяете документы на соответствие схеме, то получающиеся узлы аннотируются информацией о типе. Затем в XPath 2.0 (а равно при сопоставле­нии с шаблонами в XSLT 2.0) эти типы можно опросить.

(: Проверить, что все элементы invoiceDate действительно являются датами. :)

if (order/invoiceDate instance of element!*, xs:date)) then "накладная корректна" else "накладная некорректна"

 Оператор instance of полезен только при наличии схемы. И его семантика отличается от оператора castable as. Например, выражение 10 castable as xs:positiveinteger всегда дает true, тогда как выражение 10 instance of xs:positiveinteger ложно, поскольку литеральные числовые значе­ния аннотируются типом xs:decimal.

Но проверка на соответствие схеме полезна не только потому, что вы получае­те возможность опрашивать типы. Всегда безопаснее и удобнее заранее знать, что при обработке документа не возникнет никаких сюрпризов из-за ошибок типиза­ции. В результате можно писать более компактные шаблоны.

(: Без проверки пришлось бы писать такой код :)

for $order in Order return xs:date($order/invoicedate) – xs:date($order/ createdate)

(: Если известно, что все даты проверены, то можно обойтись

без конструктора xs:date :)

for $order in Order return $order/invoicedate – $order/createdate

Обсуждение

Лично я предпочитаю использовать XML-схемы как спецификации докумен­тов, а не как инструмент проверки. Поэтому я стараюсь писать XSLT-преобразо- вания, устойчивые к ошибкам типизации, и при необходимости применяю явные преобразования. Так составленные таблицы стилей будут работать вне зависимо­сти от того, была проведена предварительная проверка или нет.

Начав писать таблицы стилей, зависящие от проверки, вы привязываете себя только к таким реализациям, которые умеют проверять соответствие схеме. С другой стороны, если в компании принят стандарт, в соответствии с которым все XML-документы должны проверяться перед обработкой, то вы можете упростить свои XSLT-программы, так как есть уверенность, что в определенных контекстах будут присутствовать только данные заведомо известных типов.

Мангано Сэл  XSLT. Сборник рецептов. – М.: ДМК Пресс, СПБ.: БХВ-Петербург, 2008. – 864 с.: ил.

По теме:

  • Комментарии