Перечень статей   Терминология   Choose language


Вывод дерева


Вывод дерева осуществляется постановкой знака после него.

Будем полагать, что слова "запись" (из СУБД) и "тег" (из XML) являются синонимами, а также что слова "поле" и "атрибут" также являются синонимами. Например, совершенно законны выражения "вложенная запись" и "вложенная таблица".

Сокрытие записей и полей

Для предотвращения вывода некоторых таблиц и полей перед их именами нужно поставить знак "#".

a[data10.1].#b.c[#data] ;
<a   id=1   data=10.1>
  <c id=100 />
  <c id=101 />
  <c id=200 />
  <c id=201 />
  <c id=200 />
</a>
Для предотвращения вывода всех полей за исключением нескольких нужных надо поставить знак "#" перед скобками поля, а в самих скобках перечислить выводимые поля (поля выводятся в порядке перечисления).
a[data10.1].#b.c#[id] ;
<a   id=1   data=10.1>
  <c id=100 />
  <c id=101 />
  <c id=200 />
  <c id=201 />
  <c id=200 />
</a>

Сортировка записей

Если звено является списком, то вывод его элементов (записей) можно упорядочить по возрастанию или убыванию значений некоторых полей. Для этого перед именами этих полей нужно поставить целое число и знак "§" (будем называть это число фактором, factor. Фактор не может быть равен нулю). Поля будут использованы для сортировки в той последовательности, в какой возрастают модули их факторов. Положительный фактор означает сортировку по возрастанию, отрицательный - по убыванию. Таким образом TML-выражение

m[30§m1  10§m2  -20§m3]
эквивалентно DML-выражению
order by m2 asc, m3 desc, m1 asc
Вывод преобразуется так:
a.b.c ;
<a     id=1   data=12.3>
  <b   id=10  data=23.4>
    <c id=100 data=56.7/>
    <c id=101 data=67.8/>
  </b>
  <b   id=20  data=34.5>
    <c id=200 data=78.9/>
    <c id=201 data=89.1/>
  </b>
  <b   id=30  data=45.6>
    <c id=200 data=91.2/>
  </b>
</a>
a.b[-1§data].c[-1§data] ;
<a     id=1   data=12.3>
  <b   id=30  data=45.6>
    <c id=200 data=91.2/>
  </b>
  <b   id=20  data=34.5>
    <c id=201 data=89.1/>
    <c id=200 data=78.9/>
  </b>
  <b   id=10  data=23.4>
    <c id=101 data=67.8/>
    <c id=100 data=56.7/>
  </b>
</a>

Извлечение очередной порции отсортированных данных

Можно запросить не все неотсортированные записи, а только начинающиеся с какой-то определенной записи, для которой нам известны значения всех ее полей. Для этого перед именами всех полей нужно поставить знак "§", а после них знак "=" и значение поля. Таким образом TML-выражение

m[§m1=100 §m2=null §m3='string']
эквивалентно
DML-выражению
start by m1=100 m2=null m3='string'

Можно запросить не все отсортированные записи, а только начинающиеся с какой-то определенной записи - для этого надо одновременно применить сортировку и стартировку. Таким образом TML-выражение

m[30§m1=100 10§m2=null -20§m3='string']
эквивалентно DML-выражению
order by m2 asc, m3 desc, m1 asc
start by m1=100 m2=null m3='string'

Вывод картинки

Значением поля базы данных может быть картинка, но по TML-запросу как значение поля отправляется не она, а ее URL для отдельного HTTP-запроса браузера. В HTML4 браузер сможет использовать этот атрибут (поле) только если его имя есть "src" и он находится в теге (таблице) "IMG". В HTML5 браузер может использовать его в атрибуте "src" любого тега, если последний имеет свойство "display: img".

x ;
<x id="10"
   data1="Larry"
   data2="http://distination.org/?file_id=6382503452">

Вывод произвольного текста

Вывести можно произвольный текст

'<?xml-stylesheet type="text/xsl" href="a.xsl"?>' ;
<?xml-stylesheet type="text/xsl" href="a.xsl"?>
'text' ;
text
'<anytag>' ;
<anytag>
'</anytag>' ;
</anytag>
и данные базы данных: если выражение, осуществляющее вывод, изменяет значения полей, то эти новые значения не записываются в базу данных, а существуют только в отправляемых данных; ссылающиеся поля, использованные в запросе, в xml-текст не выводятся.
a[data10.1].b.c ;
<a     id=1   data=10.1>
  <b   id=10  data=23.4>
    <c id=100 data=56.7/>
    <c id=101 data=67.8/>
  </b>
  <b   id=20  data=34.5>
    <c id=200 data=78.9/>
    <c id=201 data=89.1/>
  </b>
  <b   id=30  data=45.6>
    <c id=200 data=91.2/>
  </b>
</a>

Изменение адреса получателя

Данные отправляются тому адресату, который в момент отправки указан в полях ral и ru таблицы sys. При старте триггера корневой таблицы (чаще всего это 'formdata, tabledata, treedata, html') эти значения указывают на агент пользователя (программу-терминал, браузер и т.д.), приславший запрос, но их в любой момент можно изменить (таким образом база данных сама может сделать запрос в другие базы данных для формирования ответа браузеру).

Для того, чтобы задублировать дерево в базе данных, нужно отправить его самому себе - для этого ran=0.



Тюрин Дмитрий



Перечень статей   Терминология   Choose language