Биты и байты.

Биты и байты.

понедельник, 17 марта 2014 г.

SSIS. Веб сервисы на практике.

Допустим нужно реализовать приложение которое будет накапливать информацию о курсах валют ежедневно в нашей БД.

Воспользуемся веб сервисом для получения ежедневных данных.

Создаем SSIS пакет и настраиваем получение данных из веб сервиса, для этого:
1.создаем задачу Web Service
2.Настраиваем, соединение с WSDL файлом
3.Создаем локальный WSDL файл  и жмем кнопку DOWNLOAD WSDL


4.Выбираем нужный нам метод
5. Настраиваем файл результатов xml


Итак мы получили данные  от веб сервиса в виде xml файла, теперь немного теории XML
Для правильно чтения XML файла должен быть определен XSD файл, описывающий его структуру.
При использовании XSD файлов XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных.
Схемы бывают внешние и внутренние, т.е которые определены внутри xml файла.
Плюс в документе для схемы могут быть заданы  пространства имен описывающий именованную совокупность имён элементов и атрибутов, служащую для обеспечения их уникальности в XML-документе.
Возьмём, например, простой XML, который содержит ссылки на покупателя и на заказанный продукт. И элементы покупателя, и элементы продукта могут содержать дочерний элемент «ID_number». Ссылки на элемент ID_number будут, таким образом, неоднозначны, у нас будут два одинаковых имени элемента несущих разную смысловую нагрузку и так будет, пока мы не введём пространства имён для их различения.
Пространства имён объявляются с помощью XML атрибута xmlns, значение которого должно быть ссылкой URI.


Далее смотрим и анализируем  наш файл, видим что схема описана внутри и указано несколько пространств имен.

Сразу скажу с такой схемой на нескольких пространствах имен у меня SSIS не заработал, XML source видел схему, но не видел данных.
Поэтому  пришлось пойти другим путем , воспользоваться опцией XML TASK и сгенерировать  xml файл с одним пространством имен.
Для этого воспользуемся задачей XML TASK, вообще у этой задачи гораздо больше возможностей подробней тут

Diff
Сравнивает два XML-документа. Операция Diff сравнивает исходный XML-документ в качестве основного со вторым XML-документом, находит различия между ними и записывает их в XML-документ Diffgram. Эта операция содержит свойства для настройки сравнения.
merge
Выполняет слияние двух XML-документов. Операция Merge берет исходный XML-документ в качестве основного и добавляет к нему содержимое второго документа. Можно задать место в основном документе, куда будут вставлены данные.
Patch
Добавляет в указанный в XML-документ выходной документ операции Diff (документ Diffgram), чтобы получился новый документ, включающий в себя содержимое документа Diffgram.
Validate
Проверяет соответствие XML-документа определению типа документа (DTD) или схеме XML (XSD).
XPath
Выполняет запросы и вычисления XPath.
XSLT
Выполняет преобразование XSL в XML-документах.


Создаем файл преобразований output_xlst.xlst  копируем в него текст:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:output method="xml" indent="no" />
 
<xsl:template match="/|comment()|processing-instruction()">
   
<xsl:copy>
     
<xsl:apply-templates />
   
</xsl:copy>
 
</xsl:template>
 
<xsl:template match="*">
   
<xsl:element name="{local-name()}">
     
<xsl:apply-templates select="@*|node()" />
   
</xsl:element>
 
</xsl:template>
 
<xsl:template match="@*">
   
<xsl:attribute name="{local-name()}">
     
<xsl:value-of select="." />
   
</xsl:attribute>
 
</xsl:template>
</xsl:stylesheet> 

В результате преобразования у нас получится файл с одним пространством имен Modified_output.xml.
Теперь можно настроить Data flow  для загрузки данных в базу.
Выбираем в качестве источника компонент XML Source, задаем наш новый Xml файл и генерируем для него схему.
Выбираем   нужный нам результат, так как там он будет не один.



И создаем в базе таблицу для загрузки, жмем кнопку new
Запускаем наш пакет и видим что данные успешно загрузились в базу.


На этом все , немного юмора

Жена мужу: - Сходи в магазин и купи яиц... Муж: - У меня есть два яйца... Хватит? Жена : - А что их можно съесть? Он: - Съесть нельзя, а полизать можно! Она: - Ну и замечательно! Утром полижешь себе на завтрак:))

About