1с xml виходячи з схеми xsd приклад. Короткий опис створення XML файлу за схемою XSD на прикладі створення вивантаження Статистичної звітності для ФМС. Додавання пакету XDTO

Анотація: 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-документі

Виникла задача створення XML файлу на основі XSD схеми. Пошуки по форумах призводили до великої кількості обговорень, пов'язаних з нерозумінням процесу, і всього до кількох статей, які пояснюють суть. Люди ставили питання, билися над рішенням, але після того, як завдання піддавалося їм, просто зникали, не описавши механізм. Це спонукало створення простого опису процесу.
P.S. Не лайтеся сильно, моєю метою не було створення якоїсь наукоподібної статті, яка суворо використовує правильну термінологію, а бажання просто допомогти зробити перший крок до розуміння дуже потужного механізму обміну через XML.
P.P.S. Відразу повинен обмовитися, що файл вивантаження, що додається до статті, є тільки заготовкою, що створює тільки частину необхідної структури XML файлу, т.к. моя робота з цим вивантаженням мала швидше пізнавальний характер (копіювати попередній документ з експорту на сайті ФМС і завантажувати з Excel"івського файлу тільки табличну частину Товари представилося більш ефективним рішенням), а брак часу не дозволяв дописати створення всієї структури, виходячи тільки з міркувань перфекціонізму .

Отже, зареєструвавшись на сайті ФМС, стало зрозуміло, що для створення документів Статистичної звітності з експорту потрібне вивантаження даних із документів Реалізація товарів та послуг Управління торгівлею та створення файлу для завантаження.

Там можливо два варіанти завантаження.

Перший: завантаження табличної частини з Товарами з файлу Excel (цей варіант і був обраний як робітник, тому що мав ті плюси, що не треба було возитися з обробкою "Шапки" документа, а можна було просто копіювати попередній, змінивши "Шапці" те, що потрібно).

Другий: створення XML файлу за схемою завантаженої із сайту ФМС у вигляді "Альбома форматів електронних форм документів". Альбом є досить великою кількістю XSD схем. У них було знайдено схему "Статистичної форми обліку переміщення товару" та додаткові файли з описами типів для неї. Схеми додаються до статті у архіві з обробкою.

Для перегляду XSD схем використовувався безкоштовний Microsoft XML Notepad 2007.

На зображенні показаний основний файл зі схемою XSD Статистична форма обліку переміщення товару. На зображенні виділено основні блоки XSD схеми, необхідні нам її розуміння.

Зі схеми видно, що нам треба отримати XML файл, заповнений структурою, вказаною у гілці "xs: element" типу StaticFormType.

Структура може бути досить складною (як і нашому випадку). З описами типів, присутніми безпосередньо у гілці, винесеними в окрему гілку або, що навіть знаходяться в іншому файлі.

Дана структура має тип StaticFormType, який у свою чергу складається з базового типу BaseDocType, набору об'єктів різних типів та текстових атрибутів.

Базовий тип BaseDocStyle описується в іншому файлі (і просторі імен)
.

Цей файл містить ще масу типів, які використовуються нашому випадку.

Тепер перейдемо до роботи у 1С. У двох словах, те, що нам треба зробити, зводиться до наступного:

1. Створюється Фабрика XDTO

НашаФабрикаXDTO = СтворитиФабрикуXDTO(МасивПовнихІменФайлівЗСхемамиXSD);

2. У фабриці XDTO створюються всі складні типи даних, які далі ми заповнюватимемо у створюваному файлі XML:

StaticFormType = МояФабрикаXDTO.Тип("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0", "StaticFormType");

Типи даних, що входять до певного типу, можна отримати з колекції його властивостей:

CUOrganizationType = StaticFormType.Властивості.Отримати("Consignee").Тип; NameType = CUOrganizationType.Властивості.Отримати("OrganizationName").Тип; ShortNameType = CUOrganizationType.Властивості.Отримати("ShortName").Тип; LanguageCodeType = CUOrganizationType.Властивості.Отримати("OrganizationLanguage").Тип;

3. Коли всі складні типи даних створені, створюємо на їх основі структуру файлу XML, що складається з об'єктів ФабрикиXDTO:

StaticFormType_Об'єктXDTO = МояФабрикаXDTO.Створити(StaticFormType); // колекція з документами NewDocuments = МояФабрикаXDTO.Створити(DocumentsType); NewDocuments.PrDocumentName = МояФабрикаXDTO.Створити(PrDocumentNameType, "Товарна накладна"); NewDocuments.PrDocumentNumber = МояФабрикаXDTO.Створити(PrDocumentNumberType, "123-номер"); NewDocuments.PrDocumentDate = МояФабрикаXDTO.Створити(PrDocumentDateType, "2014-10-05"); StaticFormType_Об'єктXDTO.Documents.Додати(NewDocuments);

Одночасно заповнюємо елементарні (прості типи) реквізити.

4. Ну і нарешті вивантажуємо все з Фабрики XDTO у файл:

ФайлXML = Новий записXML(); ФайлXML.ВідкритиФайл(Ім'яФайлу); ФайлXML.ЗаписатиОголошенняXML(); МояФабрикаXDTO.ЗаписатиXML(ФайлXML, StaticFormType_Об'єктXDTO); ФайлXML.Закрити();

P.S. В архіві міститься файл заготівлі вивантаження у XML (створюються лише деякі реквізити, що відображають усі випадки заповнення файлу) та схеми XSD.

Розархівувати всі файли до певної директорії.

XML буде створюватися в ній.

Формат 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-схеми. Ви також дізнаєтесь, що схема може бути записана по-різному.

Документ 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, а потім вказати на них через тип атрибута елемента.

Ось уже третій дизайн файлу схеми ("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, ДовідникПосилання1С);

Сподобалось? Лайкни нас на Facebook