Вычисления в XML документах
из инета не видно
В инет кто-нибудь выложите пожалуйста !
Выкладывать в Интернет я пока не хочу, и просьба ко всем не делать этого. Если нужно могу прислать вам по почте, пишите в приват.
up
Задумка интересная. Только вот целесообразность под вопросом, как мне кажется. У тебя та же самая Excel-таблица в XML-представлении, ты ее считаешь и перегоняешь в другой XML, который опять же по сути есть представление какой-то Excel-таблицы.
Можно подробнее про генератор?
Это XSLT шаблон или прога?
Это XSLT шаблон или прога?
Вовсе нет. Excel – это всего лишь плоская таблица, т.е. если в XML представлении, то двухуровневое дерево (например, посмотри как Excel2002 сохраняет в XML). Разметка в плоской таблице не несет информацию из предметной области. В XML же наоборот, разметка вводит структуру документа исходя из предметной области. По этой же причине сейчас пытаются перейти (где это нужно) от HTML к XML. В HTML-е таблица задается “не о чем не говорящими” тегами <tr> и <td>. Да что там говорить, попробуй реализовать второй мой пример на Excel (только не через сводную таблицу). Как ты будешь подводить итоги?
Вообще, сейчас многие организации хотят уйти от cбора отчетности в Excel, некоторые пробуют перейти на XML, но тут иногда возникают вопросы.
Если я правильно тебя понял, и ты не путаешь Excel c XSL.
Вообще, сейчас многие организации хотят уйти от cбора отчетности в Excel, некоторые пробуют перейти на XML, но тут иногда возникают вопросы.
Если я правильно тебя понял, и ты не путаешь Excel c XSL.
Обработчик XML документов это XSLT+ прога, использующая динамически сгенерированную XSLT-стил. таблицу.
Вот про это и хотелось услышать. Какая прога,
на чем написана, где работает. А не смотреть пол-статьи
на примеры XML-документа.
на чем написана, где работает. А не смотреть пол-статьи
на примеры XML-документа.
Я могу показать эту прогу. Если не считать инициализацию переменных, то это цикл из 10 строчек. Написана на Delphi, просто тогда шла на нем разработка (можно переписать на чем угодно). Да и еще не большая XSLT.
А вообще, я хотел услышать мненме о самом способе.
Там всего два примера. Ты считаешь второй пример лишним? По-моему, он демонстрирует приемущества.
А откуда берутся постоянные "../../"? И что они в данном случае означают?
там написано, что текущий контекст - это местоположение самого выражения, а ../../ это выход на родителей
В Excel и вложенные таблицы имеются
Оба твоих примера как раз довольно-таки "табличные".
Такой инструмент вообще для задач несколько иного рода предназначается. Это как яблоки с апельсинами сравнивать. С трудом представляю себе человека, переходящего с Excel на какие-то XML файлы
Ах да, заодно надо научить его писать на XSLT.
Тут фишка в чем? В автоматическом разрешении зависимостей между формулами. На этом и надо заострять внимание, ИМХО. Все остальное в XPath есть, тем более если его расширить всякими агрегатными функциями.
Оба твоих примера как раз довольно-таки "табличные".Такой инструмент вообще для задач несколько иного рода предназначается. Это как яблоки с апельсинами сравнивать. С трудом представляю себе человека, переходящего с Excel на какие-то XML файлы
Ах да, заодно надо научить его писать на XSLT.Тут фишка в чем? В автоматическом разрешении зависимостей между формулами. На этом и надо заострять внимание, ИМХО. Все остальное в XPath есть, тем более если его расширить всякими агрегатными функциями.
Что за вложенные таблицы? (извиняюсь за свое незнание) В поиске такого термина нет. В Access есть, но они тут не причем.
Ok
ps
но в обоих примерах, ИМХО, они очень неестественно смотрятся.
ps
но в обоих примерах, ИМХО, они очень неестественно смотрятся.
Если ты имел ввиду "Создание структуры" в Excel, то это не совсем то.
Эээ... может быть, я имел в виду тоже, что и ты под словом "сводные"... В английской версии есть какие-то Subtotals - никогда не пользовался, правда. А есть еще PivotTable, но это для весьма продвинутых пользователей - там уже можно вроде бы многомерные таблицы наворачивать, опять же сам никогда не пользовался.
PivotTable - это уже нечистые эелектронные таблицы (точнее вообще не электронные таблицы). Это скорее клиентский компонет для OLAP. Причем достаточно ограничен по возможностям. По-моему, предложенный способ более мощный из-за возможностей XPath. Хотя конечно же, этот способ не противопоставляется клиентам OLAP, он скорее позицианируется для сбора отчетности.
Что касается “констант” ../, я над этим сам думал. Если их попытаться устранить, т.е. текущий контекст отсчитывать от родителя, то, например, теряется информация о том, в каком именно атрибуте находится вычисляемое выражение. Например, если требуется поместить итоговую сумму в атрибут родительского элемента, и имя этого атрибута такое же как у дочерних элементов
<item a1="{sum(../*/@*[name=name(current])}">
<item a1="7" a2="9"/>
</item>
Можно сделать соответствующую опцию в обработчике. Можно так же разделить текущий контекст для текстовых узлов и для значений атрибутов.
<item a1="{sum(../*/@*[name=name(current])}">
<item a1="7" a2="9"/>
</item>
Можно сделать соответствующую опцию в обработчике. Можно так же разделить текущий контекст для текстовых узлов и для значений атрибутов.
up.
Также очень удобно применять xsl не к xml-у, а к реальной программе. Т.е. программа реализует IXPathNavigator на основе своих данных (объекты, свойства далее применяем к IXPathNavigator-у xsl-преобразование, на выходе получаем обработанные данные, которые опять можно превратить в реальные объекты.
На сколько я понял, класс XPathNavigator читает данные из XML-хранилища (store). Почему ты пишешь
?
Ты имел ввиду XSLT, используемые в моем подходе?
P.S. Выражайся точнее, интерфейсы реализуют классы, а не программы, т.е. не очень понятно слово “объекты” в скобочках.
не к xml-у
?
Ты имел ввиду XSLT, используемые в моем подходе?
P.S. Выражайся точнее, интерфейсы реализуют классы, а не программы, т.е. не очень понятно слово “объекты” в скобочках.
> класс XPathNavigator читает данные из XML-хранилища (store).
Так вот можно как раз сделать, чтобы XPathNavigator бегал не по xml-хранилищу, а по реальным объектам.
Допустим у нас такие классы в программе:
тогда мы можешь реализовать IXPathNavigator, который будет бегать по этим объектам, и эмулировать следующий xml-представление:
Далее к этому IXPathNavigator-у легко можно применить твое xslt-преобразование.
> Выражайся точнее
Дык, более разжеванная идея - требует больше времени.
Так вот можно как раз сделать, чтобы XPathNavigator бегал не по xml-хранилищу, а по реальным объектам.
Допустим у нас такие классы в программе:
class Data
{
public Customer[] Customer {get;}
}
class Customer
{
public Order[] Orders {get;}
public string Name {get;}
}
class Order
{
public double Price {get;}
public DateTime Time {get;}
}
тогда мы можешь реализовать IXPathNavigator, который будет бегать по этим объектам, и эмулировать следующий xml-представление:
<Data>
<Customer name="qq">
<Order Time="20.11.03" Price="100" ></Order>
<Order Time="23.11.03" Price="150" ></Order>
<Customer>
<Customer name="qq2">
<Order Time="20.11.03" Price="100" ></Order>
<Order Time="23.11.03" Price="150" ></Order>
<Customer>
</Data>
Далее к этому IXPathNavigator-у легко можно применить твое xslt-преобразование.
> Выражайся точнее
Дык, более разжеванная идея - требует больше времени.
свойство
>public string Name {get;}
в классе Customer, да?
>public string Name {get;}
в классе Customer, да?
да. извини, ошибся. Исправил.
это реально используется?
У нас пока нет.
ps
Но кто-то как раз на днях говорил, что у них в проге (что-то из разряда склад-учет) реализован в том числе доступ через IXPathNavigator.
ps
Но кто-то как раз на днях говорил, что у них в проге (что-то из разряда склад-учет) реализован в том числе доступ через IXPathNavigator.
Вообще, интересно надо над этим подумать.
А пока не подумал
, вот такой вопрос: в чем приемущество XSLT здесь? зачем его здесь использовать?
А пока не подумал
, вот такой вопрос: в чем приемущество XSLT здесь? зачем его здесь использовать?В первую очередь - упрощается разработка отчетов, упрощается просмотр внутреннего состояния программы и т.д.
ps.
Если сделать свой не только IXPathNavigator, но и IXmlWriter - то можно использовать xsl и для преобразования объектов. Особенно может это пригодится в задачах со сложной структурой данных, и при этом где нет особых затыков по производительности.
ps.
Если сделать свой не только IXPathNavigator, но и IXmlWriter - то можно использовать xsl и для преобразования объектов. Особенно может это пригодится в задачах со сложной структурой данных, и при этом где нет особых затыков по производительности.
Оставить комментарий
mezenat
Я придумал интересный способ выполнения вычислений в XML документах и написал по этому поводу . Предполагается, что читатель знаком с XPath и XSLT. Может быть, этот способ будет полезен для решения ваших задач. Этот способ успешно функционирует в одном крупном предприятии. Мне хотелось бы услышать ваши комментарии.