Выгрузка базы в XML
Для выгрузки данных из базы в XML-формате существует множество различных пользовательских инструментов, выложенных например на sourceforge.net или на других сайтах. В принципе, можно создать XML-файлик и собственным программныи кодом, как например я создал XML вот тут - XML-коллектор параметров ASP2-форм & XSLT-генератор динамических SQL, но вообще-то уже лет 10 пользователи сами (без программистов) могут создать код для разгрузки данных автоматически с помощью различных инструментов. Лет 10 назад я делал это с помощью какой-то Exelon studio, Потом на смену пришли другие инструменты. Какое-то время я делал это с помощью MS Integration Services, но в основном (поскольку я программист, а не пользователь) лично я делал разгрузки встроенными в SQL средствами.
Сейчас, насколько я понимаю, самым распространенным и функионально продвинутым пользовательским инструментом является XML-инструменты компании Altova. У меня даже сохранился скриншот сайта этой компании 2004-го года в котором инструментом разгрузки данных этой компании пользовались более миллиона пользователей. С тех пор прошло более шести лет!
На этой страничке будет описано, как решить эту самую распростаненную задачку - периодическую выгрузку данных из базы с помощью инструментов MapForce и XMLSpy. Партнеры могут импортировать созданный вами XML-файл например описанным тут SQL-Client_for_remote_XML-WebService - клиент meteonova.ru способом и представлять данные из вашей базы на своем портале. Собственно, XML и был ровно для того разработан, чтобы сделать удобным такое кроссплатформенное общение между различными организациями.
Парсинг XML-файлов, которыми обмениваются предприятия, вообще говоря, является одной из самых распространенных стандартных задач программистов, например здесь Практическое применение наследования, полиморфизма, интерфейсов, дженериков и делегатов на примерах в Visual Basic .NET. я описывал как загружать нерегулярную структуру XML в классические типизированные NET-объекты. В самом MS SQL-сервере тоже есть отличные встроенные средства (которыми я обычно выполняю первичный парсинг-фильтрацию). Самое главное, что надо понимать при работе с XML: XML - это самый медленный из существующих способов обмена данными. Из-за чего и были придуманы всякие менее универсальные, но более быстрые форматы, например JSON. Выпускаются также различные аппаратные XML-акселераторы. Лично мне на протяжении последних 10 лет неоднократно приходилось переделывать системы, сделанные на XML на собственные специфические форматы обмена данными. Именно из-за того, что при возрастающих обьемах обмена данными производительность сериализации данных в XML и обратной десериализации из XML совершенно не могла удовлетворить бизнес-потребностям этих организаций. Тем не менее, это хотя и медленный, но самый универсальный способ обмена данными.
Итак, для начала сгружаем с сайта Altova два инструмента MapForce и XMLSpy. Для всех дальнейших манипуляций можно использовать 30-дневную версию Enterprise. Cоздаем новый MapForce-проект и новую разгрузку данных. Теперь открываем в MapForce базу с данными.
Чтобы построить план разгрузки данных, надо иметь XML-схему (XSD) документа, который должен получится в итоге разгрузки. Я не буду строить XML-схему итогового документа с нуля, а возьму уже имеющийся у меня XML-документ. Для этого я прочитаю этот XML-документ (для этого удобнее использовать XmlSpy), построю по нему XML-схему, а затем добавлю созданную схему в проект разгрузки данных. Здесь во всей красе раскрываются возможности XMLSpy - мне нравится просмотр иерархических XML-данных в табличной форме, редактирование схемы в дизайнере (для просмотра всей схемы открывайте корень XML-документа). Разумеется, это не все возможности XMLSpy - основное назначение этого инструмента XSLT-преобразования и запросы XQuery - но на этом мы сейчас останавливатся не будем.
Теперь, когда в нашем проекте разгрузки уже есть разгружаемая база и схема разгрузки, добавим в проект MapForce план разгрузки. И далее надо сформировать план разгрузки путем сопоставления базы и схемы разгрузки соединением мышкой полей базы и полей схемы. При этом можно вводить условия- когда именно поля базы попадают в разгрузку. Чтобы не забыть какие данные лежат в базе в каких полях, можно переключится в режим DatabaseQuery, выбрать базу и посмотреть что за данные лежат в той или иной таблице. Понятно, что если таблиц много, проще сделать вьюху, в которую занести все необходимые для разгрузки данные. Надо стараться поменьше загружать в MapForce лишних данных, ибо и итоговый XML и данные должны поместится в памяти. Достаточно переключится на вкладку Output, чтобы увидеть результат разгрузки.
После отладки разгрузки в диалоге MapForce, можно наконец приступить к изготовлению Run-time кода разгрузки. Для этого MapForce имеет генератор того самого тупого кода, который так не любят писать программисты. И ведь действительно - зачем его писать вручную? Один щелчок мышкой и код разгрузки готов. Открываем проект в студии и делаем Exe-файл.
Наконец, последнее что надо сделать для выгрузки базы - это наладить выгрузку актуальных данных периодически или по требованию пользователей сайта. Делается это тоже парой щелчков мышкой. Создаем SQL-задание (предварительно разобравшись, конечно, с безопасностью сервера), и запускаем SqlJob или вручную из диалога или по времененному плану загрузки или из процедуры, которую вызывают с сайта партнеры. И наслаждаемся результатом - разгруженными в требуемом XML-формате данными своей базы.
В заключение хотелось бы отметить, что описанные инструменты разрузки позволяют формировать разгрузки базы именно обычным пользователям, менеджерам например. Чтобы разгрузить данные с помощью описанных инструментов - знание программирования не требуется, требуется только уметь пользоваться мышкой. Те пользователи, которые в состоянии асилить хотя бы язык SQL, могут разрузить базу в XML с помощью встроенных в SQL средств FOR XML. Но это конечно не MapFprce, которым можно гибко формировать выходной формат разгружаемых данных просто несколькими щелчками мышкой. Кстати, парсить сформированный XML обратно в реляционные структуры SQL тоже очень удобно встроенными средствами SQL. Обратите внимание, что в этой SQL-вьюшке (как и везде в XML) отборы и навигация по дереву XML выполняется с помощью выражений Xpath/Xquery. MapForce как раз и есть инструмент построения этих выражений с помощью мышки обычным офисным планктоном, а не программистами.
И наконец, последнее замечание. Если у вас уже есть разгруженные данные хоть в каком-нибудь XML-формате, то их всегда можно преобразовать в другой XML-формат с помощью XSLT-преобразования. Сделать это можно не только с помощью описанной тут XMLSpy, но и с помощью Visual Studio 2008. В отличие от многих глюкавых микрософтовских проделок, которые я часто ругаю на своем сайте - в Visual Studio 2008 есть все инструменты для работы с XML/XSLT - подказка для языка XSLT, отлично работающий XSLT-отладчик, предпросмотр отборов Xpath/Xquery, редактор XML-схем и прочие необходимые инструменты для работы с XML/XSLT.
Вот только программирование на XSLT не так просто асилить мозгом даже профессионального программиста. Это напониминает программрование на PERL с помощью регулярных выражений, причем результат преобразования (каждая его часть) сразу же рекурсивно попадает на вход обработчика регулярного выражения. А само управляющее регулярное выражение преобразования XML-деревьев тоже как бы записано в XML-нотации. Понять такую парадигму непросто даже профессиналам. Тем более ценным являются визуальные инструменты Altova, которые позволяют создавать сложные XSLT-трансформации XML-выражений не только усилиями суперпрограммистов, а силами любого обычного офисного планктона, обучившегося пользоватся мышкой. И поэтому у XML-инструментов Altova такая бешеная популярность: по сообщениям прессы Altova имеет более 3 миллионов фирм-клиентов по всему миру, включая практически все компании из списка Fortune 500.
Но как я уже говорил, от нас программистов, эти радости наших пользователей далеко: у нас есть свои механизмы экспорта - Этюды на ASP2. Делаем RSS-канал на одной SQL-процедуре, Экспорт данных из PostgeSQL в XML.
В заключение мне хотелось бы еще заметить, что сама по себе ALTOVA достаточно многофункциональный инструмент, который хорошо работает во многих случаях (и иногда незаменим даже для программистов). Например он прекрасно работает для тестирования SOAP/WSDL-сервисов, о которых вы можете почитать тут - Как сделать SOAP/WSDL-вебсервис на ASP.NET/MONO для вызова его из FLEX.