Xsd списък с възможни стойности. XSD шаблони за проектиране. Поставяне и управление на схеми

1. Създайте XML Shema документ, съдържащ вградени типове данни по произволна тема

Покажете документа в браузъра

Лабораторна работа №2

Дефиниране на прости типове данни и пространства от имена

Цел на работата:

Разгледайте прости типове данни и пространства от имена на XMLShema

Напредък на работата:

В XML схемите можете да използвате вградени типове, за да дефинирате нови прости типове елементи по три начина. Те са въведени като стесняване(ограничение) от вграден или предварително дефиниран прост тип, списък(списък) или асоциация(съюз) на прости типове. Простият тип се дефинира от компонент на схемата simpieType, който има формата

Определение на типа

Стесняване

Стесняването на простия тип се дефинира от ограничителен компонент, в който базовият атрибут определя простия тип, който трябва да бъде стеснен, а съдържанието определя ограничения, които подчертават дефинирания прост тип. Например пощенският код може да се дефинира като шест арабски цифри, както следва

Друг начин за дефиниране на простия тип zip е като положително цяло число, вариращо от 100 000 до 999999:

  • списък

Тип прост списък е тип елемент, в тялото на който няколко стойности от един и същи прост тип са написани разделени с интервали. Например XML документ може да съдържа следния елемент, съдържащ списък от цели числа:

21 34 55 4 6

Списъкът се дефинира от компонент на списък, в който атрибутът itemType указва типа на елементите на дефинирания списък. Типът на списъчните елементи също може да се определи в съдържанието на списъчния елемент. Например показаните по-горе дни на елементите на XML документ могат да бъдат дефинирани в схема като тази:

и задайте типа listofinteger, използван в неговата дефиниция като списък

от най-много пет цели числа, както следва:

· Асоциация

Един прост тип обединение се дефинира от компонент на обединение, в който атрибутът memberTypes може да се използва за указване на имената на типовете обединение. Например:

Друг начин е да напишете дефиниции на простите типове, включени в обединението, в съдържанието на компонента обединение. Например:

е ограничение, което може да се използва за стесняване на набора от възможни стойности за почти всеки прост тип.

Пространства от имена на език XSD

Имената на елементите и атрибутите, използвани при писане на схеми, са дефинирани в пространството от имена с идентификатора http://www.w3.org/2001/XMLSchema. Префиксът на имената, отнасящи се до това пространство, често се нарича xs или xsd.

Можете да направите това пространство от имена по подразбиране, но тогава трябва да посочите пространството от имена за типовете и елементите, дефинирани в схемата. За удобство на такова определение понятието целево пространство от имена(целово пространство от имена). Идентификаторът на целевото пространство от имена се определя от атрибута targettiamespace, например:

Трябва да се отбележи, че само глобални имена, чиито описания са директно вложени в основния елемент на схемата.

Друго стандартно пространство от имена често се използва в XML схеми и документи. Препоръката за език XSD дефинира няколко атрибута:

тип, нула, schemaLocation, noNamespaceSchemaLocation, които се прилагат

не само в диаграмите, но и директно в описаните от тези схеми до

XML документи, наречени екземпляри на вериги(Екземпляр на XML схема). Тези атрибути се отнасят до пространството от имена http://www.w3.org/2001/XMLSchema-instance. На това пространство от имена най-често се дава префиксът xsi, например:

xmins:xsi="http://www.w3.org/2001/XMLSchema-instance">

Създайте XMLShema документ с прости типове данни и пространство от имена, като направите следното:

  1. Отворете нов файл във вашия текстов редактор и въведете текста на документа XMLShema, чийто списък е представен по-долу

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  1. Използвайте командата Save на вашия текстов редактор, за да запишете документа на вашия твърд диск, като го наименувате ProstTip.xsd
  2. Отворете файла във вашия браузър и ще получите това, което е показано на фигура 3.1.

Фигура 3.1

Лабораторна работа №3

Идва ден в живота на всеки анализатор и програмист, когато научава за съществуването на шаблони за проектиране на XML схеми и животът му се променя. За мен например разбирането на красотата на дизайна започна с това знание.

Днес искам да говоря за това какви шаблони за дизайн на XSD има, предимствата и недостатъците на всеки и защо избрахме „Райската градина“ за нашите задачи.

Например, нека вземем следния XML документ като източник на данни.

100 Пол Орлов

Угрешская 2 Москва 115088

И нека да видим как можем да опишем една и съща структура на XML документ по различни начини.
Основата на разделението на шаблоните е принципът за дефиниране на глобални елементи и/или типове данни в рамките на XSD.

Матрьошка (руска кукла)


Същността на шаблона е, че схемата е огледало на XML документа, който описва: ако сложните елементи съдържат други сложни елементи, а те от своя страна съдържат прости, тогава в XSD описанията на такива елементи ще бъдат вложени в един друг. Името на шаблона е дадено в чест на нашата световноизвестна матрьошка, по аналогия с това как дъщерните елементи в шаблона се капсулират в родителските.

Диаграмата, описваща структурата на нашия изходен файл, използвайки шаблона Matryoshka, изглежда така:


Характеристики на шаблона:

  • Непрозрачност на съдържанието.Съдържанието на XSD е непрозрачно за други схеми и дори за други части на същата схема. В резултат на това нито един от типовете или елементите в XSD не може да се използва повторно.
  • Скрити зони.Областите на схемата, в които са дефинирани локални елементи ("Град" и "Пощенски код" в примера), са локализирани в рамките на основния елемент ("Адрес"). В резултат на това, ако зададете elementFormDefault = “unqualified” в схемата, тогава локалните пространства от имена на елементи (“City” и “Zip”) са скрити в схемата.
  • Независимост.С този дизайн всеки компонент на веригата е автономен (т.е. не е свързан помежду си с други компоненти). Следователно промените в отделните компоненти ще имат ограничено въздействие. Например, ако добавите елемента „FlatNumber“ към адреса, това няма да повлияе по никакъв начин на други елементи на веригата.
  • Компактност.Благодарение на този дизайн всички значими данни се комбинират във веригата в автономни компоненти, т.е. Компонентите са компактни.

Филийка салам


Същността на шаблона е, че описаният XML документ е разделен на съставни елементи, всеки от които е описан в XSD като глобален. След това описаните елементи се комбинират заедно.

Диаграмата, описваща структурата на изходния файл с помощта на шаблона Salami, изглежда така:


Характеристики на шаблона:

  • Прозрачност на съдържанието.Всички елементи могат да виждат други схеми, както и други компоненти на този XSD.
  • Глобалност.Тъй като всички елементи на схемата се декларират глобално, независимо от стойността на elementFormDefault на пространството от имена на схемата, целият набор от атрибути ще бъде показан в XML документа (някои може да са празни).
  • взаимозависимост.С този дизайн сложните елементи се отнасят до други части на веригата, т.е. те зависят от тях. Следователно промените в отделните компоненти могат да доведат до значителни промени в цялата верига.
  • Компактност.

Венециански щори


Същността на шаблона е, че описаният XML документ е разделен на съставни типове, всеки от които е описан в XSD като глобален. След това се декларира коренов елемент, съответстващ на глобалния тип, който свързва схемата заедно.

Диаграма, описваща структурата на изходния файл с помощта на шаблона за венециански щори, изглежда така:


Характеристики на шаблона:

  • Прозрачност на съдържанието.Типовете данни са видими от други схеми и са видими и за компонентите на този XSD.
  • Максимално скриване на името.Декларациите на елементи са локални, така че шаблонът има максимален потенциал за скриване на имена.
  • Лесно контролирайте скриването на празни атрибути.Ако пространствата от имена са скрити, тогава дали да се показват или не празни атрибути в документите се контролира от един ключ elementFormDefault.
  • взаимозависимост.С този дизайн сложните типове данни препращат към други части на схемата, тоест зависят от тях. Следователно промените в отделните компоненти могат да доведат до значителни промени в цялата верига.
  • Компактност.Благодарение на този дизайн всички значими данни се комбинират във веригата в автономни компоненти, т.е. компонентите са компактни.

Райската градина


Страхотното в Райската градина е, че дефинира всеки елемент и съставен тип данни като глобални. Това ви позволява да препращате към всеки тип или елемент в рамките на един XSD или от всеки друг XSD и дори от WSDL. Това е единственият начин за пълен контрол върху семантиката на двата типа и елемента.

Диаграма, описваща структурата на изходния файл с помощта на шаблона Garden of Eden, изглежда така:


Характеристики на шаблона:

  • Максимална прозрачност на съдържанието.И двата типа и елементите на данни са видими от други схеми и са видими и за компонентите на този XSD.
  • Максимално разкриване на име.Нищо не е дефинирано локално, така че видимостта на имената е максимална.
  • взаимозависимост.С този дизайн сложните типове данни и елементи препращат към други части на схемата, тоест зависят от тях. Следователно промените в отделните компоненти могат да доведат до значителни промени в цялата верига.
  • Обемни.Свързаните по смисъл данни са „размазани“ от определението за тип и елемент. По-трудно е да се „чете“ такава диаграма.

Изберете шаблон

Когато избирате шаблон, е важно да вземете предвид няколко критерия:
  1. До каква степен е възможно повторно използване на компонентите на веригата;
  2. Колко лесно е да работите с веригата;
  3. До каква степен компонентите на веригата трябва да бъдат взаимозависими или независими?

Често, когато избирате модел на проектиране, трябва да балансирате възможността за повторно използване на компонентите на веригата и дълбочината на взаимосвързаността между компонентите. Фигурата показва потенциала на всеки от шаблоните в контекста на тези два аспекта.

Тези дизайни, които поддържат повторната употреба на компонентите добре, от друга страна, имат силни взаимовръзки между компонентите. Ако е необходимо да се промени нещо в такава схема, разработчикът на схемата може да се изправи пред факта, че много свързани елементи и/или типове ще трябва да бъдат променени. Такива схеми впоследствие са трудни за управление.

Като цяло могат да се изведат следните правила за избор на шаблон:

  • ако повторното използване на компонентите на схемата не е необходимо, ако лекотата на използване на XSD от разработчиците е по-важна и няма стриктна необходимост да се контролират имената на компонентите, тогава трябва да изберете „Matryoshka“;
  • ако повторното използване на компоненти е по-важно от удобството за разработчиците и имената на елементите от данни трябва да се контролират в цялата система, тогава трябва да се избере Salami;
  • ако в допълнение към предходната точка е важно да контролирате имената на типовете данни и да можете да използвате повторно типовете данни, трябва да изберете „Garden of Eden“;
  • „Венецианските щори“ са подходящи, ако както повторното използване на компоненти, така и свободата да се определят техните локални имена (или способността да се скрият в рамките на веригата) са важни.

Най-важното за нас в проекта беше повторното използване на типове и елементи на схема и, второ, пълен семантичен контрол на имената. Изборът на шаблон беше очевиден - Райската градина.

Малко лирично отклонение. Най-интересното приложение на шаблони за проектиране на XML схема, което си спомням, беше и все още е хипнозата на публиката. Един от нашите наградени анализатори обича да поема инициативата, като говори по тази тема. Измерих времето, след 5 минути очите на слушателите се замъглиха и те се оттеглиха някъде навътре в себе си. В "Райската градина" съзнанието на мнозинството е изключено.

И в заключение бих искал да добавя, че са възможни и смеси от шаблони, срещали сме се с тях.

Източници и ресурси.

Ограниченията се използват за определяне на приемливи стойности за XML елементи или атрибути. Ограниченията върху XML елементите се наричат ​​също "фасети".

Стойностни ограничения

възраст" с ограничение. Този елемент трябва да показва възрастта на човек, а възрастта на човек, както е известно, не може да бъде по-малка от 0 и повече от 120:

Ограничение на набора от стойности

За да ограничите съдържанието на XML елемент до определен набор от приемливи стойности, трябва да използвате разделителя за изброяване.

Следващият пример дефинира елемента " автомобил" с ограничение. Единствените му приемливи стойности са Audi, Golf, BMW:

Горният пример може да бъде написан и по следния начин:

В този случай типът " carType" може да се използва от други елементи, тъй като не е част от елемента " автомобил".

Ограничения за серията стойности

За да ограничите съдържанието на XML елемент до поредица от цифри или букви, трябва да използвате разделителя на шаблона.

Следващият пример дефинира елемента " писмо" с ограничение. Единствената му валидна стойност може да бъде ЕДНА МАЛКА буква в диапазона от "a" до "z":

Следващият пример дефинира елемент "initials" с ограничение. Единствената му валидна стойност може да бъде ТРИ ГЛАВНИ букви в диапазона от "a" до "z":

инициали" с ограничение. Единствената му валидна стойност може да бъде ТРИ МАЛКИ ИЛИ ГЛАВНИ букви в диапазона от "a" до "z":

Следващият пример дефинира елемента " избор" с ограничение. Единствената му валидна стойност може да бъде ЕДНА от трите букви: x, y ИЛИ z:

Следващият пример дефинира елемента " прод" с ограничение. Единствената му валидна стойност може да бъде ПЕТ последователни цифри и всяка цифра трябва да бъде в диапазона от 0 до 9:

Други ограничения върху серията от стойности

Следващият пример дефинира елемента " писмо" с ограничението. Неговата валидна стойност е нула или повече малки букви в диапазона от a до z:

Следващият пример също дефинира елемента " писмо" с ограничението. Неговата приемлива стойност би била една или повече двойки букви, като всяка двойка съдържа малка буква, последвана от главна буква. Например "sToP" ще съответства на дадения модел, а "Стоп" или "СТОП " или "стоп" не:

Следващият пример дефинира елемента " пол" с ограничение. Неговата приемлива стойност ще бъде само низът " мъжки "ИЛИ" женски ":

Следващият пример дефинира елемента " парола" с ограничението. Стойността му трябва да бъде низ от 8 знака, като тези знаци могат да бъдат малки или главни букви от a до z или числа от 0 до 9:

Ограничения за интервали

За да се определи как ще се третират празните знаци, се използва разделител бяло пространство.

Следващият пример дефинира елемента " адрес whiteSpace е настроен на " запазвам ", което казва на XML анализатора да НЕ премахва никакви празни знаци:

Следващият пример също дефинира елемента " адрес"с ограничение. Ограничител бяло пространствонастроен на " замени ", който казва на XML анализатора да ЗАМЕНИ всички празни знаци (табулация, интервал, преместване на ред и връщане на каретка) с интервали:

Следващият пример също дефинира елемента " адрес"с ограничение. Ограничител бяло пространствонастроен на " колапс ", който казва на XML анализатора да ПРЕМАХНЕ всички знаци за празни интервали (знаците за табулация, интервал, подаване на ред, връщане на каретка и завършващи знаци за интервал се премахват и множество интервали се заменят с един знак за интервал):

Ограничения на дължината

За да ограничите дължината на стойността на даден елемент, трябва да използвате разделители дължина, maxLengthИ minLength.

Следващият пример дефинира елемента " парола" с ограничение. Дължината на стойността му трябва да бъде точно 8 знака:

Следващият пример дефинира друг елемент " парола" с ограничение. Дължината на стойността му трябва да бъде минимум 5 и максимум 8 знака:

Ограничения за тип данни

ОграничителОписание
изброяванеОпределя списък с приемливи стойности
фракцияЦифриОпределя максималния брой знаци след десетичната запетая. Трябва да е равно на или по-голямо от нула
дължинаУказва точния брой знаци или списъчни обекти. Трябва да е равно на или по-голямо от нула
maxExclusiveУказва горна граница за числови стойности (стойността трябва да е по-малка от стойността, посочена тук)
maxInclusiveУказва горна граница за числови стойности (стойността трябва да е по-малка или равна на стойността, посочена тук)
maxLengthУказва максималния брой знаци или списъчни обекти. Трябва да е равно на или по-голямо от нула
minExclusiveОпределя долната граница за числови стойности (стойността трябва да е по-голяма от посочената тук)
minInclusiveУказва долна граница за числови стойности (стойността трябва да е по-голяма или равна на стойността, посочена тук)
minLengthУказва минималния брой знаци или списъчни обекти. Трябва да е равно на или по-голямо от нула
моделОпределя точната последователност от допустими знаци
totalDigitsОпределя точния брой валидни цифри. Трябва да е по-голямо от нула
бяло пространствоОпределя как се обработват празните знаци

XSDе език за описание на структурата на XML документ. Нарича се още XML схема. Когато използва XML схема, XML анализаторът може да провери не само правилността на синтаксиса на XML документа, но и неговата структура, модел на съдържание и типове данни.

Този подход позволява на обектно-ориентираните езици за програмиране лесно да създават обекти в паметта, което несъмнено е по-удобно от анализирането на XML като обикновен текстов файл.

В допълнение, XSD е разширяем и ви позволява да свързвате готови речници, за да описвате типични задачи, например уеб услуги като SOAP.

Също така си струва да се спомене, че XSD има вградени инструменти за документиране, които ви позволяват да създавате самостоятелни документи, които не изискват допълнително описание.

Нека разгледаме като пример XSD документ, описващ част от структурата на акаунта в Habré.

Не включих в статията текста на XSD схемата и XML документа, съответстващ на тази схема, поради техния размер.

Първият ред на диаграмата показва, че документът е XML документи използва UTF-8 кодиране.


Следващият ред започва описанието на основния елемент на документа - habra_user.
< xs:element name ="habra_user" >
Редове, документиращи елемента:
< xs:annotation >
< xs:documentation >Основният елемент на схемата. Описва потребител на habr

Етикет описва "сложен" тип данни потребителско_име. При желание може да се изведе като отделен тип данни, по аналогия с контакт_информация. За да направите това, имате нужда от блок преместете се в и посочете атрибута имеи задайте атрибута на елемента тип.

Елементи потребителско_име, first_name, фамилно_имеимат тип низ и описват потребителя, собственото и фамилното име на собственика на акаунта.

елемент рождена_датаима тип данни за дата и описва датата на раждане.

Датата на регистрация описва регистр_дата, имайки собствен тип данни customDateTime. Стойността на този етикет ще бъде зададена с помощта на атрибута стойност. Линиите показват това.

< xs:attribute name ="value" use ="required" >
В този случай атрибутът е задължителен. За да сме сигурни, че стойността отговаря на изискванията, ще опишем „проверките“:
< xs:simpleType >
< xs:restriction base ="xs:string" >
< xs:length value ="19" />
< xs:pattern value ="-- ::" />


В този случай дължината на реда винаги ще бъде 19, това се определя от тага и самата стойност ще съответства на модела, посочен в маркера .

Елементи контакт_информацияИ блог- масиви, това се указва от атрибута maxOccurs="необвързан".

Етикет указва, че вложеният елемент ще бъде един от елементите на ICQ или linkedin.

Етикет показва, че ще бъдат вложени елементи име на блогИ blog_urlточно в този ред. Ако последователността не е важна, тогава трябва да използвате етикета .

WiFi