Інтернет Windows Android

1с ніж створити xsd схему. Збірний об'єкт DataSet

Помилка, що повідомляє про те, що файл не відповідає XSD-схемою, є спільною для випадків, коли система не може вважати дані зі звіту. В цілому, такі помилки у людей виникають нерідко, а впоратися з ними досить нескладно.

Для початку потрібно розібратися в тому, що значить XSD-схема, щоб зрозуміти, чому саме ваш файл не відповідає.

Отже, XSD - це мова програмування, з його допомогою описується структура вашого звіту. У структуру входять, наприклад, параметри змісту звіту, тип, вид, а також синтаксис даних, розділи, які містять інформацію.

Виходить, що XSD-схема- це опис структури вашого звіту, Виконане на одній з мов програмування. Якщо в звіт буде внесена невірна інформація, то для схеми вона буде просто нечитаності, саме тому система видає помилку про те, що файл не відповідає XSD-схемі.

Це говорить про те, що інформація, яку ви ввели, не може бути прочитана на мові програмування, отже, програма визнає її невірною.

Варто відзначити, що дана проблема може виникнути як через невірно введених даних (Наприклад, ви помилилися, коли вводили ІПН організації), так і з-за невірного формату введення даних (наприклад, ви вказали зайві прогалини або дефіси).

Однак це не єдина причина, яка викликає невідповідність файлу XSD-схемі. Дана помилка також може виникати через те, що на вашому пристрої встановлена \u200b\u200bзастаріла версія програми, в якому ви робите звіт, а також, якщо в самому податковому органі не встановлено оновлення програми.

Для того щоб вирішити помилку в XSD-схемою, вам необхідно буде перевірити правильність всіх даних, які ви ввели, а також уточнити, чи не виходило чи оновлення програми, в якій ви працюєте. Однак, перш, ніж перевіряти файл, уважно подивіться на текст помилки, яку вам видає.

Справа в тому, що в деяких ситуаціях після тексту про те, що файл не відповідає схемі, варто двокрапка і далі вказується причина даної проблеми. Якщо причина в самій помилково не вказана, поновіть програму до самої останньої версії.

Після завершення оновлення спробуйте знову відправити ваш звіт. Якщо після поновлення файл знову видає помилку, значить необхідно шукати проблему в ньому. Якщо ви працюєте в програмі 1С, то ви можете перевірити файл за допомогою спеціальної кнопки, Яка називається «перевірити в інтернеті».

Якщо два попередніх пункту не допомогли виявити вам проблему, то перевірте, чи всі обов'язкові поля ви заповнили, чи правильно ви ввели всі дані, адже багато хто з них необхідно заповнювати цифрами, в такому випадку дуже легко допустити помилку.

Крім цього, вам необхідно перевірити всі поля на відсутність зайвих прогалин, дефісів та інших знаків. Якщо ви перевірили весь файл і не можете знайти помилку або якщо помилку знайти вдалося, але виправити її ви ніяк не можете, то вам обов'язково варто звернутися в службу технічної підтримки програми, за допомогою якої ви робите звіт або до її розробникам.

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

Крім цього, розробники можуть вимагати від вас деяку інформацію про вашу організацію, а також інші відомості, які їм здадуться потрібними, їх ви обов'язково повинні надати, інакше вирішити проблему не вдасться.

Отже, якщо ви намагаєтеся відправити звіт до податкового органу, але файл видає помилку про те, що він не відповідає XSD-схемою, це означає, що ваш звіт не може бути відправлений, так як програма не може прочитати дані, які ви ввели.

Але піддаватися паніці не варто, адже в більшості випадків ця проблема вирішується досить просто і швидко. До того ж якщо звіт ви відправили вчасно, але він не був прийнятий через невірне формату, то податкова не має права штрафувати вас за невчасно наданий звіт. В першу чергу, зверніть увагу на сам текст помилки, можливо, там вже вказана причина її виникнення.

По-суті, причин може бути всього дві. Або у вас на пристрої встановлена стара версія програми, За допомогою якої ви робите звіт, в такому випадку вирішити проблему легко, потрібно просто завантажити саме останнє оновлення, Зазвичай його можна знайти на сайті програми, яку ви використовуєте. Другою причиною може бути те, що ви невірно заповнили якісь дані, або взагалі не заповнили якесь поле.

В такому випадку вам необхідно перевіряти ваш файл, при цьому потрібно пам'ятати про те, що програма може порахувати помилкою навіть зайвий пробіл. Якщо ви ніяк не можете знайти причину помилки, то ви можете звернутися в технічну підтримку програми, там фахівці обов'язково допоможуть вирішити вашу проблему.

анотація: 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\u003e, Проте ми будемо надалі використовувати термін "схема даних 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-схеми. Ви також дізнаєтеся, що схема може бути записана по-різному.

документа XML

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

xmlns: xsi \u003d "http://www.w3.org/2001/XMLSchema-instance"
xsi: noNamespaceSchemaLocation \u003d "shiporder.xsd"\u003e
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 \u003d "http://www.w3.org/2001/XMLSchema-instance" говорить XML-аналізатору, що цей документ повинен бути перевірений на схемі. Лінія: XSI: noNamespaceSchemaLocation \u003d "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" елемента. Оскільки це обов'язковий атрибут ми вказуємо використання \u003d "потрібно".

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: ІмяПространства \u003d "URL", наприклад:
xmlns: store \u003d "http://store.ru"

Навіщо потрібен URL?

Тому вказується якийсь унікальний ідентифікатор, що визначає заодно і автора простору імен.

Природно мається на увазі, що вказав простір імен виключно чесна людина і вказав свій сайт і не використовує з одним сайтом кілька різних просторів імен.

До речі, зазвичай вказують не тільки URL сайту, але URL конкретної папки на сайті, щоб якщо що, можна було створити інший простір імен в інший таткові на сайті для його використання в іншій ситуації.

Об'єкт - це певна структура даних, самодостатня, що містить всі свої дані.

Так як в XML описані структуровані дані, тобто у вигляді структури, що мають свої властивості і т.п., то на них можна дивитися як на об'єкти.

У наведеному прикладі це може бути об'єкт LIST з властивістю і вкладеним елементом.

DOM - це спосіб розгляду файлу XML не як текст в певному форматі, а як набір об'єктів з властивостями, полями і так далі.

Опис файлу XML

Якщо ми використовуємо файл певної структури постійно для обміну між двома програмами, ми ймовірно хотіли б:

  • Щоб були використані певні назви
  • Щоб були ті елементи, які ми очікуємо (які «повинні бути для використання в нашому обміні»)
  • Щоб в атрибутах були вказані ті типи, які ми очікуємо (рядок, число і т.п.).

Для опису структури XML існують такі стандарти форматів файлів (які також зберігаються в звичайному текстовому файлі):

  • Розширення DTD - Document Type Definition
  • Розширення XSD - XML \u200b\u200bShema.

Обидва формати описують який повинен бути документ. Процедура перевірки відповідності 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 і потім читання його полів).

Приклад сериализации значення:
Серіалізатор \u003d Новий СеріалізаторXDTO (ФабрікаXDTO);
ФайлXML \u003d Новий ЗапісьXML ();
ФайлXML.ОткритьФайл ( «имяфайла»);
Серіалізатор.ЗапісатьXML (ФайлXML, Значеніе1С);

Приклад читання / запису об'єкта:

СправочнікОб'ектXDTO \u003d ФабрікаXDTO.Создать (ФабрікаXDTO.Тіп ( "http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Склади"));
ЗаполнітьЗначеніяСвойств (СправочнікОб'ектXDTO, СправочнікСсилка1С);