Service Data Objects (SDO) 2

Що таке SDO?
Service Data Object (SDO, Об'єкти службових даних) 2.0 - це API-інтерфейс програмування моделей даних, побудований на основі відкритого стандарту, який дозволяє розробникам легко маніпулювати даними на високому рівні. Хоча версія SDO 1.0 спрямована на ті ж завдання абстрагування даних, вона має ряд значних недоліків, основним з яких є відсутність класів helper, таких як XSDHelper , XMLHelper і т.п. У результаті розробник змушений використовувати інтерфейси реалізації SDO 1.0, що походять із SDK середовища моделювання Eclipse Modeling Framework (EMF).
У поточній реалізації SDO 2.0 використовується SDK EMF 2.2, але ця особливість реалізації не впливає написання програм для нового API. У майбутньому спільнота розробників програмного забезпечення з відкритим вихідним кодом у рамках Apache Software Foundation може ухвалити рішення про зміну реалізації SDO 2.0, але це не повинно вплинути на програми, що використовують інтерфейси API SDO 2.0.
Найпростіший спосіб продемонструвати переваги нового API – використовувати SDO 2.0 для створення та подальшого читання документа XML, сумісного зі схемою XML (XSD). Щоб зробити це без SDO 2.0, розробник мав би розуміти, як працює парсер XML і тісно інтегрувати логіку аналізу даних у додаток. Пізніше, при зміні XSD, необхідно було б внести в додаток безліч змін, що наражає на небезпеку якість коду.
Новим користувачам API SDO 2.0 буде складно зрозуміти основні ідеї шляхом простого вивчення специфікації. Щоб допомогти їм, я створив приклад із Підручника за схемою XML для початківців (див. розділ Ресурси), який пояснює використанняAPI SDO 2.0 для:
- Записи на диск документа XML та
- Його читання.
Сценарій: збір та надання інформації про замовлення на купівлю
Спробуймо реалізувати цей сценарій у нашому прикладі. Спочатку компанія визначає вимоги до інформації, що міститься в замовленнях на купівлю (PO). Після цього ми починаємо створювати статичну форму структурування інформації. У базах даних така статична форма називається схемою таблиці. У XML ця статична форма називається схемою XML (XSD). Пізніше, якщо потрібно зібрати будь-яку додаткову інформацію про клієнта, нам потрібно буде змінити форму/схему таблиці/XSD.
При розміщенні замовлення клієнт має заповнити форму замовлення або надати цю інформацію оператору, який заповнює форму. Згодом інформація цієї форми використовуватиметься компанією для доставки замовлення.
Після того, як компанія отримає інформацію про замовлення, вона, найімовірніше, збереже її і згодом використовуватиме, наприклад, для підтримки клієнта. У цьому прикладі ми можемо зберегти інформацію у форматі XML, а потім прочитати її за допомогою API SDO.
На малюнку 1 показаний приклад інформації замовлення, одержаної від клієнта Robert Smith. Для структурування цього зразка замовлення створимо файл XSD. Приклад замовлення створюється за допомогою програми CreatePurchaseOrder.java у форматі XML під назвою po.xml. Зрештою, за допомогою ReadPurchaseOrder.java ми демонструємо процес читання інформації про замовлення з po.xml .
Рисунок 1. Приклад інформації про замовлення від Robert Smith
Повітряна інформація: Name: Alice Smith Street: 123 Maple Street City: Mill Valley State: CA Zip код: 90952 Country: US
Billing information: Name: Robert Smith Сторіт: 8 Oak Avenue City: Mill Valley State: PA Zip код: 95819 Country: US
Order Items: 1. Part number: 872-AA Product name: Lawnmower Quantity: 1 Price: 148.95 Comment: Confirm this is electric
2. Part number: 926-AA Product name: Baby Monitor Quantity: 1 Price: 39.98 Ship date: 1999-05-21
Комментарія: Hurry, мій лай is going wild!
Схема XML замовлення на купівлю
На основі прикладу замовлення на покупку, показаного на малюнку 1, ми можемо створити спеціальний тип даних для замовлень на покупку. Давайте назвемо його PurchaseOrderType. Примірник PurchaseOrderType може містити чотири основні розділи даних:
- shipping information
- billing information
- order items information
- comment
Інформація про доставку (shipping information) та оплату (billing information) може містити додаткові дані, наприклад, name, street, city, state, zip та country. Інформація про замовлення (order items information) може містити безліч даних про товари, замовлені клієнтом. Для кожної позиції може вказуватися part number, product name, quantity, price, ship date та comment. В області приміток міститься рядкове значення, додаткове структурування цієї інформації не потрібно.
У Лістингу 1 показано всю інформацію про замовлення у файлі, структурованому у форматі XSD.
Лістинг 1. PO.xsd
Також для структурування інформації замовлення можна використовувати діаграму класів уніфікованої мови моделювання (UML), наведену на малюнку 2.
Малюнок 2. Діаграма класів UML для замовлення на покупку


Файл XSD po.xsd та діаграма класів UML маютькілька відмінностей:
- У діаграмі класів визначено тип ItemType, який не визначається в po.xsd.diagram. Незважаючи на те, що po.xsd не визначає ItemType безпосередньо, специфікація XSD обробляє ItemType як анонімний тип.
- Усі xsd: у файлі XSD скорочуються до діаграми класів. У файлі XSD частина xsd шаблону xsd: використовується для позначення простору імен, до якого належить тип. У діаграмі класів для простоти ми цю вказівку опускаємо.
- SKU type у діаграмі класів не визначається. SKU type фактично є нормалізованим рядковим типом, визначеним у просторі імен po . У діаграмі класів він представлений типом string type.
Створення прикладу замовлення в XML
Приклад CreatePurchaseOrder.java , показаний у Лістингу 2, створює замовлення на купівлю у форматі XML під назвою po.xml , наведений у Лістингу 3.
Лістинг 2. CreatePurchaseOrder.java
Лістинг 3. Po.xml
Цей приклад програми Java спочатку реєструє всі типи, описані в po.xsd , використовуючи робоче середовище SDO і викликаючи метод XSDHelper.INSTANCE.define() . Після цього створюється кореневий документ DataObject типу PurchaseOrderType. При цьому за допомогою використовується API DataObject будується дерево DataObject , що представляє інформацію про замовлення, показане малюнку 3, .
Малюнок 3. Дерево DataObject


Кожен прямокутник на малюнку 3 складається з двох частин. Верхня частина (сірого кольору) позначає назву екземпляра DataObject та його реальний тип; в нижній частині показані властивості, що містяться в ньому. Наприклад, кореневим об'єктом дерева є екземпляр purchaseOrder DataObject ; його реальний тип - PurchaseOrderType , який визначено в PO.xsd в Лістингу 1. У цьомуПримірник DataObject містить два значення властивостей – orderDate і comment .
Після створення дерева DataObject програма викликає метод XMLHelper.INSTANCE.save() , зберігаючи вміст дерева, починаючи з екземпляра purchaseOrder DataObject , документ XML - в даному випадку po.xml. Насправді як перший параметр методу XMLHelper.INSTANCE.save() ви можете вказати будь-який екземпляр DataObject з дерева, і метод save() збереже всі екземпляри DataObject , починаючи з вказаного.
Читання прикладу замовлення
Після того, як CreatePurchaseOrder.java створить файл po.xml, ми можемо скомпілювати і запустити програму ReadPurchaseOrder.java, представлену в Лістингу 4, щоб продемонструвати використання API SDO для читання вмісту файлу po.xml. Додаток виконує такі дії:
- Перевіряє, чи зареєстровані типи, визначені в po.xsd у середовищі SDO
- Викликає метод XMLHelper.load() для завантаження пам'яті файлу po.xml , який представляється екземпляром XMLDocument xmlDoc
- Викликає метод xmlDoc.getRootObject() для вилучення кореневого об'єкта DataObject дерева purchaseOrder , що відповідає purchaseOrder DataObject у дереві DataObject діаграми, показаної на малюнку 3
- Після отримання purchaseOrder DataObject програма проходить по дереву DataObject і витягує всю інформацію про це замовлення
Лістинг 4. ReadPurchaseOrder.java
System.out.println() , виділений жирним шрифтом у Лістингу 4, показує значення властивостей різних об'єктів даних, до яких входять:
- orderDate і comment - властивості purchaseOrder DataObject
- name - властивості shipTo DataObject
- name - властивості billTo DataObject
- partNum і productName - параметри різнихоб'єктів даних
Рисунок 4. Виведення результатів роботи ReadPurchaseOrder на консоль
Comment: Hurry, my lawn is going wild! Ship to name: Alice Smith Bill to name: Robert Smith
Part num: 872-AA Product name: Lawnmower
Part num: 926-AA _Product name: Baby monitor _
На малюнку 4 можна побачити результат роботи коду Java ReadPurchaseOrder.
Висновок: SDO може стати фактичним стандартом API-інтерфейсу програмування моделі даних
Інтерфейси SDO 2.0 надають одноманітний спосіб створення даних і доступу до них, а також позбавляють розробників необхідності детальної розробки процедур парсингу і підтримки цілісності даних. Сьогодні SDO 2.0 є інкубаторним субпроектом (під назвою Tuscany) організації Apache Software Foundation, мета якого - стати де-факто стандартним інтерфейсом програмування моделей даних для розробки SOA. Посилання можна знайти у розділі Ресурси.
Як можна бачити з наведених вище прикладів, інтерфейси SDO 2.0 повністю позбавляють вас необхідності знання і використання API парсера XML для читання, запису та управління даними. Якщо ви створюєте на Java DataObject , що представляє дані XML відповідно до певної схеми XML, SDO 2.0 забезпечує вам зручність і гнучкість, дозволяючи сконцентруватися безпосередньо на роботі з даними. В результаті цей API надає значні переваги, що полягають у підвищенні продуктивності розробки та якості продукту.
Таким чином, використання технології абстрагування даних, реалізованої в SDO 2.0, дозволяє вам трактувати дані відповідно до певної бізнес-логіки, щоб вирішувати завдання бізнесу. Це допомагає спростити розробку бізнес-додатків та підвищити продуктивність вашої команди та якість її роботи.
Ресурси для скачування
Схожі теми
- Оригінал статті Service Data Objects (SDO) 2.0: Create and read XML document based on XML Schema (EN).
- Опис пристрою XML та процесу створення схем за допомогою мови схем XML можна знайти на сайті W3C у документі Схема XML, частина 0: Підручник для початківців, друге видання (EN).
- Прочитайте специфікацію Service Data Objects (EN).
- Докладніше дізнатися про проект Tuscany/SDO 2.0 (EN) можна на веб-сайті організації Apache Software Foundation.
- SOA та Web-сервіси - у цьому розділі міститься безліч інформативних статей та навчальних матеріалів початкового, середнього та просунутого рівня з розробки додатків для Web-сервісів.