Форматирование реляционных данных в XML
Наборы данных ProDataSet могут содержать реляционные данные. Однако XML-документ – это неструктурированный файл. Поэтому AVM добавляет форматирование к XML-данным, чтобы сделать отношения между записями в связанных временных таблицах очевидными, простыми для просмотра и простыми для обработки приложением.
Далее мы рассмотрим, как AVM форматирует XML-документ для представления связанных записей на примере отношения между таблицами Order и OrderLine.
По умолчанию формируемые методом WRITE-XML выходные данные сначала содержат все заказы, а затем все строки заказов, и это может быть не тот формат, который необходим вам.
<dsOrderOrderLine xmlns:xsi=:http://www.w3.org/2001/XMLSchema-instance"> <ttOrder> <OrderNum>21</OrderNum> <OrderDate>1998-02-08</OrderDate> <SchipDate>1998-02-13</SchipDate> <PromiseDate>1998-02-13</PromiseDate> <OrderTotal>688.37</OrderTotal> </ttOrder> <ttOrder> <OrderNum>6030</OrderNum> <OrderDate>1998-02-083/OrderDate> <SchipDate xsi:nil="true" /> <PromiseDate>1998-02-08</PromiseDate> <OrderTotal>0.0</OrderTotal> </ttOrder> <ttOrderLine> <OrderNum>21</OrderNum> <LineNum>1</LineNum> <ItemNum>43</ItemNum> <Price>13.97</Price> <Qty>38</Qty> <Discount>10</Discount> <ExtendedPrice>477.77</ExtendedPrice> </ttOrderLine> <ttOrderLine> <OrderNum>21</OrderNum> <LineNum>2</LineNum> <ItemNum>9</ItemNum> <Price>18.0</Price> <Qty>13</Qty> <Discount>10</Discount> <ExtendedPrice>210.6</ExtendedPrice> </ttOrderLine> <ttOrderLine> <OrderNum>6030</OrderNum> <LineNum>1</LineNum> <ItemNum>3</ItemNum> <Price>2.55</Price> <Qty>13</Qty> <Discount>0</Discount> <ExtendedPrice>2.55</ExtendedPrice> </ttOrderLine>
Вместо вывода по умолчанию, который показывает все записи для каждой таблицы вместе, ABL может записывать реляционные данные в XML в отформатированном иерархическом виде. Для этого необходимо изменить определение ProDataSet, добавив ключевое слово NESTED в определение отношения данных. После того, как ProDataSet определен таким образом, метод WRITE-XML автоматически создаст XML-документ, который будет отформатирован так, чтобы показать отношения данных.
В приведённом ниже коде показано, как определить ProDataSet для таблиц Order и OrderLine, используя ключевое слово NESTED.
DEFINE DATASET dsOrderOrderLine FOR ttOrder, ttOrderLine DATA-RELATION drOrderOrderLine FOR ttOrder, ttOrderLine RELATION-FIELDS (OrderNum, OrderNum) NESTED.
Когда вы определяете ProDataSet с вложенным ключевым словом, метод WRITE-XML записывает XML-данные, сгруппированные по порядку (например, order -> orderlines, order -> orderlines и т. д.).
DATASET dsOrderOrderLine:WRITE-XML ("FILE", "dsOrderOrderLine.xml",TRUE).
Этот код создаст XML-файл с данными order и orderline, сгруппированными по номеру заказа.
<dsOrderOrderLine xmlns:xsi=:http://www.w3.org/2001/XMLSchema-instance"> <ttOrder> <OrderNum>21</OrderNum> <OrderDate>1998-02-08</OrderDate> <SchipDate>1998-02-13</SchipDate> <PromiseDate>1998-02-13</PromiseDate> <OrderTotal>688.37</OrderTotal> <ttOrderLine> <OrderNum>21</OrderNum> <LineNum>1</LineNum> <ItemNum>43</ItemNum> <Price>13.97</Price> <Qty>38</Qty> <Discount>10</Discount> <ExtendedPrice>477.77</ExtendedPrice> </ttOrderLine> <ttOrderLine> <OrderNum>21</OrderNum> <LineNum>2</LineNum> <ItemNum>9</ItemNum> <Price>18.0</Price> <Qty>13</Qty> <Discount>10</Discount> <ExtendedPrice>210.6</ExtendedPrice> </ttOrderLine> </ttOrder> </dsOrderOrderLine>