A lehetséges értékek Xsd listája. XSD tervezési minták. Sémák elhelyezése és kezelése

1. Hozzon létre egy XML Shema dokumentumot, amely beépített adattípusokat tartalmaz bármely témában

Jelenítse meg a dokumentumot a böngészőben

Laboratóriumi munka №2

Egyszerű adattípusok és névterek meghatározása

A munka célja:

Fedezze fel az egyszerű XMLShema adattípusokat és névtereket

A munka előrehaladása:

Az XML-sémákban a beépített típusok segítségével háromféleképpen határozhat meg új egyszerű elemtípusokat. ként vannak megadva szűkül beépített vagy korábban meghatározott egyszerű típus (korlátozása), lista(lista) ill egyesület egyszerű típusok (szövetsége). Az egyszerű típust a simpieType sémaösszetevő határozza meg, amelynek formája van

Típus definíció

Szűkítés

Az egyszerű típusszűkítést egy korlátozási komponens definiálja, amelyben a base attribútum a szűkítendő egyszerű típust, a tartalom pedig a definiálandó egyszerű típust kiemelő korlátozásokat ad meg. Például az irányítószám hat arab számjegyből állhat az alábbiak szerint

Az egyszerű típusú zip meghatározásának másik módja 100 000 és 999 999 közötti pozitív egész szám:

  • Lista

Az egyszerű listatípus olyan elemtípus, amelynek törzsében több azonos egyszerű típus értéket szóközzel elválasztva írunk. Például egy XML-dokumentum tartalmazhatja a következő elemet, amely egész számok listáját tartalmazza:

21 34 55 4 6

A listát egy listakomponens határozza meg, amelyben az itemType attribútum határozza meg a lista elemeinek típusát. A listaelemek típusa a listaelem tartalmában is meghatározható. Például a fent látható XML dokumentumelem-napok a következő sémában definiálhatók:

és a definíciójában használt listofinteger típust állítsa be listaként

legfeljebb öt egész számból állhat az alábbiak szerint:

· Egyesület

Egy egyszerű uniótípust egy unió komponens határoz meg, amelyben a memberTypes attribútum használható az uniótípusok nevének megadására. Például:

Egy másik mód az unióban szereplő egyszerű típusok definícióinak beírása az unió komponens tartalmába. Például:

egy megszorítás, amellyel szinte minden egyszerű típusra szűkíthető a lehetséges értékek készlete.

XSD nyelv névterei

A sémák írásakor használt elem- és attribútumnevek a névtérben vannak megadva a http://www.w3.org/2001/XMLSchema azonosítóval. Az erre a térre utaló nevek előtagját gyakran xs-nek vagy xsd-nek nevezik.

Ezt a névteret alapértelmezetté teheti, de ekkor meg kell adni a névteret a sémában meghatározott típusokhoz és elemekhez. Az ilyen meghatározás kényelme érdekében a fogalom cél névtér(cél névtér). A cél névtér azonosítóját a targettiamespace attribútum határozza meg, például:

Meg kell jegyezni, hogy csak globális nevek, amelynek leírásai közvetlenül a gyökérséma elembe vannak beágyazva.

Egy másik szabványos névteret gyakran használnak XML-sémákban és dokumentumokban. Az XSD nyelvi ajánlás számos attribútumot határoz meg:

típus, nulla, schemaLocation, noNamespaceSchemaLocation

nemcsak az ábrákon, hanem közvetlenül azokon is, amelyeket ezek a sémák leírtak

XML dokumentumok meghívva áramkörök példányai(XML séma példány). Ezek az attribútumok a http://www.w3.org/2001/XMLSchema-instance névtérre vonatkoznak. Ezt a névteret leggyakrabban xsi előtaggal látják el, például:

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

Hozzon létre egy XMLShema-dokumentumot egyszerű adattípusokkal és névterekkel a következőképpen:

  1. Nyisson meg egy új fájlt a szövegszerkesztőben, és írja be az XMLShema dokumentum szövegét, amelynek listája alább látható

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

  1. A szövegszerkesztő Mentés parancsával mentse a dokumentumot a merevlemezre, nevezze el ProstTip.xsd
  2. Nyissa meg a fájlt a böngészőben, és a 3.1. ábrán láthatót kapja.

3.1. ábra

3. sz. laboratóriumi munka

Minden elemző és programozó életében eljön egy nap, amikor tudomást szerez az XML sématervező sablonok létezéséről, és élete megváltozik. Számomra például ezzel a tudással kezdődött a design szépségének megértése.

Ma arról szeretnék beszélni, hogy milyen XSD-tervezési minták vannak, mindegyik előnyeiről és hátrányairól, és arról, hogy miért választottuk az „Édenkert”-et feladatainkra.

Vegyük például a következő XML-dokumentumot adatforrásként.

100 Paul Orlov

Ugreshskaya 2 Moszkva 115088

És nézzük meg, hogyan írhatjuk le különböző módon egy XML-dokumentum ugyanazt a szerkezetét.
A sablonfelosztás alapja az XSD-n belüli globális elemek és/vagy adattípusok meghatározásának elve.

Matrjoska (orosz baba)


A sablon lényege, hogy a séma az általa leírt XML dokumentum tükre: ha az összetett elemek más összetett elemeket is tartalmaznak, ezek viszont egyszerűeket, akkor az XSD-ben az ilyen elemek leírása beágyazódik. egymást. A sablon nevét a világhírű Matrjoska babánk tiszteletére adtuk, annak analógiájára, ahogy a sablon gyermekelemei a szülőelemekbe vannak beágyazva.

A forrásfájlunk szerkezetét a Matryoshka sablon használatával leíró diagram így néz ki:


A sablon jellemzői:

  • A tartalom átlátszatlansága. Az XSD tartalma átláthatatlan más sémák számára, sőt ugyanazon séma más részei számára is. Ennek eredményeként az XSD-n belüli típusok vagy elemek egyike sem használható fel újra.
  • Rejtett területek. A séma azon területei, amelyekben helyi elemek vannak meghatározva (a példában "City" és "Zip") a gyökérelemen belül ("Cím") vannak lokalizálva. Ennek eredményeként, ha a sémában az elementFormDefault = "unqualified" értéket állítja be, akkor a helyi elem névterei ("City" és "Zip") elrejtve lesznek a sémán belül.
  • Függetlenség. Ezzel a kialakítással az áramkör minden komponense autonóm (vagyis nincs összekapcsolva más alkatrészekkel). Ezért az egyes összetevők módosításának korlátozott hatása lesz. Például, ha hozzáadja a „FlatNumber” elemet a címhez, az semmilyen módon nem befolyásolja az áramkör többi elemét.
  • Kompaktság. Ennek a kialakításnak köszönhetően az áramkörben minden értelmes adat autonóm komponensekké egyesül, pl. Az alkatrészek kompaktak.

Szalámis szelet


A sablon lényege, hogy a leírt XML dokumentum komponens elemekre van felosztva, amelyek mindegyike az XSD-ben globálisként van leírva. Ezután a leírt elemeket egyesítjük.

A forrásfájl szerkezetét a Salami sablon segítségével leíró diagram így néz ki:


A sablon jellemzői:

  • A tartalom átláthatósága. Minden elem láthat más sémákat, valamint az XSD egyéb összetevőit.
  • Globalitás. Mivel minden sémaelem globálisan van deklarálva, függetlenül a séma névtér elemFormDefault értékétől, az attribútumok teljes készlete megjelenik az XML dokumentumban (néhány üres lehet).
  • Egymásrautaltság. Ennél a kialakításnál az összetett elemek az áramkör más részeire vonatkoznak, vagyis tőlük függenek. Következésképpen az egyes alkatrészeken végrehajtott változtatások a teljes áramkörben jelentős változásokhoz vezethetnek.
  • Kompaktság.

Reluxa


A sablon lényege, hogy a leírt XML dokumentum összetett típusokra van felosztva, amelyek mindegyikét az XSD globálisként írja le. Ezután a rendszer deklarál egy gyökérelemet, amely megfelel a sémát összekapcsoló globális típusnak.

A forrásfájl szerkezetét a zsaluzia sablon használatával leíró diagram így néz ki:


A sablon jellemzői:

  • A tartalom átláthatósága. Az adattípusok más sémákból is láthatók, és az XSD összetevői számára is láthatók.
  • Maximális névrejtés. Az elemdeklarációk helyiek, így a sablon maximális névrejtési lehetőséget kínál.
  • Könnyen szabályozhatja az üres attribútumok elrejtését. Ha a névterek rejtettek, akkor az üres attribútumok megjelenítését a dokumentumokban egyetlen kapcsoló, az elementFormDefault szabályozza.
  • Egymásrautaltság. Ezzel a kialakítással az összetett adattípusok a séma más részeire vonatkoznak, vagy azoktól függenek. Következésképpen az egyes alkatrészeken végrehajtott változtatások a teljes áramkörben jelentős változásokhoz vezethetnek.
  • Kompaktság. Ennek a kialakításnak köszönhetően az áramkörben minden értelmes adat autonóm komponensekké egyesül, azaz az alkatrészek kompaktak.

Éden kertje


A Garden of Eden nagyszerűsége az, hogy minden elemet és összetett adattípust globálisként határoz meg. Ez lehetővé teszi, hogy bármely típusra vagy elemre hivatkozzon egyetlen XSD-n belül vagy bármely más XSD-ről, sőt WSDL-ről is. Ez az egyetlen módja annak, hogy mind a típusok, mind az elemek szemantikáját teljes mértékben ellenőrizzék.

A forrásfájl szerkezetét a Garden of Eden sablon használatával leíró diagram így néz ki:


A sablon jellemzői:

  • Maximális tartalom átláthatóság. Mind a típusok, mind az adatelemek láthatók más sémákból, és az XSD összetevői számára is láthatók.
  • Maximális névközlés. Lokálisan semmi nincs meghatározva, így a nevek láthatósága maximális.
  • Egymásrautaltság. Ennél a kialakításnál az összetett adattípusok és elemek a séma más részeire hivatkoznak, vagyis függenek tőlük. Következésképpen az egyes alkatrészeken végrehajtott változtatások a teljes áramkörben jelentős változásokhoz vezethetnek.
  • Terjedelmes. Az értelemszerűen összefüggő adatokat a típus és az elem meghatározása „elkenődik”. Egy ilyen diagramot nehezebb „olvasni”.

Válasszon ki egy sablont

A sablon kiválasztásakor fontos több szempontot figyelembe venni:
  1. Milyen mértékben lehetséges az áramköri alkatrészek újrafelhasználása;
  2. Mennyire egyszerű az áramkörrel dolgozni;
  3. Mennyiben legyenek az áramkör alkotóelemei egymástól függőek vagy függetlenek?

A tervezési minta kiválasztásakor gyakran egyensúlyba kell hoznia az áramköri alkatrészek újrafelhasználásának lehetőségét és az alkatrészek közötti összekapcsolódás mélységét. Az ábra az egyes sablonokban rejlő lehetőségeket mutatja e két szempont összefüggésében.

Azok a konstrukciók, amelyek jól támogatják a komponensek újrafelhasználását, viszont erősen kapcsolódnak egymáshoz az összetevők között. Ha egy ilyen sémában változtatni kell valamit, akkor a sémafejlesztő szembesülhet azzal, hogy sok kapcsolódó elemet és/vagy típust kell módosítani. Az ilyen rendszereket később nehéz kezelni.

Általánosságban elmondható, hogy a sablon kiválasztásához a következő szabályokat lehet levezetni:

  • ha a sémaösszetevők újrafelhasználása nem szükséges, ha fontosabb az XSD fejlesztők általi egyszerű használata, és nincs szigorú szükség az összetevők nevének ellenőrzésére, akkor válassza a „Matryoshka” lehetőséget;
  • Ha a komponensek újrafelhasználása fontosabb, mint a fejlesztő kényelme, és az adatelemek neveit az egész rendszerben ellenőrizni kell, akkor a Salamit kell választani;
  • ha az előző ponton kívül fontos az adattípusok nevének szabályozása és az adattípusok újrafelhasználása, akkor válassza az „Édenkert” lehetőséget;
  • A "zsalugáterek" akkor megfelelőek, ha mind az alkatrészek újrafelhasználása, mind a helyi nevük meghatározásának szabadsága (vagy az áramkörön belüli elrejtésük) fontos.

A projektben számunkra a legfontosabb a típusok és sémaelemek újrafelhasználása, másodsorban pedig a nevek teljes szemantikai kontrollja volt. A sablon kiválasztása nyilvánvaló volt - az Édenkert.

Egy kis lírai kitérő. Az XML-sématervezési minták legérdekesebb felhasználási módja, amire emlékszem, a közönséghipnózis volt, és továbbra is az. Egyik díjnyertes elemzőnk szívesen kezdeményez erről a témáról beszélve. Időzítettem, 5 perc múlva a hallgatók szeme elhomályosult, és valahova messzire magukba húzódtak. Az "Édenkertben" a többség tudata ki van kapcsolva.

Végezetül pedig annyit szeretnék hozzátenni, hogy sablonkeverékek is lehetségesek, találkoztunk velük.

Források és források.

A megszorításokat az XML elemek vagy attribútumok elfogadható értékeinek meghatározására használják. Az XML-elemekre vonatkozó megszorításokat "faceteknek" is nevezik.

Értékkorlátozások

kor" korlátozással. Ennek az elemnek a személy életkorát kell jeleznie, és a személy életkora, mint ismeretes, nem lehet kevesebb 0-nál és nem lehet több 120-nál:

Az értékkészlet korlátozása

Ha egy XML-elem tartalmát egy bizonyos elfogadható értékkészletre szeretné korlátozni, használja a felsoroláshatárolót.

A következő példa a " elemet határozza meg autó" korlátozásokkal. Egyetlen elfogadható értékei az Audi, Golf, BMW:

A fenti példa a következőképpen is felírható:

Ebben az esetben a " carType"más elemek használhatják, mivel nem része az elemnek" autó".

Értéksor korlátozások

Ha egy XML-elem tartalmát számok vagy betűk sorozatára szeretné korlátozni, használja a mintahatárolót.

A következő példa a " elemet határozza meg levél" egy korlátozással. Egyetlen érvényes értéke egy kisbetű lehet "a" és "z" közötti tartományban:

A következő példa egy "inicials" elemet definiál megkötéssel. Az egyetlen érvényes értéke HÁROM NAGYBETŰ lehet az "a" és "z" tartományban:

monogram" egy korlátozással. Az egyetlen érvényes értéke HÁROM KISBETŐ VAGY NAGYBETŰ lehet "a" és "z" tartományban:

A következő példa a " elemet határozza meg választás" korlátozással. Egyetlen érvényes értéke a három betű közül EGY lehet: x, y VAGY z:

A következő példa a " elemet határozza meg prodid" korlátozással. Az egyetlen érvényes értéke ÖT egymást követő számjegy lehet, és minden számjegynek 0 és 9 közötti tartományban kell lennie:

Az értéksorokra vonatkozó egyéb korlátozások

A következő példa a " elemet határozza meg levél" a korlátozással. Érvényes értéke nulla vagy több kisbetű az a-z tartományban:

A következő példa a "" elemet is meghatározza levél" a megszorítással. Elfogadható értéke egy vagy több betűpár, és mindegyik pár tartalmaz egy kisbetűt, amelyet egy nagybetű követ. Például az "sToP" megfelelne a megadott mintának, és a "Stop" vagy "STOP " vagy "stop" nem:

A következő példa a " elemet határozza meg neme" korlátozással. Elfogadható értéke csak a karakterlánc lesz " férfi "VAGY" női ":

A következő példa a " elemet határozza meg jelszó", azzal a korlátozással. Értékének 8 karakterből álló karakterláncnak kell lennie, és ezek a karakterek lehetnek kis- vagy nagybetűk a-tól z-ig, vagy számok 0-tól 9-ig:

Szóköz korlátozások

A szóközök kezelésének meghatározásához határolót használnak whiteSpace.

A következő példa a " elemet határozza meg cím A whiteSpace értéke " megőrizni ", amely arra utasítja az XML-elemzőt, hogy NE távolítsa el a szóköz karaktereket:

A következő példa a "" elemet is meghatározza cím" korlátozással. Limiter whiteSpaceállítsa a " cserélje ki ", amely arra utasítja az XML-elemzőt, hogy CSERÉLJE KI az összes szóköz karaktert (tabulátor, szóköz, soremelés és kocsivisszaadás) szóköz karakterekre:

A következő példa a "" elemet is meghatározza cím" korlátozással. Limiter whiteSpaceállítsa a " összeomlás ", amely arra utasítja az XML-elemzőt, hogy TÁVOLÍTSA EL az összes szóköz karaktert (a tabulátor, szóköz, soremelés, kocsi visszatérés és a záró szóköz karakterek eltávolításra kerülnek, és több szóközt egyetlen szóközzel helyettesítenek):

Hossz korlátozások

Egy elem értékének hosszának korlátozásához határolókat kell használni hossz, maxLengthÉs minLength.

A következő példa a " elemet határozza meg jelszó" korlátozással. Értékének pontosan 8 karakterből kell állnia:

A következő példa egy másik elemet határoz meg " jelszó" korlátozással. Értékének legalább 5 és legfeljebb 8 karakterből kell állnia:

Adattípus korlátozások

LimiterLeírás
felsorolásMeghatározza az elfogadható értékek listáját
fractionDigitsMeghatározza a tizedesjegyek maximális számát. Egyenlőnek vagy nagyobbnak kell lennie nullával
hosszMegadja a karakterek vagy listaobjektumok pontos számát. Egyenlőnek vagy nagyobbnak kell lennie nullával
maxExkluzívMegadja a numerikus értékek felső korlátját (az értéknek kisebbnek kell lennie az itt megadott értéknél)
maxInclusiveMegadja a számértékek felső korlátját (az értéknek kisebbnek vagy egyenlőnek kell lennie az itt megadott értéknél)
maxLengthMeghatározza a karakterek vagy listaobjektumok maximális számát. Egyenlőnek vagy nagyobbnak kell lennie nullával
minExkluzívMeghatározza a numerikus értékek alsó korlátját (az értéknek nagyobbnak kell lennie az itt megadott értéknél)
minInclusiveMegadja a numerikus értékek alsó korlátját (az értéknek nagyobbnak vagy egyenlőnek kell lennie az itt megadott értéknél)
minLengthMegadja a karakterek vagy listaobjektumok minimális számát. Egyenlőnek vagy nagyobbnak kell lennie nullával
mintaMeghatározza az elfogadható karakterek pontos sorrendjét
totalDigitsMeghatározza az érvényes számjegyek pontos számát. Nagyobbnak kell lennie nullánál
whiteSpaceMeghatározza a szóköz karakterek kezelését

XSD egy XML-dokumentum szerkezetének leírására szolgáló nyelv. XML-sémának is nevezik. Az XML-séma használatakor az XML-elemző nemcsak az XML-dokumentum szintaxisának helyességét tudja ellenőrizni, hanem annak szerkezetét, tartalommodelljét és adattípusait is.

Ez a megközelítés lehetővé teszi az objektum-orientált programozási nyelvek számára, hogy könnyen létrehozzanak objektumokat a memóriában, ami kétségtelenül kényelmesebb, mint az XML normál szövegfájlként történő elemzése.

Ezenkívül az XSD bővíthető, és lehetővé teszi, hogy kész szótárakat csatlakoztasson a tipikus feladatok leírásához, például webszolgáltatásokhoz, mint például a SOAP.

Érdemes megemlíteni azt is, hogy az XSD beépített dokumentációs eszközökkel rendelkezik, amelyek lehetővé teszik önálló dokumentumok létrehozását, amelyek nem igényelnek további leírást.

Példaként tekintsünk egy XSD-dokumentumot, amely leírja a Habré fiókstruktúrájának egy részét.

Az XSD séma szövegét és a sémának megfelelő XML dokumentumot méretük miatt nem tettem bele a cikkbe.

A diagram első sora azt jelzi, hogy a dokumentum XML dokumentumés UTF-8 kódolást használ.


A következő sor a dokumentum fő elemének leírását kezdi - habra_user.
< xs:element name ="habra_user" >
Az elemet dokumentáló sorok:
< xs:annotation >
< xs:documentation >A rendszer fő eleme. Habr felhasználót ír le

Címke "összetett" adattípust ír le user_name. Igény szerint külön adattípusként kivehető, analógiával contact_info. Ehhez blokkra van szüksége költözzön és adja meg az attribútumot név, és állítsa be az elem attribútumot típus.

Elemek user_name, keresztnév, vezetéknév legyen egy karakterlánc típusa, és írja le a felhasználót, a fióktulajdonos kereszt- és vezetéknevét.

Elem születési_dátum dátum adattípussal rendelkezik, és leírja a születési dátumot.

A regisztráció dátuma leírja regisztráció_dátuma, amelynek saját adattípusa van customDateTime. A címke értéke az attribútum segítségével lesz beállítva érték. A vonalak ezt jelzik.

< xs:attribute name ="value" use ="required" >
Ebben az esetben az attribútum megadása kötelező. Annak érdekében, hogy az érték megfeleljen a követelményeknek, leírjuk az „ellenőrzéseket”:
< xs:simpleType >
< xs:restriction base ="xs:string" >
< xs:length value ="19" />
< xs:pattern value ="-- ::" />


Ebben az esetben a sor hossza mindig 19 lesz, ezt a tag adja meg és maga az érték megegyezik a címkében megadott mintával .

Elemek contact_infoÉs blog- tömbök, ezt az attribútum jelzi maxOccurs="unbound".

Címke meghatározza, hogy a beágyazott elem az ICQ vagy linkedin elemek egyike lesz.

Címke azt jelzi, hogy a beágyazott elemek lesznek blog_nameÉs blog_url pontosan ebben a sorrendben. Ha a sorrend nem fontos, akkor a címkét kell használnia .

WiFi