Вычисляемые конструкторы элемента и атрибута
Вычисляемый конструктор элемента имеет одну из следующих форм:
element имя-элемента {выражение-для-содержимого}
или
element {выражение} {выражение-для-содержимого}
В первой форме создается элемент с заданным именем-элемента и вычисляемым содержимым. Во второй форме имя элемента является результатом вычисления выражения.
Аналогичным образом определяются формы вычисляемого конструктора атрибута:
attribute имя-атрибута {выражение-для-значения}
или
attribute {выражение} {выражение-для-значения}
В первой форме создается атрибут с заданным именем-атрибута, а во второй форме имя атрибута является результатом вычисления выражения. В обеих формах значение атрибута определяется как результатом вычисления выражения-для-значения.
Пример задания вычисляемых конструкторов элементов и атрибутов:
Запрос на обработку с использованием вычисляемых конструкторов элементов и атрибутов имеет следующий вид:
xquery version "1.0";
declare variable $email-server as xs:string:="mail.com";
declare function local:attr-name($address-index as
xs:integer) as xs:string
{
if($address-index = 1) then "sender" else "receiver"
};
element {fn:concat(fn:substring-before($email-server,"."),
"-",xs:string("message"))}
{
element header
{
element address
{
element from
{
attribute {local:attr-name(1)} {fn:concat('ivanov','@',$email-server)}
},
element to
{
attribute {local:attr-name(2)} {fn:concat('sidorov','@',$email-server)}
}
},
element subject {"О встрече"}
},
element body {fn:concat("Встреча сегодня ",
fn:substring(xs:string(fn:current-date()),1,10),
" в 12.30")}
}
Результат обработки запроса имеет следующий вид:
<mail-message>
<header>
<address>
<from sender="ivanov@mail.com"/>
<to receiver="sidorov@mail.com"/>
</address>
<subject>О встрече</subject>
</header>
<body>Встреча сегодня 2008-03-06 в 12.30</body>
</mail-message>
Дата добавления: 2015-03-19; просмотров: 548;