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:
Перемикаємось на вкладку (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-документі |
Виникла задача створення 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С цей алгоритм виглядає так:
- Оголошення механізмів, за допомогою яких відбувається читання файлу 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-схеми. Ви також дізнаєтесь, що схема може бути записана по-різному.
Документ 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, а потім вказати на них через тип атрибута елемента.
Ось уже третій дизайн файлу схеми ("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С);