Компьютеры Windows Интернет

XML Schema (XML схема) — описание структуры XML-документов. Создаём XML-файл Пример простой схемы XML

Порой понимание XML файла, отправляемого в кадастровую палату просто необходимо, когда чувствуешь, что надо, где то, что то исправить, да и природное любопытство у многих развито. Но… Важно . Помните, что после подписания файла ЭЦП, редактировать XML файл нельзя! Как пример из практике, при разделе участка на 300 ЗУ, девушка случайно стерла у одного из участков в адресе всего одну строчку. И все.. XML файл не проходил проверку. Искать в программе листая все записи показалось мне утомительным, тем более я знал что искать. Открыв XLM файл в тестовом редакторе поиском я нашел нужную строку и внес изменения. Но опять же повторюсь – если Вы отредактировали файл то его нужно снова переподписать ЭЦП. Итак, приступим. Я буду представлять рисунки и делать описание к ним.

И еще одно отступление, для редактирования и удобного просмотра XML файлов я рекомендую использовать программу . Она позволит Вам увидеть структуру файла и удобно раскрасит его по значениям. Для примера я возьму электрический полотенцесушитель для ванной , ну конечно же не его -), а файл XML образование 2 ЗУ путем выдела в счет доли в праве общей собственности на ЗУ с кадастровым номером….
Для примера, я сначала приведу рисунок свернутого XML файла с одним свернутым блоком.

Итак, судя по счетчику строк, расположенного слева, мы имеем файл в 336 строк. Как видно из рисунка блок Свернут, значок плюс справа. Поэтому я опишу сначала построчно то, что видно из данного рисунка, а потом разберем блоки входящие в блок Так как он самый объемный.

Мы не будем рассматривать весь файл построчно, а рассмотрим лишь те строки в которые вносятся наши данные.

3 строка : CodeType=”014″ – вид работ, их всего два как в нашем случае – образование и “015” – уточнение. Version=”03″ – версия XML файла. GUID (Globally Unique Identifier) - статистически уникальный 128-битный идентификатор, в нашем случае наименование файла должно совпадать с этим индикатором.
4 строка : Данные организации в которой работает кадастровый инженер, или данные самого кадастрового инженера.
5 строка : Код организации получателя, в данном случае Управление Федеральной службы государственной регистрации, кадастра и картографии по Республике Татарстан.

Теперь сразу опустимся в конец файла, исходя из представленного рисунка и рассмотрим блок . В этом блоке вносятся сведения о кадастровом инженере выполнившим работы. Дальше идет блок куда вписывается система координат. Кстати " в текстовых значениях файла, обозначают кавычки.

В принципе открывая файл в Notepad++ становится понятна вся структура XML файла. – Расположение – содержит в себе адрес. Значение в пишется когда части адреса нет к КЛАДР.

Пример XML файла карты плана сформированного в программном продукте Полигон Карта план

Для наиболее наглядного просмотра этого фрагмента скопируйте его и просмотрите в тестовом редакторе Notepad++, который Вы можете скачать из раздела

Принимая средства за цель, люди разочаровываются и себе и других, в силу чего из всей их деятельности ничего не выходит, или выходит обратное тому, к чему они стремились. И. Гёте

XML-формат предназначен для хранения данных, которые могут пригодиться в работе некоторых программ, сайтов и поддержки определённых языков разметки. Создать и открыть файл с таким форматом не сложно. Это вполне можно сделать, даже если на компьютере не установлено какое-либо специализированное программное обеспечение.

Сам по себе XML — это язык разметки, чем-то похожий на HTML, который используется на веб-страницах. Но если последний применяется только для вывода информации и её правильной разметки, то XML позволяет её структурировать определённым образом, что делает этот язык чем-то похожим на аналог базы данных, который не требует наличия СУБД.

Создавать XML-файлы можно как при помощи специализированных программ, так и встроенным в Windows текстовым редактором. От вида используемого ПО зависит удобство написания кода и уровень его функциональности.

Способ 1: Visual Studio

Вместо этого редактора кода от Microsoft можно использовать любой его аналог от других разработчиков. По факту Visual Studio является более расширенной версией обычного «Блокнота» . Код теперь имеет специальную подсветку, ошибки выделяются или исправляются автоматически, также в программу уже загружены специальные шаблоны, которые позволяют упростить создание XML-файлов больших объёмов.

Для начала работы вам нужно создать файл. Нажмите по пункту «Файл» в верхней панели и из выпадающего меню выберите «Создать…» . Откроется список, где указывается пункт «Файл» .

  • Вас перебросит в окно с выбором расширения файла, соответственно выбирайте пункт «XML-файл» .
  • В только что созданном файле уже будет первая строка с кодировкой и версией. По умолчанию прописана первая версия и кодировка UTF-8 , которые вы можете поменять в любое время. Дальше для создания полноценного XML-файла вам нужно прописать всё то, что было в предыдущей инструкции.

    По завершении работы снова выберите в верхней панели «Файл» , а там из выпадающего меню пункт «Сохранить всё» .

    Способ 2: Microsoft Excel

    Можно создать XML-файл и не прописывая код, например, при помощи современных версий Microsoft Excel , который позволяет сохранять таблицы с данным расширением. Однако нужно понимать, что в этом случае создать что-то более функциональное обычной таблицы не получится.

    Такой способ больше подойдёт тем, кто не хочет или не умеет работать с кодом. Однако в этом случае пользователь может столкнуться с определёнными проблемами при перезаписи файла в XML-формат. К сожалению, проделать операцию преобразования обычной таблицы в XML можно только на самых новых версиях MS Excel. Чтобы это сделать, используйте следующую пошаговую инструкцию:


    Способ 3: Блокнот

    Для работы с XML вполне подойдёт даже обычный «Блокнот» , однако пользователю, который не знаком с синтаксисом языка, придётся трудно, так как в нём нужно прописывать различные команды и теги. Несколько проще и значительно продуктивнее процесс будет идти в специализированных программах для редактирования кода, например, в Microsoft Visual Studio. В них есть специальная подсветка тегов и всплывающие подсказки, что значительно упрощает работу человеку, плохо знакомому с синтаксисом этого языка.

    Для этого способа не потребуется что-либо скачивать, так как в операционную систему уже встроен «Блокнот» . Давайте попробуем сделать в нём простую XML-таблицу по данной инструкции:


    Примерно так у вас должен выглядеть готовый результат:




    25
    True


    XML-компиляторы должны обработать этот код в виде таблицы с одной колонкой, где указаны данные о неком Иване Иванове.

    В «Блокноте» вполне можно сделать несложные таблицы наподобие этой, но при создании более объёмных массивов данных могут возникнуть сложности, так как в обычном «Блокноте» нет функций исправления ошибок в коде или их подсветки.

    Как видите в создании XML-файла нет ничего сложного. При желании его может создать любой пользователь, который более-менее умеет работать на компьютере. Однако для создания полноценного XML-файла рекомендуется изучить данный язык разметки, хотя бы на примитивном уровне.

    В этой главе будет показано, как писать XML схемы. Также вы узнаете, что схемы можно писать разными способами.

    XML документ

    Давайте посмотрим на следующий XML документ под названием "shiporder.xml":

    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" указывает, где именно находится схема (в данном случае она находится в той же папке, что и файл "shiporder.xml").

    Создание XML схемы

    Теперь для приведенного выше XML документа создадим XML схему.

    Создадим новый файл, который назовем "shiporder.xsd". Для создания XML схемы будем просто следовать за структурой XML документа и определять каждый встреченный элемент. Начнем со стандартной XML декларации, за которой опишем элемент xs:schema , который и определяет саму схему:

    ...

    Здесь мы используем стандартное пространство имен (xs ) и URI, ассоциированный с этим пространством имен, который имеет стандартное значение http://www.w3.org/2001/XMLSchema .

    Теперь мы должны определить элемент shiporder . У этого элемента есть атрибут, и он содержит другие элементы, поэтому мы рассматриваем его как элемент составного типа. Определения дочерних элементов элемента shiporder поместим в декларацию xs:sequence , что задает жесткую последовательность подэлементов:

    ...

    Теперь определим элемент orderperson , который будет простого типа (так как он не содержит ни атрибуты, ни другие элементы). Его тип (xs:string ) имеет префикс пространства имен, ассоциированного с XML схемой, что указывает на использование предопределенного типа данных:

    Теперь нам нужно определить : shipto и item . Начнем с определения элемента shipto :

    При помощи схем мы можем определить любого элемента. В этом нам помогут атрибуты maxOccurs и minOccurs . Атрибут maxOccurs задает максимальное число вхождений элемента, а атрибут minOccurs задает минимальное число вхождений. По умолчанию значение обоих атрибутов равно 1.

    Теперь определим элемент item . Этот элемент может использоваться неограниченное число раз внутри элемента shiporder . Определить такую особенность элемента item позволяет присваивание атрибуту maxOccurs значения "unbounded" . Это означает, что элемент item может использоваться столько раз, сколько нужно автору документа. Обратите внимание, что элемент note опционален. Определим это установив атрибут minOccurs в нулевое значение:

    Теперь мы можем декларировать атрибут элемента shiporder . Поскольку это обязательный атрибут, используем определение use="required" .

    Примечание: Атрибуты должны всегда декларироваться последними:

    Вот полный код файла схемы "shiporder.xsd":

    Разделение схемы

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

    Следующий способ компоновки схемы заключается в том, что сначала определяются все элементы и атрибуты, а затем на эти определения создаются ссылки при помощи атрибута ref .

    Ниже приводится новая компоновка файла схемы ("shiporder.xsd"):

    Использование поименованых типов

    Третий способ компоновки схемы предполагает определение классов или типов, которые позволяют повторное использование определений элементов. Это становится возможным, если дать имена элементам simpleTypes и complexTypes , а затем указать на них при помощи атрибута type .

    Третий способ компоновки файла схемы ("shiporder.xsd"):

    Элемент restriction указывает на то, что тип данных является производным от типов данных из пространства имен W3C XML Schema. Таким образом, следующий фрагмент кода означает, что значение элемента или атрибута должно быть строковым:

    Однако гораздо чаще элемент restriction используется для накладывания ограничений на элементы. Посмотрите на следующие строки из приведенной выше схемы:

    Этот фрагмент кода указывает, что значение элемента или атрибута должно быть строковым, ровно шесть символов в длину, и этими символами должны быть цифры от 0 до 9.

    Для всех примеров ниже использован стандарт языка XSL. Широко применяется также более современная модификация этого стандарта - язык XSLT , детальнее про который можно прочитать в \xml\XSLTutorial или MSDN.

    Рассмотрим простой пример XML-файла (ex01.xml). Этот и остальные примеры можно найти в папке \xml\ XSLTForBeginers на диске.



    "Заметки об XSL"

    Если мы откроем этот файл в браузере Internet Explorer, то увидим тот же самый текст, который приведен выше, вместе со всеми тегами и служебной информацией. Но нам не нужны теги и служебная информация! Мы хотим видеть только ту информацию, которая относится к делу, а при помощи тегов - управлять внешним видом этой информации. Эта задача решается легко и просто: необходимо к XML-файлу добавить шаблон преобразования - XSL-файл.

    Перепишем наш XML-файл в следующем виде (ex01-1.xml).




    "Заметки об XSL"

    И создадим XSL-файл ex01-1.xsl. Текст файла приведен ниже.






    Если мы теперь откроем файл ex01-1.xsl в браузере Internet Explorer, то мы увидим, что наша задача решена, - на экране осталась только необходимая нам информация, все теги исчезли. Результат, который вы получите на экране браузера, приведен ниже.

    "Заметки об XSL"

    Легко также увидеть, что порядок вывода строк у нас определяется только содержанием шаблона преобразования - XSL-файла. При необходимости шаблон можно легко поменять, абсолютно не меняя наш основной XML-файл.

    Перепишем XML-файл. Информационную часть изменять не будем, а шаблон укажем другой ex01-2.xml.




    "Заметки об XSL"

    Создадим XSL-файл ex01-2.xsl. Текст файла приведен ниже.






    Если мы теперь откроем файл ex01-2.xsl в браузере Internet Explorer, то результат будет другим.

    "Заметки об XSL"

    Отметим теперь момент, который является ключевым для разработчиков баз данных. Информация в XML-странице появляется, как правило, в результате запроса к базе данных. Запрос к базе данных в многопользовательской среде - это весьма дорогостоящая операция. Предположим теперь, что у нас нет XML и мы формируем стандартные статические HTML-страницы. В этом случае для решения задачи простого преобразования внешнего представления информации, например, для изменения сортировки, у нас есть два способа решения проблемы: выполнить запрос и сохранить результаты в каком-либо временном буфере на сервере или каждый раз при изменении внешнего представления выполнять новый запрос и формировать HTML-страницу заново.

    Первый способ требует трудоемкого программирования, второй способ значительно увеличивает нагрузку на сервер базы данных, производительность которого часто является узким местом системы, - пользователю всегда хочется получать результаты быстрее.

    XML и XSL - это исчерпывающее решение описанной выше проблемы. Фактически XML-страница - это и есть временный буфер для результатов запросов. Только вместо нестандартного и трудоемкого программирования мы теперь используем стандартный механизм XSL.

    Есть и еще одно соображение, которое может быть существенным для разработчиков баз данных. Большинство современных СУБД могут форматировать результаты запроса к базе данных в виде XML-файла. То есть при построении интерфейса пользователя в рамках технологии XML и XSL мы добиваемся определенной независимости от поставщика СУБД. В части организации вывода - практически полной независимости. А эта часть весьма велика в большинстве прикладных систем, ориентированных на работу с базами данных. Конечно, помимо вывода есть еще ввод и серверная обработка бизнес-логики, но здесь вам придется искать какие-то иные решения.

    Первые шаги

    Разберем теперь более подробно первый пример. Напомним его текст.



    "Заметки об XSL"

    Первая строка информирует браузер о том, что файл имеет формат XML. Атрибут version является обязательным. Атрибут encoding не является обязательным, но если у вас в тексте есть русские буквы, то необходимо вставить этот атрибут, в противном случае XML-файл просто не будет обрабатываться, - вы получите сообщение об ошибке.

    Следующие строки - это тело XML-файла. Оно состоит из элементов, которые в совокупности образуют древовидную структуру. Элементы идентифицируются тегами и могут быть вложены друг в друга.

    Элементы могут иметь атрибуты, значения которых тоже могут обрабатываться в соответствии с шаблоном.

    На верхнем уровне XML-файла всегда находится один элемент. То есть файл вида



    "Заметки об XSL"



    "Введение в CSP"

    не будет обрабатываться браузером. Для преобразования в корректный XML-файл нужно добавить теги элемента верхнего уровня, например




    "Заметки об XSL"



    "Введение в CSP"


    Отметим, что имена тегов чувствительны к регистру символов. Подробнее об этом можно прочесть в любой книге по XML - элементам и атрибутам в этих книгах уделяется достаточно большое внимание.

    Перейдем теперь к шаблону преобразования - к XSL-файлу. Задача XSL-файла - преобразовать дерево XML-файла в другое дерево, которое, например, будет соответствовать формату HTML и может быть изображено на экране браузера с учетом форматирования, выбора шрифтов и т. п.

    Для того, чтобы браузер выполнил необходимое преобразование, нужно в XML-файле указать ссылку на XSL-файл


    Рассмотрим теперь текст XSL-файла






    Первая строка файла содержит тег элемента xsl:stylesheet. Атрибуты элемента - номер версии и ссылка на пространство имен. Эти атрибуты элемента xsl:stylesheet являются обязательными. В нашем случае пространство имен - это все имена элементов и их атрибутов, которые могут использоваться в XSL-файле. Для XSL-файлов ссылка на пространство имен является стандартной.

    Заметим, что XSL-файл является одной из разновидностей XML-файлов. Он не содержит пользовательских данных, но формат его тот же самый. Файл содержит элемент верхнего уровня xsl:stylesheet, а далее идет дерево правил преобразования.

    В настоящем документе мы не будем подробно пояснять, что означает каждый элемент XSL-файла. Мы будем приводить различные примеры и показывать результат в каждом примере, что даст возможность самостоятельно сопоставить различные элементы XSL-файла и инициируемые этими элементами преобразования исходного XML-файла с пользовательской информацией. Заметьте также, что значение атрибута select и подобных со смыслом «выбрать» записывается на специальном языке XPath , о котором можно прочитать в кратце на диске \xml\XPathTutorial, а подробнее в MSDN.

    В дальнейшем тексты XML - и XSL-файлов мы будем приводить в черно-белом варианте. Вы всегда сможете открыть реальный файл и посмотреть все в цвете. При необходимости закомментируйте ссылку на XSL-файл. Синтаксис комментария следующий - . В текст комментария нельзя вставлять символы --.

    В первом примере мы посмотрели, как с помощью элемента xsl:value-of можно вывести в HTML-формате содержание элемента (текст, заключенный между тегами). Теперь мы посмотрим, как при помощи того же самого элемента можно вывести значение атрибута элемента.

    Рассмотрим следующий XML-файл ex02-1.xml

    В предыдущей статье про XML мы рассмотрели такой уже устаревший способ валидации XML-документов, как XML DTD. Данный способ до сих пор применяется для проверки XML-данных, но с каждым днем его все больше и больше вытесняет новая технология под названием XML Schema. В XML схемах было исправлено множество недоработок, которые были в XML DTD, поэтому на данный момент все передовые разработчики для валидации документов применяют только XML схемы.

    Чтобы оценить преимущество XML схем (XML Schema) перед DTD, давайте более подробно рассмотрим основные недостатки DTD, которые с успехом были исправлены в XML схемах. О них я уже упоминал в статье « », но для лучшего понимания давайте повторим.

    Недостатки XML DTD перед XML Schema

    1. Отличный от XML синтаксис языка. То есть, DTD не является XML. В связи с этим могут возникать разнообразные проблемы с кодировкой и верификацией XML-документов.
    2. Нет проверки типов данных. В XML DTD существует лишь один тип данных – строка. В связи с этим, например, если в числовом поле будет текст, документ все равно пройдет верификацию, так как XML DTD не может проверить тип данных.
    3. Нельзя поставить в соответствие одному XML-документу больше одного DTD описания. То есть, верифицировать документ можно лишь одним DTD описанием. Если их несколько, то придется переделывать описания и совмещать все в одном файле, что очень неудобно.

    Это были основные недостатки XML DTD, которые с успехом исправлены в промышленном стандарте описания XML-документов XML Schema.

    XML Schema – промышленный стандарт описания XML-документов

    Если быть кратким, то XML Schema делает следующее:

    1. Описывает названия элементов и атрибутов (словарь).
    2. Описывает взаимосвязь между элементами и атрибутами, а также их структуру (модель содержания).
    3. Описывает типы данных.

    Также хочу заметить, что на данный момент при помощи схем можно описывать практически все. То есть, схема – это универсальный способ описания грамматики данных, который может применяться не только для верификации XML-документов, но и описания баз данных и т.д. Таким образом, область применения схем на данный момент очень широкая.

    Пример XML Schema для валидации XML-документа

    Как показывает практика, материал намного лучше усваивается, если сразу начинать изучение с примеров. Сразу скажу, что углубляться во все тонкости мы не будем, так как материал очень сложный, особенно если изучать его в текстовом виде.

    Пример простой схемы XML

    При помощи данной схемы можно проверить XML-документ следующего содержания.

    <книга xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "book.xsd"> <название>Основы XML <цена>300

    Итак, вернемся к нашей XML схеме. Как вы уже заметили, для создания XML схем используется уже известный нам XML. Единственное отличие здесь в том, что в XML Schema уже определены элементы, в отличие от обычного XML. В связи с этим используются пространства имен. В данном случае обязательным пространством имен будет «http://www.w3.org/2001/XMLSchema», которое будет задаваться при помощи префиксов «xs».

    Сразу хочу заметить, что можно использовать как префиксы пространств имен, так и задавать пространство имен для корневого элемента. Как таковой разницы здесь нет. Каждый сам решает, как ему поступать в данной ситуации. Скажу только, что обычно используются префиксы «xs» или «xsd».

    Ну а теперь давайте разберемся, как же расшифровать вышеприведенную схему. Как уже говорилось выше, XML Schema это описание словаря и типов данных. Отталкиваясь от этого, произведем расшифровку каждого элемента.

    • — объявляем элемент «книга» с типом «Книга».
    • — объявляем комплексный тип с именем «Книга» (xs:complexType – может содержать в себе вложенные элементы).
    • — объявление вложенности. То есть, тип будет содержать вложенные элементы.
    • — объявляем элемент с именем «название» (стандартного типа «строка» — xs:string).
    • — объявляем элемент с именем «цена» (стандартного типа «число» — xs:decimal).

    Как видите, ничего сверхсложного здесь нет. Если вдуматься, то все очень просто.

    Основные элементы XML Schema

    Если быть кратким, то XML схему можно описать следующим образом.

    Ваша схема

    Как видно с примера, каждая XML схема состоит с корневого элемента «schema» и обязательного пространства имен «http://www.w3.org/2001/XMLSchema». Далее идет описание схемы и собственно сама схема. При этом очень часто в очень качественных схемах описание бывает куда большим, чем сама XML Schema.

    Описание элементов в XML Schema

    В начале статьи мы уже рассмотрели пример простейшей XML схемы. В ней мы отдельно описывали элементы и типы. При этом сразу хочу заметить, что последовательность здесь не играет роли. Схема будет работать в любом случае.

    Теперь давайте рассмотрим второй способ написания XML Schema, который основывается на том, чтобы описывать тип сразу внутри элемента. Данный способ подойдет в том случае, если вы не планируете использовать одно и то же описание для разных элементов. Для наглядности рассмотрим пример.

    Как видно с примера, элемент объявляется при помощи специальной конструкции «element» с использованием соответствующего префикса. В данном случае мы определяем элемент с названием «root» без указания типа (type), так как он будет описан внутри элемента. То есть, есть два способа описания элементов.

    1 способ

    Описание типа

    2 способ

    Описание типа элемента

    Вы можете использовать как первый способ, так и второй. Все они работают одинаково. Вопрос лишь в удобстве в данном конкретном случае.

    Далее после объявления элемента мы указываем, что он комплексного типа () и перечисляем () вложенные элементы. В данном случае это элементы name и age с типами «xs:string» и «xs:integer». Префикс xs означает, что это базовый тип, который уже описан в стандарте XML Schema.

    Как видите, пока все довольно просто. Опять же, углубляться во все подробности мы не будем, так как данная статья предназначена для ознакомления с XML Schema, а не ее детальным изучением.

    Как ставится в соответствие XML Schema и документ

    Особенностью XML Schema является то, что она описывает не сам документ, а пространство имен. В связи с этим чаще всего никаких упоминаний о ней в документе нет. Обработчик сам ставит в соответствие нужную вам схему без использования каких-либо инструкций в XML-документе.

    На случай, если обработчик не знает где лежит схема, мы можем указать, где ее искать. Делается это при помощи специального атрибута «schemaLocation». Поскольку этот атрибут принадлежит другому пространству имен, то перед началом использования атрибута пространство тоже нужно указать. Для наглядности рассмотрим пример.

    XML Schema

    XML-документ

    Теперь давайте подробно разберем каждую строчку.

    • targetNamespace=»http://www.site.com» – указываем для какого пространства имен эта XML Schema.
    • xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» – подключаем пространство имен в котором описан атрибут «schemaLocation».
    • xsi:schemaLocation=»http://www.site.com/product.xsd» – указываем, где можно найти схему на случай, если парсер не знает где она лежит. Если XML-документ не принадлежит никакому пространству имен, а следовательно и в схеме нет на него указания, то атрибут «schemaLocation» заменяется на «noNamespaceSchemaLocation» (указание на схему без определения пространств имен).

    На этом все. Удачи вам и успехов в изучении XML!