У цьому розділі буде показано, як написати XML-схеми. Ви також дізнаєтеся, що схема може бути записана по-різному.

документа XML

Давайте подивимося на цей XML - документ під назвою "shiporder.xml":

xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi: noNamespaceSchemaLocation = "shiporder.xsd">
John Smith

Ola Nordmann

Langgt 23

4000 Stavanger
Norway


Empire Burlesque
Special Edition
1
10.90


Hide your heart
1
9.90

Документ 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С цей алгоритм виглядає так:

  1. Оголошення механізмів, за допомогою яких відбувається читання XML файлу; Цикл для обходу вузлів;
  2. Зчитування даних і атрибутів в вузлі;
  3. Висновок інформації. Якщо є необхідність, на цьому етапі може відбуватися запис в змінні або відразу в потрібні таблиці;
  4. Завершення роботи механізму.
& НаСервере Процедура ЧітатьНаСервере (ПутьКФайлу) // оголошення механізмів МеханізмЧтенія = Новий ЧтеніеXML; МеханізмЧтенія.ОткритьФайл (ПутьКФайлу); Будівник = Новий ПостроітельDOM; Документ = Построітель.Прочітать (МеханізмЧтенія); // цикл для обходу вузлів Для кожного елемента З Документ.ЕлементДокумента.ДочерніеУзли Цикл // зчитування даних Якщо елемента.ІмяУзла = "Товар" Тоді товар = елемента; Для кожного значення З товар.ДочерніеУзли Цикл Якщо значенія.ІмяУзла = "Найменування" тоді Найменування = значення; Колір = Наіменованіе.Атрібути.ПолучітьІменованнийЕлемент ( "Колір"); ІначеЕслі значенія.ІмяУзла = "Ціна" тоді Вартість = значення; Валюта = Стоімость.Атрібути.ПолучітьІменованнийЕлемент ( "Валюта"); КонецЕсли; КонецЦікла; // виведення повідомлень Повідомити ( "Найменування:" + Наіменованіе.ТекстовоеСодержімое + "; колір:" + Цвет.Значеніе + "; Ціна:" + Стоімость.ТекстовоеСодержімое + "; Валюта:" + Валюта.Значеніе); КонецЕсли; КонецЦікла; // закриття механізму НеханізмЧтенія.Закрить (); КонецПроцедури

Як результат ми виводимо користувачеві повідомлення з імпортованими даними. Також ви можете помістити всі дані в потрібну структуру і на її підставі запрограмувати створення документа або записів в довіднику. Швидкість роботи 1С з xml досить велика, тому все частіше саме цей формат використовується при обміні даними з іншими джерелами.

Для вивантаження інформації нам також знадобиться взаємодія з файлами формату XML. Розглянемо приклад записи за допомогою об'єкта платформи 1С ЗапісьXML і вивантажимо дані по номенклатурі. Головними його перевагами є простота коду і швидкість обробки даних. Серверний алгоритм запису файлу XML можна представити у вигляді декількох послідовних кроків:

  1. Підключаємося до файлу xml;
  2. Створюємо головні елементи і в них записуємо дані. Якщо ви хочете вивантажити в XML файл великий обсяг інформації, то на цьому етапі у вас будуть використовуватися цикли. Будьте обережні і не забувайте, що запит даних потрібно робити до циклу, а не в ньому;
  3. Закриваємо файл.
// відкриваємо файл Nomenclatura.xml і записуємо головний елемент ЗапісьВФайл = Новий ЗапісьХML (); ЗапісьВФайл.ОткритьФайл ( "D: \ Nomenclatura.xml", "UTF-8"); ЗапісьВФайл.3апісатьНачалоЕлемента ( "Товари"); // вибираємо дані для запису ВиборкаІзСправочніка = Справочнікі.Номенклатура.Вибрать (); // цикл, в якому відбувається запис Поки ВиборкаІзСправочніка.Следующій () цикл // запис нових даних ЗапісьВФайл.ЗапісатьНачалоЕлемента ( "Товар"); ЗапісьВФайл.ЗапісатьАтрібут ( "Найменування", ВиборкаІзСправочніка.Наіменованіе); ЗапісьВФайл.ЗапісатьАтрібут ( "НачальнаяЦена", Рядок (ВиборкаІзСправочніка.НачальнаяЦена)); ЗапісьВФайл.ЗапісатьКонецЕлемента (); КонецЦікла; // Закриваємо головний елемент і файл ЗапісьВФайл.ЗапісатьКонецЕлемента (); ЗапісьВФайл.Закрить ();

Механізм 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:

1

Перемикається на вкладку (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.

Таблиця 11.1. Приклади складання XSD-схем
Вміст XML-документа Вміст XSD-схеми

1

опис
У документі XMLEasy.xml елемент TOUR - кореневий елемент, що містить дочірній елемент IDTOUR. Загальна схемадля кореневого елемента має наступний вигляд:

Вміст елемента ...

Дочірні елементи описуються так:

Вміст XML-документа Вміст XSD-схеми

1 Кіпр 25 000,00 р. У вартість двох дорослих путівок входить ціна однієї дитячої (до 7 років) 2 Греція 32 000,00 р. У серпні та вересні діють спеціальні знижки 3 Таїланд 30 000,00 р. Чи не включаючи вартість авіаквитка 4 Італія 26 000,00 р. Сніданок в готелі включений у вартість путівки 5 Франція 27 000,00 р. Додаткові екскурсії не входять у вартість путівки

опис
Кореневий елемент TABLE містить елемент TOUR, що складається, в свою чергу, з групи дочірніх елементів. Елемент choice визначає вибір інших елементів, причому значення "unbounded" (необмежено) атрибута maxOccurs вказує на можливість необмеженого наявності груп TOUR.

: :

Вміст XML-документа Вміст XSD-схеми

1 Кіпр 25 000,00 р. 1 У вартість двох дорослих путівок входить ціна однієї дитячої (до 7 років)


Мал. 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 наводиться опис основних елементів і атрибутів, які при цьому можна зустріти.

Таблиця 11.2. Елементи XSD-схем
елемент опис
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 Елемент або атрибут, який повинен мати унікальне значення
Таблиця 11.3. Атрибути - обмеження XSD-схем
Атрибут опис
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-документі