Методы типа данных XML стр. 4 |
|||||||||||||||||||||||
Метод exist()Данный метод не используется для получения каких-либо данных из XML документа. Он используется только для того, чтобы убедиться, что в нём присутствуют требуемые данные. Метод exist() проверяет существование указанного выражения XPath. В данном примере метод exist() будет использован для определения, есть ли определённая песня в списке композиций. Пусть песня, которую мы ищем, называется "Garden of Eden".
Как можно видеть, песня с таким названием присутствует среди композиций группы Guns N' Roses (1 эквивалентно 'True'), и отсутствует среди композиций группы Radiohead (0 эквивалентно 'False'). Теперь проверим наличие песни длительностью более 10 минут.
Из полученного результата мы видим, что оба исполнителя имеют в своём репертуаре как минимум одну песню длительностью более 10 минут. Но это не так. На самом деле все песни группы Radiohead длятся менее 10 минут. Проблема заключается в том, что значение атрибута @length по умолчанию принимает строковый тип данных. Получается, что мы сравнивали строки, а не время. Чтобы решить эту проблему, мы можем преобразовать значение атрибута @length и значение, с которым оно сравнивается, к типу данных time. Оба они должны быть приведены к формату "чч:мм:сс" до преобразования типов данных. Для этого будем использовать функцию xs:time(), принимающую на вход строку и возвращающую время.
Теперь мы видим, что в репертуаре группы Radiohead нет ни одной песни длительностью более 10 минут, в то время как в репертуаре группы Guns N' Roses есть как минимум одна такая песня.
В данном примере функция time() используется в пространстве имён xs. Все встроенные функции преобразования типов должны использоваться в этом пространстве имён (xs:string, xs:boolean, xs:decimal, xs:float, xs:double, xs:dateTime, xs:time, xs:date и т.д.). Прочие встроенные функции используются в пространстве имён fn, но его указание не обязательно. То есть string-length(.) и fn:string-length(.) эквивалентны. |