У цьому розділі буде показано, як написати XML-схеми. Ви також дізнаєтеся, що схема може бути записана по-різному.
документа XML
Давайте подивимося на цей XML - документ під назвою "shiporder.xml":
xsi: noNamespaceSchemaLocation = "shiporder.xsd">
Langgt 23
Документ XML вище складається з кореневого елемента, "shiporder", який містить обов'язковий атрибут під назвою "orderid". "Shiporder" елемент містить три різних дочірніх елементу: "orderperson", "shipto" і "item". "Item" елемент з'являється двічі, і він містить "title", необов'язковий "note" елемент, "quantity", і "price" елемент.
Лінія вище: Xmlns: XSI = "http://www.w3.org/2001/XMLSchema-instance" говорить XML-аналізатору, що цей документ повинен бути перевірений на схемі. Лінія: XSI: noNamespaceSchemaLocation = "shiporder.xsd" вказує, де знаходиться схеми що і (Here it is in the same folder as "shiporder.xml") .
Створення XML-схеми
Тепер ми хочемо створити схему для документа XML вище.
Ми почнемо з відкриття нового файлу, який ми будемо називати "shiporder.xsd". Для того, щоб створити схему ми могли б просто слідувати структурі в документі XML і визначте кожен елемент, як ми знаходимо його. Ми почнемо зі стандартною декларації XML з подальшим хз: елемент схеми, який визначає схему:
...
У схемі вище ми використовуємо стандартні простору імен (xs), і URI, пов'язаний з цим простором імен є визначення мови схеми, який має стандартне значення http://www.w3.org/2001/XMLSchema.
Далі, ми повинні визначити "shiporder" елемент. Цей елемент має атрибут і містить інші елементи, тому ми розглядаємо його як складний тип. Дочірні елементи "shiporder" елемент оточений хз: елемент послідовності, яка визначає впорядковану послідовність субелементів:
...
Потім ми повинні визначити "orderperson" елемент в якості простого типу (так як вона не містить будь - яких атрибутів або інших елементів). В типу (xs: string) з префіксом префікс простору імен, пов'язаного з XML - схеми, яка вказує заздалегідь визначений тип даних схеми:
За допомогою схем, які ми можемо визначити кількість можливих появ для елемента з MaxOccurs і атрибутами MinOccurs. MaxOccurs визначає максимальне число входжень для елемента і MinOccurs визначає мінімальне число входжень для елемента. Значення за замовчуванням для обох MaxOccurs і MinOccurs 1!
Тепер ми можемо визначити "item" елемент. Цей елемент може з'являтися кілька разів всередині "shiporder" елемента. Це визначається установкою maxOccurs атрибут "item" елемента "unbounded", що означає, що там може бути багато входжень "item" елемент, як автор хоче. Зверніть увагу на те, що "note" елемент не є обов'язковим. Ми визначили це, встановивши minOccurs атрибут до нуля:
Тепер ми можемо оголосити атрибут "shiporder" елемента. Оскільки це обов'язковий атрибут ми вказуємо використання = "потрібно".
Note: Заяви атрибутів завжди повинні прийти в останній раз:
Ось повний список файлу схеми під назвою "shiporder.xsd":
розділіть схеми
Попередній метод дизайн дуже простий, але може бути важко читати і підтримувати, коли документи є складними.
Наступний метод дизайн заснований на визначенні всіх елементів і атрибутів, а потім посилаючись на них, використовуючи ref атрибут.
Ось новий дизайн файлу схеми ( "shiporder.xsd"):
Використання іменованих типів
Спосіб третій дизайн визначає класи або типи, що дозволяє повторно використовувати визначення елементів. Це робиться шляхом іменування елементів simpleTypes і complexTypes, а потім вказати на них через type атрибута елемента.
Ось уже третій дизайн файлу схеми ( "shiporder.xsd"):
Елемент обмеження вказує на те, що тип даних був отриманий з простору імен типу даних XML-схеми W3C. Таким чином, наступний фрагмент означає, що значення елемента або атрибута повинно бути значення рядка:
Елемент обмеження частіше використовується, щоб застосувати обмеження до елементів. Подивіться на наступні рядки з поступовим зниженням дози:
Це вказує на те, що значення елемента або атрибута повинно бути рядком, воно повинно бути рівно шість символів в рядку, і ці символи повинні бути числом від 0 до 9.
XDTO - механізм 1С, який потрібен при створенні і використанні веб-сервісів в 1С.
Пакети XDTO 1С дозволяють описати структуру необхідного файлу XML для перетворення даних в XML і з XML.
Кому цікаво - розберемо питання докладніше.
Файли XML передаються через інтернет, сприймаються багатьма програмами.
Сприймаються - значить в їхньому коді зашито - якщо зустрінеш в XML файлі певне ім'я елемента - сприймай його ось так-то і роби ось це.
Тому якщо ми будемо використовувати ім'я елемента Apple, то досить великий шанс, що будь-яка інша програма може «подумати», що це відомий їй Apple, але ми то мали на увазі щось своє.
Для того, щоб такого не відбувалося і щоб явно вказувати що наш Apple відрізняється від всіх інших, у файлі може бути задано найменування простору імен - префікс, який використовується перед назвою елементів.
Визначається простір імен (англійською namespace) ось так - xmlns: ІмяПространства = "URL", наприклад:
xmlns: store = "http://store.ru"
Навіщо потрібен URL?
Тому вказується якийсь унікальний ідентифікатор, що визначає заодно і автора простору імен.
Природно мається на увазі, що вказав простір імен виключно чесна людина і вказав свій сайт і не використовує з одним сайтом кілька різних просторів імен.
До речі, зазвичай вказують не тільки URL сайту, але URL конкретної папки на сайті, щоб якщо що, можна було створити інший простір імен в інший таткові на сайті для його використання в іншій ситуації.
Об'єкт - це певна структура даних, самодостатня, що містить всі свої дані.
Так як в XML описані структуровані дані, тобто у вигляді структури, що мають свої властивості і т.п., то на них можна дивитися як на об'єкти.
У наведеному прикладі це може бути об'єкт LIST з властивістю і вкладеним елементом.
DOM - це спосіб розгляду файлу XML не як текст в певному форматі, а як набір об'єктів з властивостями, полями і так далі.
Опис файлу XML
Якщо ми використовуємо файл певної структури постійно для обміну між двома програмами, ми ймовірно хотіли б:
- Щоб були використані певні назви
- Щоб були ті елементи, які ми очікуємо (які «повинні бути для використання в нашому обміні»)
- Щоб в атрибутах були вказані ті типи, які ми очікуємо (рядок, число і т.п.).
Для опису структури XML існують такі стандарти форматів файлів (які також зберігаються в звичайному текстовому файлі):
- Розширення DTD - Document Type Definition
- Розширення XSD - XML Shema.
Обидва формати описують який повинен бути документ. Процедура перевірки відповідності XML описаного в такому файлі стандарту називають верифікація.
XDTO 1С - це, який дозволяє в конфігурацію додати опис XML файлу. Вірніше описується не файл, а конкретні структури XML.
Щоб вказати типи, можливі до використання - використовується список, бібліотека типів - яку називають фабрика XDTO 1С.
У цій фабриці вказані як прості типи (рядок, число, дата), які прийнято використовувати в інших мовах, програмах і т.п., але і типи 1С, які використовується в 1С і в конкретній конфігурації.
Фабрика XDTO 1С сама складається з декількох пакетів. Базові типи описані в пакеті з ім'ям www.w3.org
Типи даних поточної конфігурації описані в пакеті http://v8.1c.ru/8.1/data/enterprise/current-config
Самі типи називаються відповідно до імені в конфігураторі з додаванням англомовного виду (CatalogRef, CatalogObject, DocumentRef, DocumentObject), наприклад:
CatalogObject.Номенклатура
Додавання пакета XDTO 1С
Безумовно все це круто звучить. І ми не дійшли ще до теми XSLT - способу перетворювати файли XML в щось інше, наприклад в HTML. Тема XML виключно велика і її складно включити навіть в окрему книгу.
Наше завдання - зрозуміти, що XDTO 1С дозволяє описати які елементи повинні бути у пакета XML, який потрібно сформувати або вважати.
Пакети XDTO 1С знаходяться в конфігурації в гілці Загальні / Пакети XDTO 1С.
Додати пакет XDTO в 1С можна вручну (круто!), Але краще дістати відповідний XSD файл з готовим описом схеми.
Опис XSD схеми об'єктів будь-якої конфігурації можна отримати натисканням на гілку Загальні / Пакети XDTO 1С і вибравши пункт меню Експорт XML схеми конфігурації.
Файл текстовий, Ви можете відредагувати його в блокноті Windows, Прибравши зайві, непотрібні Вам об'єкти.
Додати готову XSD схему в 1С можна натиснувши правою кнопкоюна гілку Загальні / XDTO 1С пакети і вибравши пункт меню Імпорт XML схеми.
Використання механізму XDTO 1С
Робота з XDTO 1С - це перетворення значень в XML і з XML.
Робота ведеться за допомогою об'єктів мови 1С ЧтеніеXML / ЗапісьXML.
При роботі з механізмом XDTO 1С Ви повинні вказати пакет, з яким працюєте. Це може бути типовий пакет (обговорювали вище, див. XDTO) або доданий в конфігурацію пакет. Ідентифікація пакету проводиться по URL, вказаною в пакеті.
два основних простих способироботи - це:
- Серіалізация - автоматичне перетворення значень з 1С в XML і навпаки
- Створення об'єкта, заповнення його полів, запис в XML (і відповідно читання з XML і потім читання його полів).
Приклад сериализации значення:
Серіалізатор = Новий СеріалізаторXDTO (ФабрікаXDTO);
ФайлXML = Новий ЗапісьXML ();
ФайлXML.ОткритьФайл ( «имяфайла»);
Серіалізатор.ЗапісатьXML (ФайлXML, Значеніе1С);
Приклад читання / запису об'єкта:
СправочнікОб'ектXDTO = ФабрікаXDTO.Создать (ФабрікаXDTO.Тіп ( "http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Склади"));
ЗаполнітьЗначеніяСвойств (СправочнікОб'ектXDTO, СправочнікСсилка1С);
платформи: 1С: Підприємство 8.3, 1С: Підприємство 8.2, 1С: Підприємство 8.1
конфігурації: Всі конфігурації
2012-11-25
34938
XDTO - це механізм, який необхідний при створенні та роботи web-сервісів. За допомогою пакетів XDTO здійснюється опис структури необхідного файлу XML, необхідного для зміни даних з XML і в XML.
XML - це спосіб дозволяє в звичайному текстовому файлі описати складну структуру даних. У ньому описуються не тільки безпосередньо дані, але і поля, де вони зберігаються.
Ось базовий приклад XML файлу:
XML for dummies
Імена (теги), використані в даному файлі- root, list, name, el - можуть бути абсолютно довільними. Основні правила освіти XML файлу видно відразу по його структурі:
- Можливо вкладення елементів;
початок елемента<Имя>, Закінчення - те ж саме ім'я, але з приєднанням символу «/».
Перебувати всередині елемента можуть:
- Вкладені елементи;
- Текст.
У кожного елемента можлива присутність властивостей (атрибутів), у них вказується значення і ім'я. У XML забороняється використовувати будь-які символи, тому як кілька з них зайняті безпосередньо для XML, приклад «<» и «>». Спосіб опису в XML дуже зручний для використання при обміні з іншими сторонніми програмамиі використовується він в 1С механізмі обміну даними.
простір імен
Файл XML починається з заголовка, що описує версію XML, кодування тощо ... Тема в XML не зовсім обов'язковий і дуже часто його просто не застосовують. У заголовку також можливе визначення - простору імен.
XML файли передаються через інтернет і сприймаються багатьма різними програмами. Сприймаються - це значить, що в їхньому коді є зашита - якщо зустрінеш у файлі XML певне ім'я елемента, то необхідно сприймати його саме так-то і робити саме ось це. Тому при використанні нами тега IBM, то існує досить високий шанс того, що інша програма подумає, що це IBM, відомий їй, в той час як ми мали на увазі під цим щось своє.
З метою запобігання подібного і для того, щоб явно вказувати на відміну нашого IBM від всіх інших, в файлі можливе завдання найменування простору імен - префікс, що використовується перед назвою елементів.
Визначити простір імен (namespace) можна наступним чином - xmlns: Префікс (ІмяПространства) = "URL", приклад:
xmlns: store = "http://site.ru"
Навіщо ж необхідний URL? Хто вже подумав і дивиться далі - звичайно простір імен, нами придумане, може бути також не унікальна, тобто будь-хто інший також може його використовувати. Саме тому вказується особливий унікальний ідентифікатор, який визначає заодно і виконавця простору імен.
Природно мається на увазі той факт, що вказав простір імен осіб є виключно чесним. Він вказує на свій сайт і не застосовує з одним сайтом кілька різних просторів імен. Як правило, вказують як URL сайту, так і URL певної папки на сайті, потім, щоб була можливість створення іншого простору імен в будь-якої папки на даному сайті, для його застосування в будь-якій ситуації.
DOM
Об'єктом називається конкретна структура даних, що є самодостатньою і яка містить в собі всі свої дані.
У зв'язку з тим, що в XML файлі відбувається опис структурованих даних, тобто даних у вигляді структури, яка має свої властивості та інше, відповідно на них дивитися можна як на об'єкти. У розглянутому прикладі може використовуватися об'єкт LIST з властивостями і вкладеним елементом.
DOM є способом розгляду XML файлу не як тексту в конкретному форматі, а в якості набору об'єктів з полями, властивостями та інше.
До мінусів даного способуроботи, відноситься високі вимоги до продуктивності ПК, тому що DOM обробляє (формує структуру у вигляді об'єктів) відразу весь XML файл, не залежно від його розміру, і файли великого розміру (більше 4 Гб) він просто не зможе "переварити".
для розбору великих файлів, Використовується SAX, цей метод аналізу файлу заснований на послідовному читанні файлу, а не на побудові враз всій його структури .
Опис XML файлу
Якщо ми застосовуємо файл конкретної структури постійно для здійснення обміну між 2-ма програмами, то ми б ймовірно хотіли наступне:
Щоб використані були конкретні назви;
- Щоб використовувалися лише ті елементи, очікувані нами (які «повинні існувати для застосування в обміні»);
- Щоб в атрибутах вказувалися лише ті типи, очікувані нами (число, рядок, і інше).
Для опису XML структури бувають такі формати файлів (що зберігаються також в простому текстовому файлі):
Розширення DTD це Document Type Definition;
- Розширення XSD це XML Shema.
Ці формати описують яким повинен бути документ. Процедуру перевірки відповідності XML, який описується в подібному файлі стандарту, називають верифікація.
XDTO
XDTO - це об'єкт 1С, що дозволяє додати в конфігурацію опис файлу XML. Точніше описується не сам файл, а певні XML структури.
Для вказівки типів, можливих до використання - застосовується список, бібліотека типів - званий фабрикою XDTO. У даній фабриці вказуються не тільки прості типи (дата, рядок, число), які використовуються в інших програмах, мовами та інше, але також і 1С типи, що використовуються в 1С і в певній конфігурації.
Фабрика XDTO включає в себе кілька пакетів. Початкові типи описуються в пакеті з назвою www.w3.orgТипи даних в конфігурації описуються в пакеті http://v8.1c.ru/8.1/data/enterprise/current-config
Ці типи іменуються відповідно до назв в конфігураторі з додатком англомовного виду (CatalogRef, DocumentObject, CatalogObject, DocumentRef), наприклад:
CatalogObject.Контрагенти
Додавання XDTO пакета
Ми дійшли до теми XSLT - способу перетворення файлів XML у будь-що інше, наприклад в файли HTML. Тема XML вкрай велика і по ній написано не одна книга.
Нашим завданням є - зрозуміти, що XDTO дозволяє описати елементи, які повинні знаходитися у XML пакета, який потрібно вважати або сформувати. XDTO пакети знаходяться в конфігурації 1С і в гілці Загальні - XDTO-пакети.
Додати XDTO пакет в 1С можливо вручну, але краще всього дістати відповідний файл XSD з готовим докладним описомсхеми. Опис схеми об'єктів XSD будь-якої конфігурації можливо отримати шляхом натискання на гілку Загальні - XDTO-пакети і вибравши в меню пункт "Експорт XML схеми даних конфігурації".
Цей текстовий файл, Ви можете відредагувати в блокноті Windows, при цьому прибравши зайві об'єкти (непотрібні Вам). Додати готову схему XSD в 1С можливо шляхом натискання правою кнопкою миші на гілку Загальні - XDTO-пакети і вибравши в меню пункт "Імпорт XML-схеми".
Роботою з XDTO в 1С називається перетворення значень з XML і в XML. Це робиться за допомогою об'єктів 1С мови Читання XML / XMLЗапісь.
При роботі з XDTO треба вказати пакет, з яким безпосередньо і працюєте. Їм може бути як типовий пакет (див. В обговоренні вище, XDTO), так і пакет, для якого створено конфігурацію.
Ідентифікація пакета здійснюється по URL, яка вказана в пакеті. Є два способи роботи, які є основними - це:
Серіалізация - автоматичну зміну значень з XML в 1С і навпаки;
Заповнення полів об'єкта, його створення і запис в XML (а також відповідно читання з XML і надалі читання його полів).
Уявімо приклад сериализации значення:
Серіалізатор = Новий XDTO серіалізатор (XDTO Фабрика);
XML Файл = Новий XML Запис ();
XMLФайл.ОткритьФайл ( «имяфайла»);
Серіалізатор.ЗапісатьXML (XMLФайл, 1С Значення);
Зворотній функція - серіалізатор. XMLЧтеніе (), використовується з об'єктів 1С мови ЧтеніеXML.
Приклад запису / читання об'єкта:
Довідник XDTOОб'ект = ФабрікаXDTO.Создать (XDTOФабріка. Тип ( "http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Контрагенти"));
ЗаполнітьЗначеніяСвойств (СправочнікXDTOОб'ект, Справочнік.Контрагенти.НайтіПоРеквізіту ( "Ім'я", "Іванов) .Ссилка);
Потім можна зробити запис створеного об'єкта в XML абсолютно так само, як і сериализация. Під час читання XML таким же способом, що розглядався вище, може поверненню не XDTO значення, а саме такий об'єкт.
Під час створення XDTO об'єкта - створюється структура, яка аналогічна структурі об'єкта конфігурації (якщо, звичайно, Ви створюєте об'єкт конфігурації з пакета, який вказаний в прикладі вище). Типові поля (найменування, код і т.д.) є англомовними, а об'єкт створюється порожній, тому його необхідно заповнювати, окремо кожне поле або з використанням функції ЗаполнітьЗначеніяСвойств
Формат XML користується великою популярністю при обміні різними текстовими документамиміж інформаційними системами. Можливість створення унікальної структури у документів дозволяє її використовувати в багатьох областях - електронні бібліотеки, WEB, імпорт / експорт, а також багатьох інших. Без можливості зручної роботи з цим форматом системи 1С не змогли б отримати таку популярність. Оскільки 1С активно використовує WEB-технології, кожен розробник повинен вміти читати XML і записувати в них інформацію.
Подання файлу XML і його читання
Одним з ключових переваг мови розмітки XML є досить зручна і інтуїтивно зрозуміла структура і синтаксис. При його створенні автори ставили за мету створити мову розмітки, який був би зручний для читання і людиною, і ЕОМ. На сьогоднішній день XML отримав широкий розвиток в інші формати, але залишається популярним і широко використовуваним. Структура XML файлу будується за наступною схемою:
Для розгляду прикладу імпорту даних в 1С достатньо буде представленого вище файлу. Щоб написана процедура змогла прочитати XML файл, досить в неї передати шлях до самого файлу. Це можна зробити через інтерфейс, дозволивши користувачам самостійно вказувати файл, або жорстко прописавши в тексті обробки.
Одним з популярних способів роботи з XML розміром до 100 МБ в 1С вважається використання об'єктної моделідокумента (DOM). Його сенс полягає в почергової обробки всіх вузлів документа, представлених в XML. На вбудованій мові 1С цей алгоритм виглядає так:
- Оголошення механізмів, за допомогою яких відбувається читання XML файлу; Цикл для обходу вузлів;
- Зчитування даних і атрибутів в вузлі;
- Висновок інформації. Якщо є необхідність, на цьому етапі може відбуватися запис в змінні або відразу в потрібні таблиці;
- Завершення роботи механізму.
Як результат ми виводимо користувачеві повідомлення з імпортованими даними. Також ви можете помістити всі дані в потрібну структуру і на її підставі запрограмувати створення документа або записів в довіднику. Швидкість роботи 1С з xml досить велика, тому все частіше саме цей формат використовується при обміні даними з іншими джерелами.
Для вивантаження інформації нам також знадобиться взаємодія з файлами формату XML. Розглянемо приклад записи за допомогою об'єкта платформи 1С ЗапісьXML і вивантажимо дані по номенклатурі. Головними його перевагами є простота коду і швидкість обробки даних. Серверний алгоритм запису файлу XML можна представити у вигляді декількох послідовних кроків:
- Підключаємося до файлу xml;
- Створюємо головні елементи і в них записуємо дані. Якщо ви хочете вивантажити в XML файл великий обсяг інформації, то на цьому етапі у вас будуть використовуватися цикли. Будьте обережні і не забувайте, що запит даних потрібно робити до циклу, а не в ньому;
- Закриваємо файл.
Механізм XDTO в 1С
Розробники компанії 1С для обміну інформацією через XML створили власний механізм - XDTO (XML Data Transfer Objects). Починаючи з версії 8.1, в платформі з'являється можливість обмінюватися даними з іншими системами, не вникаючи в питання формування файлу XML. Більшість технічних питань бере на себе 1С, а нам залишається тільки вказувати дані, необхідні, щоб сформувати XML. Правда, для цього розробнику необхідно заздалегідь виконати деякі маніпуляції.
Щоб завантажити файл XML, використовуючи XDTO, ми повинні повідомити 1С структуру файлу. Вона передається через набір схем, які можна створити в редакторі тексту або скористатися спеціалізованою програмою. В результаті повинен вийти файл, що описує загальну структуруі типи даних, що використовуються у файлі XML. Перед тим як зчитувати або записувати новий XML, розробник повинен завантажити його схему в конфігурацію в розділ «ПакетиXDTO».
В даному випадку створимо руками простий пакет, щоб 1С розуміла структуру нашого файлу для прикладу. Щоб формування файлу закінчилося успішно, нам потрібно відобразити в схемі, що у нас присутній головний елемент і вкладення з атрибутами. Створену схему потрібно експортувати в файл формату xsd і передати разом з xml, щоб іншій стороні не знадобилося розбиратися зі структурою і знову створювати пакет xdto.
Зберегти новий XML на жорсткий дискдопоможе серверний алгоритм, схожий на попередній. Відмінність полягає лише в необхідності встановити резервування по 1 товару в фабрику XDTO - спеціальний механізм платформи 8.3 1С. Якщо є необхідність робити більше рівнів вкладеності - доведеться описувати кожен головний елемент.
// Відкриваємо файл XML ЗапісьВФайл = Новий ЗапісьXML; ЗапісьВФайл.ОткритьФайл ( "D: \ Nomenclatura.xml", "UTF-8"); // Вказуємо 1C, який тип даних слід створити - головний елемент ВсеТовари = ФабрікаXDTO.Создать (ФабрікаXDTO.Тіп ( "http://wiseadviceXML.org", "Товари")); // вибираємо дані для вивантаження ВиборкаІзСправочніка = Справочнікі.Номенклатура.Вибрать (); // Додаємо окремі товари в головний елемент Поки ВиборкаІзСправочніка.Следующій () цикл Товар = ФабрікаXDTO.Создать (ФабрікаXDTO.Тіп ( "http://wiseadviceXML.org", "Товар")); Товар.Наіменованіе = ВиборкаІзСправочніка.Наіменованіе; Товар.НачальнаяЦена = Рядок (ВиборкаІзСправочніка.НачальнаяЦена); ВсеТовари.Добавіть (Товар); КонецЦікла; // записуємо дані і закриваємо файл ФабрікаXDTO.ЗапісатьXML (ЗапісьВФайл, ВсеТовари); ЗапісьВФайл.Закрить ();Розглянуті механізми є досить універсальними і при правильному налаштуванніможуть вирішити більшість завдань. Однак у взаємодії 1С та XML досить багато нюансів. Вивчати їх набагато ефективніше в реальних умовах, а не на тестових завданнях, в яких обробка XML файлу вирішує досить вузькі завдання.
анотація: XML-схеми даних (XSD). Створення XSD-схеми в середовищі Visual Studio .NET. Створення типизированного об'єкта DataSet. Отримання інформації про структуру об'єкта DataSet. Завантаження XML-документів і XSD-схем в типізований і звичайний об'єкти DataSet. Методи ReadXml і ReadXmlSchema. Запис вмісту і структури типизированного і звичайного об'єкта DataSet. Методи WriteXml і WriteXmlSchema
Збірний об'єкт DataSet. Читання і запис XML-документів
XML-схеми даних (XSD)
Схеми даних 1 Точний переклад XML Schema Document -< схема документа XML>, Проте ми будемо надалі використовувати термін "схема даних XML". XSD (XML Schema Document, XSD) представляють собою альтернативний спосіб правил побудови XML-документів. У порівнянні з DTD, схеми мають більш потужні засоби для визначення складних структур даних, забезпечують більш зрозумілий спосіб опису граматики мови, здатні легко модернізуватися і розширюватися. Схема XSD може містити наступну інформацію:
- представлення зв'язків між елементами даних, аналогічне зв'язків зовнішніх ключів між таблицями в реляційної базі даних;
- уявлення унікальних ідентифікаторів, подібних первинному ключу;
- специфікацію типівданих кожного індивідуального елемента і атрибута в XML-документі.
Для створення схеми даних в Visual Studio .NET в головному меню переходимо File \ New \ File і вибираємо зі списку шаблонів (див. Рис. 11.3) XML Schema. З'являється вікно з написом "Щоб почати, перетягніть об'єкти з вікна Server Explorer або Toolbox на робочу область(Область дизайну) або клацніть правою кнопкою "(рис. 11.1):
Мал. 11.1.
Справа в тому, що ми знаходимося в режимі дизайну. Перемикаємося в режим коду, для чого натискаємо на кнопку (XML):
Перший рядок - це вже знайоме вказівку на те, що схема являє собою XML-документ з кореневим елементом xs: schema. Префікс xs: випереджає всі елементи схеми, вказуючи на свій простір імен. У другому рядку розташовується довге, докладне і часто абсолютно непотрібне опис схеми (порівняйте з аналогічним кодом для HTML-сторінок). Для коректної роботи цілком достатньо обмежитися наступним поданням:
Втім, вбудовані засоби візуалізації студії припускають наявність цієї "шапки", тому її не слід видаляти. Створення схеми, яка описує заданий XML-документ в середовищі Visual Studio .NET - досить просте завдання. Створимо наступний документ XMLEasy.xml:
Перемикається на вкладку (Data) і бачимо всього один запис (рис. 11.2).
Мал. 11.2.
Створити схему, що описує цей документ, можна кількома способами: в головному меню вибрати пункт "XML \ Create Schema" (рис. 11.3, А), в режимі XML в контекстному менювибрати цей же пункт (рис. 11.3, б), в режимі Data в контекстному меню вибрати цей пункт (рис. 11.3, В), і, нарешті, в режимі Data натиснути на кнопку панелі інструментів XML (рис. 11.3, Г).
Мал. 11.3.
У будь-якому випадку з'являється схема документа у вигляді таблиці (рис. 11.4). Залишимо поки режим Schema і перемкнемося в режим (XML).
Мал. 11.4.
Середа згенерувала XML-код, що описує структуру документа:
Сюди входить також опис, необхідне для подальшого маніпулювання схемою за допомогою об'єктів ADO .NET. У вихідному документі XMLEasy.xml з'явилося посилання на схему даних:
Документ XMLEasy.xsd був автоматично створений в тій же самій директорії, де знаходиться XMLEasy.xml.
Для того щоб навчитися розуміти схеми XSD, спочатку слід попрацювати з описом даних в чистому вигляді, без додаткових елементів. У таблиці 11.1 наводиться кілька найпростіших XML-документів і їх схем, сформованих без прив'язки до об'єктів ADO .NET.
Вміст XML-документа | Вміст XSD-схеми |
---|---|
|
|
опис | |
У документі XMLEasy.xml елемент TOUR - кореневий елемент, що містить дочірній елемент IDTOUR. Загальна схемадля кореневого елемента має наступний вигляд: |
|
Вміст XML-документа | Вміст XSD-схеми |
|
|
опис | |
Кореневий елемент TABLE містить елемент TOUR, що складається, в свою чергу, з групи дочірніх елементів. Елемент choice визначає вибір інших елементів, причому значення "unbounded" (необмежено) атрибута maxOccurs вказує на можливість необмеженого наявності груп TOUR. |
|
Вміст XML-документа | Вміст XSD-схеми |
|
Мал. 11.5. |
опис | |
Для елемента IDTOUR був встановлений тип даних int, для елемента CLOSED - тип boolean, для інших - за замовчуванням тип string. Змінювати тип даних можна безпосередньо в режимі XML-схеми даних, але більш зручно - в режимі Schema (в даному випадку режим буде називатися DataSet) вибирати тип даних зі списку (рис. 11.5): |
В програмному забезпеченнідо курсу ви знайдете всі файли цієї таблиці в папці XSD (Code \ Glava5 \ XSD).
Завдання типу даних в XML-документі (останній приклад - табл. 11.1) - один із способів обмеження вмісту. Для обмеження значення заданого типу застосовуються додаткові атрибути. У наступному фрагменті схеми значення елемента PRICE має бути в межах від 50 до 100:
Для обмеження XML-документа деякими фіксованими значеннями використовується наступна конструкція:
Тут елемент NAME може приймати тільки одне фіксоване значення з п'яти назв країн.
Розробка XSD-схеми є досить копітку роботу. Візуальні засоби середовища Visual Studio .NET значно полегшують це завдання. Для освоєння основних концепцій бажано вивчити кілька схем XML-документів, створених автоматично. У таблицях 11.2-11.4 наводиться опис основних елементів і атрибутів, які при цьому можна зустріти.
елемент | опис |
---|---|
all | Вкладені елементи можуть визначатися в довільному порядку |
annotation | Батьківський елемент елементів-коментарів |
any | Будь-які вкладені елементи |
anyAttribute | будь-які атрибути |
appInfo | Елемент-коментар. Задає титул схеми |
attribute | Атрибут |
attributeGroup | Група атрибутів |
choice | Вибір інших елементів. Аналог оператора "|" в DTD |
complexContent | обмеження або розширення моделівмісту складного типу |
complexType | Елемент складного типу |
documentation | Елемент-коментар. Надає інформацію про схему |
element | елемент |
extension | розширення елемента |
field | Оголошення поля. Застосовується всередині елемента |
group | Група елементів |
import | Імпорт декларації типів з іншої схеми |
include | Включення іншої схеми в існуюче простір імен |
key | Завдання елемента або атрибута з ключем, що вказує на інший елемент |
keyref | Завдання елемента або атрибута, на який вказує ключ |
list | Елемент, який може містити список значень |
redefine | Перевизначення вже оголошених елементів |
restriction | обмеження елемента |
schema | Кореневий елемент схеми |
selector | Селектор для відбору XML-елементів |
sequence | Послідовність інших елементів. Аналог оператора "," в DTD |
simpleContent | Модель, вміст якої становить лише символьні дані |
simpleType | Елемент простого типу |
union | Елемент або атрибут, який може мати множинне значення |
unique | Елемент або атрибут, який повинен мати унікальне значення |
Атрибут | опис |
---|---|
enumeration Список значень | |
length | довжина |
maxLength | Максимальна довжина |
minLength | мінімальна довжина |
maxExclusive | Максимальне значення |
maxInclusive | Максимальне значення включно |
minExclusive | Мінімальне значення |
minInclusive | Мінімальне значення включно |
fractionDigits | Кількість знаків після коми в дрібних числах |
totalDigits | кількість цифр |
pattern | Зразок (патерн) вмісту елементів |
default | Значення елемента або атрибута за замовчуванням |
elementFormDefault | Завдання властивостей локального елемента як глобально певного |
fixed | Фіксоване значення елемента або атрибута |
form | Локально оголошені елементи визначаються в конкретних примірниках документів |
itemType | Тип пунктів списку |
memberTypes | Тип членів, використаних в об'єднанні (union) |
maxOccurs | Максимальна кількість входжень елемента |
minOccurs | Мінімальна кількість входжень елемента |
mixed | Завдання елемента, що має змішаний тип |
name | Назва елемента або атрибута |
namespace | простір імен |
noNamespace | Завдання розташування документа-схеми, |
SchemaLocation | не має результуючих просторів імен |
nillable | Визначення того, що елемент може мати пусте значення NULL (nil) |
ref | Завдання посилання на глобально певний елемент |
schemaLocation | Позиціонування схеми |
substitutionGroup | Визначення заміни елементів іншими елементами |
targetNamespace | Результуючий простір імен схеми |
type | Тип елемента |
use | Є елемент обов'язковим чи ні |
value | Значення елемента схеми |
xsi: nil | Завдання реального змісту порожнього (NULL) елемента XML-документа |
xsi: schemaLocation | Реальне місце розташування елемента в XML-документі |
xsi: type | Реальний тип елемента в XML-документі |