Pochopenie schémy XML. Návrhové vzory XSD Obmedzenia medzier

XSD je jazyk na popis štruktúry XML dokumentu. Nazýva sa aj schéma XML. Pri použití schémy XML môže syntaktický analyzátor XML kontrolovať nielen správnu syntax dokumentu XML, ale aj jeho štruktúru, model obsahu a typy údajov.

Tento prístup umožňuje objektovo orientovaným programovacím jazykom jednoducho vytvárať objekty v pamäti, čo je nepochybne pohodlnejšie ako analyzovať XML ako bežný textový súbor.

Okrem toho je XSD rozšíriteľný a umožňuje vám pripojiť hotové slovníky na popis typických úloh, napríklad webových služieb, ako je SOAP.

Za zmienku tiež stojí, že XSD má vstavané dokumentačné nástroje, ktoré vám umožňujú vytvárať samostatné dokumenty, ktoré nevyžadujú ďalší popis.

Uvažujme ako príklad XSD dokument popisujúci časť štruktúry účtu na Habré.

Text XSD schémy a XML dokumentu zodpovedajúceho tejto schéme som do článku neuviedol z dôvodu ich veľkosti.

Prvý riadok schémy označuje, že dokument je dokument XML a používa kódovanie UTF-8.


Ďalší riadok začína popisom hlavného prvku dokumentu - habra_user.
< xs:element name ="habra_user" >
Riadky dokumentujúce prvok:
< xs:annotation >
< xs:documentation >Hlavný prvok schémy. Popisuje používateľa habr

Tag popisuje "komplexný" dátový typ user_name. Ak je to potrebné, možno ho analogicky vyňať ako samostatný dátový typ kontaktné informácie. Na to potrebujete blok presunúť do a špecifikujte atribút názov a nastavte atribút prvku typu.

Prvky user_name, krstné meno, priezvisko majú typ reťazca a popisujú používateľa, meno a priezvisko vlastníka účtu.

Element dátum narodenia má typ údajov dátumu a popisuje dátum narodenia.

Popisuje dátum registrácie dátum_registrácie, ktorý má svoj vlastný dátový typ customDateTime. Hodnota tejto značky sa nastaví pomocou atribútu hodnotu. Čiary to naznačujú.

< xs:attribute name ="value" use ="required" >
V tomto prípade je atribút povinný. Aby sme sa uistili, že hodnota spĺňa požiadavky, popíšeme „kontroly“:
< xs:simpleType >
< xs:restriction base ="xs:string" >
< xs:length value ="19" />
< xs:pattern value ="-- ::" />


V tomto prípade bude dĺžka riadku vždy 19, čo určuje značka a samotná hodnota sa bude zhodovať so vzorom uvedeným v značke .

Prvky kontaktné informácie A blog- polia, označuje to atribút maxOccurs="unbound".

Tag určuje, že vnorený prvok bude jedným z prvkov ICQ alebo linkedin.

Tag označuje, že vnorené prvky budú názov_blogu A blog_url presne v tomto poradí. Ak poradie nie je dôležité, musíte použiť značku .

1. Vytvorte XML Shema dokument obsahujúci vstavané dátové typy na akúkoľvek tému

Zobrazte dokument v prehliadači

Laboratórna práca č.2

Definovanie jednoduchých dátových typov a menných priestorov

Cieľ práce:

Preskúmajte jednoduché dátové typy a priestory názvov XMLShema

Pokrok:

V schémach XML môžete použiť vstavané typy na definovanie nových jednoduchých typov prvkov tromi spôsobmi. Zadávajú sa ako zúženie(obmedzenie) vstavaného alebo vopred definovaného jednoduchého typu, zoznam(zoznam) príp únie(únia) jednoduchých typov. Jednoduchý typ je definovaný komponentom schémy simpieType, ktorý má tvar

Definícia typu

Zúženie

Jednoduché zúženie typu je definované komponentom obmedzenia, v ktorom základný atribút určuje jednoduchý typ, ktorý sa má zúžiť, a obsah špecifikuje obmedzenia, ktoré zvýraznia definovaný jednoduchý typ. Napríklad PSČ možno definovať ako šesť arabských číslic nasledovne

Ďalším spôsobom, ako definovať jednoduchý typ zips, je kladné celé číslo v rozsahu od 100 000 do 999999:

  • Zoznam

Typ jednoduchého zoznamu je typ prvku, v tele ktorého je zapísaných niekoľko hodnôt rovnakého jednoduchého typu oddelených medzerami. Napríklad dokument XML môže obsahovať nasledujúci prvok obsahujúci zoznam celých čísel:

21 34 55 4 6

Zoznam je definovaný komponentom zoznamu, v ktorom atribút itemType určuje typ prvkov definovaného zoznamu. Typ prvkov zoznamu možno určiť aj v obsahu prvku zoznamu. Napríklad dni prvku dokumentu XML zobrazené vyššie možno definovať v schéme, ako je táto:

a nastavte typ listofinteger použitý v jeho definícii ako zoznam

najviac päť celých čísel takto:

· Združenie

Jednoduchý typ zjednotenia je definovaný komponentom zjednotenia, v ktorom možno atribút memberTypes použiť na zadanie názvov typov zjednotení. Napríklad:

Ďalším spôsobom je zapísať definície jednoduchých typov zahrnutých v zjednotení do obsahu zjednocovacieho komponentu. Napríklad:

je obmedzenie, ktoré možno použiť na zúženie množiny možných hodnôt pre takmer akýkoľvek jednoduchý typ.

Menné priestory jazyka XSD

Názvy prvkov a atribútov používané pri písaní schém sú definované v mennom priestore s identifikátorom http://www.w3.org/2001/XMLSchema. Predpona mien odkazujúcich na tento priestor sa často nazýva xs alebo xsd.

Tento priestor názvov môžete nastaviť ako predvolený, ale potom musíte zadať priestor názvov pre typy a prvky definované v schéme. Pre pohodlie takejto definície pojem cieľový menný priestor(cieľový menný priestor). Identifikátor cieľového priestoru názvov je určený atribútom targettimespace, napríklad:

Treba poznamenať, že iba globálne mená, ktorého popisy sú priamo vnorené do koreňového prvku schémy.

V schémach a dokumentoch XML sa často používa iný štandardný priestor názvov. Odporúčanie jazyka XSD definuje niekoľko atribútov:

type, nil, schemaLocation, noNamespaceSchemaLocation, ktoré platia

nielen v diagramoch, ale aj priamo v tých, ktoré tieto schémy popisujú

XML dokumenty tzv príklady obvodov(inštancia schémy XML). Tieto atribúty odkazujú na priestor názvov http://www.w3.org/2001/XMLSchema-instance. Tento priestor názvov má najčastejšie predponu xsi, napríklad:

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

Vytvorte dokument XMLShema s jednoduchými typmi údajov a priestorom názvov takto:

  1. Otvorte nový súbor vo svojom textovom editore a zadajte text dokumentu XMLShema, ktorého zoznam je uvedený nižšie

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

  1. Pomocou príkazu Uložiť v textovom editore uložte dokument na pevný disk a pomenujte ho ProstTip.xsd
  2. Otvorte súbor vo svojom prehliadači a dostanete to, čo je znázornené na obrázku 3.1.

Obrázok 3.1

Laboratórna práca č.3

V živote každého analytika a programátora príde deň, keď sa dozvie o existencii šablón na návrh schém XML a o zmenách v jeho živote. Pre mňa sa napríklad týmto poznaním začalo pochopenie krásy dizajnu.

Dnes chcem hovoriť o tom, aké vzory XSD existujú, o výhodách a nevýhodách každého z nich a prečo sme si pre naše úlohy vybrali „Eden Garden“.

Ako zdroj údajov si vezmime napríklad nasledujúci dokument XML.

100 Paul Orlov

Ugreshskaya 2 Moskva 115088

A pozrime sa, ako môžeme opísať rovnakú štruktúru dokumentu XML rôznymi spôsobmi.
Základom rozdelenia šablón je princíp definovania globálnych prvkov a/alebo dátových typov v rámci XSD.

Matrioška (ruská bábika)


Podstatou šablóny je, že schéma je zrkadlom dokumentu XML, ktorý popisuje: ak zložité prvky obsahujú iné zložité prvky a tie zase obsahujú jednoduché prvky, potom v XSD budú popisy takýchto prvkov vnorené do navzájom. Názov šablóny bol daný na počesť našej svetoznámej matriošky, analogicky k tomu, ako sú podradené prvky v šablóne zapuzdrené do rodičovských.

Diagram popisujúci štruktúru nášho zdrojového súboru pomocou šablóny Matryoshka vyzerá takto:


Vlastnosti šablóny:

  • Nepriehľadnosť obsahu. Obsah XSD je nepriehľadný pre iné schémy a dokonca aj pre iné časti tej istej schémy. Výsledkom je, že žiadny z typov alebo prvkov v rámci XSD nemožno opätovne použiť.
  • Skryté oblasti. Oblasti schémy, v ktorých sú definované lokálne prvky (v príklade „Mesto“ a „Zip“), sú lokalizované v rámci koreňového prvku („Adresa“). Výsledkom je, že ak v schéme nastavíte elementFormDefault = „unqualified“, lokálne menné priestory prvkov („City“ a „Zip“) budú skryté v schéme.
  • Nezávislosť. Pri tomto návrhu je každý komponent obvodu autonómny (to znamená, že nie je prepojený s inými komponentmi). Preto budú mať zmeny jednotlivých komponentov obmedzený vplyv. Ak napríklad k adrese pridáte prvok „FlatNumber“, nijakým spôsobom to neovplyvní ostatné prvky obvodu.
  • Kompaktnosť. Vďaka tejto konštrukcii sa všetky zmysluplné dáta spájajú v obvode do autonómnych komponentov, t.j. Komponenty sú kompaktné.

Salámový plátok


Podstatou šablóny je, že popísaný XML dokument je rozdelený na komponentné prvky, z ktorých každý je v XSD popísaný ako globálny. Potom sa opísané prvky kombinujú.

Diagram popisujúci štruktúru zdrojového súboru pomocou šablóny Salami vyzerá takto:


Vlastnosti šablóny:

  • Transparentnosť obsahu. Všetky prvky môžu vidieť iné schémy, ako aj ďalšie komponenty tohto XSD.
  • Globálnosť. Keďže všetky prvky schémy sú deklarované globálne, bez ohľadu na hodnotu elementFormDefault menného priestoru schémy, v dokumente XML sa zobrazí celá sada atribútov (niektoré môžu byť prázdne).
  • Vzájomná závislosť. S týmto dizajnom sa zložité prvky odvolávajú na iné časti obvodu, to znamená, že na nich závisia. V dôsledku toho môžu zmeny jednotlivých komponentov viesť k rozsiahlym zmenám celého obvodu.
  • Kompaktnosť.

žalúzie


Podstatou šablóny je, že popísaný XML dokument je rozdelený na kompozitné typy, z ktorých každý je v XSD opísaný ako globálny. Potom je deklarovaný koreňový prvok zodpovedajúci globálnemu typu, ktorý spája schému.

Diagram popisujúci štruktúru zdrojového súboru pomocou šablóny Venetian Blinds vyzerá takto:


Vlastnosti šablóny:

  • Transparentnosť obsahu. Dátové typy sú viditeľné z iných schém a sú viditeľné aj pre komponenty tohto XSD.
  • Maximálne skrytie mena. Deklarácie prvkov sú lokálne, takže šablóna má maximálny potenciál na skrytie názvu.
  • Ľahko ovládajte skrytie prázdnych atribútov. Ak sú priestory názvov skryté, potom to, či sa majú v dokumentoch zobrazovať prázdne atribúty, je riadené jediným prepínačom elementFormDefault.
  • Vzájomná závislosť. Pri tomto návrhu komplexné dátové typy odkazujú na iné časti schémy, to znamená, že sú na nich závislé. V dôsledku toho môžu zmeny jednotlivých komponentov viesť k rozsiahlym zmenám celého obvodu.
  • Kompaktnosť. Vďaka tejto konštrukcii sú všetky zmysluplné dáta spojené v obvode do autonómnych komponentov, t.j. komponenty sú kompaktné.

Rajská záhrada


Na Garden of Eden je skvelé, že definuje každý prvok a zložený dátový typ ako globálny. To vám umožňuje odkazovať na akýkoľvek typ alebo prvok v rámci jedného XSD alebo z akéhokoľvek iného XSD a dokonca aj z WSDL. Len tak je možné plne ovládať sémantiku oboch typov a prvkov.

Diagram popisujúci štruktúru zdrojového súboru pomocou šablóny Garden of Eden vyzerá takto:


Vlastnosti šablóny:

  • Maximálna transparentnosť obsahu. Typy aj dátové prvky sú viditeľné z iných schém a sú viditeľné aj pre komponenty tohto XSD.
  • Maximálne zverejnenie mena. Nič nie je definované lokálne, takže viditeľnosť mien je maximálna.
  • Vzájomná závislosť. Pri tomto návrhu komplexné dátové typy a prvky odkazujú na iné časti schémy, to znamená, že sú na nich závislé. V dôsledku toho môžu zmeny jednotlivých komponentov viesť k rozsiahlym zmenám celého obvodu.
  • Objemný. Zmysluplne súvisiace údaje sú „premazané“ definíciou typu a prvku. Je ťažšie „čítať“ takýto diagram.

Vyberte šablónu

Pri výbere šablóny je dôležité zvážiť niekoľko kritérií:
  1. Do akej miery je možné opätovne použiť komponenty obvodu;
  2. Aké ľahké je pracovať s obvodom;
  3. Do akej miery by mali byť komponenty obvodu vzájomne závislé alebo nezávislé?

Často pri výbere vzoru dizajnu musíte vyvážiť schopnosť opätovného použitia komponentov obvodu a hĺbku prepojenia medzi komponentmi. Obrázok ukazuje potenciál každej zo šablón v kontexte týchto dvoch aspektov.

Na druhej strane tie návrhy, ktoré dobre podporujú opätovné použitie komponentov, majú medzi komponentmi silné prepojenia. Ak je potrebné v takejto schéme niečo zmeniť, vývojár schémy môže čeliť skutočnosti, že bude potrebné zmeniť mnoho súvisiacich prvkov a/alebo typov. Takéto schémy sa následne ťažko spravujú.

Vo všeobecnosti možno odvodiť nasledujúce pravidlá pre výber šablóny:

  • ak opätovné použitie komponentov schémy nie je potrebné, ak je jednoduchosť používania XSD vývojármi dôležitejšia a nie je striktne potrebné kontrolovať názvy komponentov, mali by ste zvoliť „Matryoshka“;
  • Ak je opätovné použitie komponentov dôležitejšie ako pohodlie vývojárov a názvy dátových prvkov je potrebné kontrolovať v celom systéme, potom by ste mali zvoliť Salami;
  • ak je okrem predchádzajúceho bodu dôležité ovládať názvy typov údajov a mať možnosť opätovne používať typy údajov, mali by ste zvoliť „Garden of Eden“;
  • „Žalúzie“ sú vhodné, ak je dôležité ako opätovné použitie komponentov, tak aj sloboda definovania ich miestnych názvov (alebo možnosť skryť ich v rámci okruhu).

V projekte bolo pre nás najdôležitejšie opätovné použitie typov a prvkov schém a v druhom rade totálna sémantická kontrola mien. Výber predlohy bol jasný – rajská záhrada.

Malá lyrická odbočka. Najzaujímavejšie použitie vzorov návrhu schém XML, ktoré si pamätám, bola a stále je hypnóza publika. Jeden z našich ocenených analytikov rád preberá iniciatívu a hovorí o tejto téme. Načasoval som to, po 5 minútach sa poslucháčom zatmelo pred očami a stiahli sa niekam ďaleko do seba. V „rajskej záhrade“ je vedomie väčšiny vypnuté.

A na záver dodám, že sú možné aj mixy šablón, stretli sme sa s nimi.

Zdroje a zdroje.

Obmedzenia sa používajú na definovanie prijateľných hodnôt pre prvky alebo atribúty XML. Obmedzenia prvkov XML sa tiež nazývajú „fazety“.

Hodnotové obmedzenia

Vek" s obmedzením. Tento prvok má označovať vek osoby a vek osoby, ako je známe, nemôže byť nižší ako 0 a vyšší ako 120:

Obmedzenie množiny hodnôt

Ak chcete obmedziť obsah prvku XML na určitú množinu prijateľných hodnôt, mali by ste použiť oddeľovač enumerácie.

Nasledujúci príklad definuje prvok " auto" s obmedzením. Jeho jediné prijateľné hodnoty sú Audi, Golf, BMW:

Vyššie uvedený príklad možno napísať aj takto:

V tomto prípade typ " carType"môže byť použitý inými prvkami, pretože nie je súčasťou prvku" auto".

Obmedzenia hodnotových radov

Ak chcete obmedziť obsah prvku XML na sériu čísel alebo písmen, mali by ste použiť oddeľovač vzoru.

Nasledujúci príklad definuje prvok " list" s obmedzením. Jeho jedinou platnou hodnotou môže byť JEDNO MALÉ PÍSMENO v rozsahu "a" až "z":

Nasledujúci príklad definuje prvok „iniciály“ s obmedzením. Jeho jedinou platnou hodnotou môžu byť TRI VEĽKÉ písmená v rozsahu „a“ až „z“:

iniciály" s obmedzením. Jeho jedinou platnou hodnotou môžu byť TRI MALÉ ALEBO VEĽKÉ PÍSMENA v rozsahu "a" až "z":

Nasledujúci príklad definuje prvok " výber" s obmedzením. Jeho jedinou platnou hodnotou môže byť JEDNO z troch písmen: x, y ALEBO z:

Nasledujúci príklad definuje prvok " prodid" s obmedzením. Jeho jedinou platnou hodnotou môže byť PÄŤ po sebe idúcich číslic a každá číslica musí byť v rozsahu 0 až 9:

Ďalšie obmedzenia radu hodnôt

Nasledujúci príklad definuje prvok " list" s obmedzením. Jeho platná hodnota je nula alebo viac malých písmen v rozsahu a až z:

Nasledujúci príklad tiež definuje prvok " list" s obmedzením. Jeho prijateľnou hodnotou by bol jeden alebo viac párov písmen, pričom každý pár obsahuje malé písmeno, za ktorým nasleduje veľké písmeno. Napríklad "sToP" by sa zhodovalo s daným vzorom a "Stop" alebo "STOP" alebo "stop" nie:

Nasledujúci príklad definuje prvok " rod" s obmedzením. Jeho prijateľnou hodnotou bude iba reťazec " Muž "ALEBO" Žena ":

Nasledujúci príklad definuje prvok " heslo" s obmedzením. Jeho hodnota musí byť reťazec 8 znakov a tieto znaky môžu byť malé alebo veľké písmená od a do z alebo čísla od 0 do 9:

Obmedzenia medzery

Na určenie, ako sa bude zaobchádzať so znakmi medzier, sa používa oddeľovač Biely vesmír.

Nasledujúci príklad definuje prvok " adresu whiteSpace je nastavený na " zachovať ", ktorý hovorí, že analyzátor XML NEODSTRAŇUJE žiadne medzery:

Nasledujúci príklad tiež definuje prvok " adresu" s obmedzením. Obmedzovač Biely vesmír nastavený na " nahradiť ", ktorý hovorí analyzátoru XML, aby NAHRADIL všetky medzery (tabulátor, medzera, posun riadkov a návrat vozíka) za medzery:

Nasledujúci príklad tiež definuje prvok " adresu" s obmedzením. Obmedzovač Biely vesmír nastavený na " kolaps ", ktorý povie analyzátoru XML, aby ODSTRÁNIL všetky medzery (tabulátor, medzera, posun riadku, návrat vozíka a koncová medzera sú odstránené a viaceré medzery sú nahradené jednou medzerou):

Obmedzenia dĺžky

Ak chcete obmedziť dĺžku hodnoty prvku, mali by ste použiť oddeľovače dĺžka, maximálna dĺžka A minDĺžka.

Nasledujúci príklad definuje prvok " heslo" s obmedzením. Dĺžka jeho hodnoty musí byť presne 8 znakov:

Nasledujúci príklad definuje ďalší prvok " heslo" s obmedzením. Dĺžka jeho hodnoty musí byť minimálne 5 a maximálne 8 znakov:

Obmedzenia typu údajov

ObmedzovačPopis
enumeráciaDefinuje zoznam prijateľných hodnôt
zlomkové čísliceDefinuje maximálny počet desatinných miest. Musí byť rovné alebo väčšie ako nula
dĺžkaUrčuje presný počet znakov alebo objektov zoznamu. Musí byť rovné alebo väčšie ako nula
maxExclusiveUrčuje hornú hranicu pre číselné hodnoty (hodnota musí byť menšia ako tu uvedená hodnota)
maxInclusiveUrčuje hornú hranicu pre číselné hodnoty (hodnota musí byť menšia alebo rovná hodnote tu zadanej)
maximálna dĺžkaUrčuje maximálny počet znakov alebo objektov zoznamu. Musí byť rovné alebo väčšie ako nula
minExclusiveDefinuje dolnú hranicu pre číselné hodnoty (hodnota musí byť väčšia ako tu uvedená hodnota)
minInclusiveUrčuje dolnú hranicu pre číselné hodnoty (hodnota musí byť väčšia alebo rovná hodnote tu zadanej)
minDĺžkaUrčuje minimálny počet znakov alebo objektov zoznamu. Musí byť rovné alebo väčšie ako nula
vzorDefinuje presnú postupnosť prijateľných znakov
totalDigitsDefinuje presný počet platných číslic. Musí byť väčšie ako nula
Biely vesmírDefinuje, ako sa zaobchádza so znakmi medzier