XSD

A Wikipédiából, a szabad enciklopédiából

Az XML Schema, egy a sok XML sémanyelv közül. A W3C ajánlásával publikálták, 2001 májusában.[1] Ez volt az első olyan sémanyelv az XML-hez, amely "Ajánlás" státuszba került a W3C által. Az XML Schema, mint W3C specifikáció és az általános XML séma fogalmak összekeverését elkerülendő, a specifikáció 1.1-es verziójától kezdve a W3C XSD-ként hivatkozik a nyelvre. Az XSD az "XML Schema Document" rövidítésből származik, amely egy XML Schema nyelven írt dokumentum, amely általában az "xsd" XML névtér előtagot tartalmazza.

Az XSD segítségével felírhatóak olyan szabályrendszerek, melynek meg kell hogy feleljen egy XML dokumentum ahhoz, hogy "érvényes" legyen az adott sémában.

Az XSD története[szerkesztés | forrásszöveg szerkesztése]

Az XSD-re hatással voltak a Document Type Definiton-k, és más korai XML sémarendszerek, mint a DDML, SOX, XML-Data és XDR. Ezen rendszerekből vett jellemzőket, ugyanakkor egy kompromisszum ezen rendszerek között. Az XSD publikálása és bevezetése után az XDR-t és az SOX-et használták és támogatták egy ideig. A Microsoft termékei az XDR-t használták az MSXML 6.0-ás verziójáig (amelyben lecserélték az XDR-t az XSD-re), 2006 decemberéig.[2] A Commerce One Inc. a saját maga által kifejlesztett SOX sémanyelvét használta, amíg be nem csődölt 2004-ben.

A legszembetűnőbb újdonságok az XSD-ben, melyek nem megtalálhatóak a Document Type Definition-ben, az a névterek használata, valamint adattípusok, melyek segítségével az attribútumok típusát megadhatjuk dátumnak vagy egész számnak az egyszerű szöveg helyett.

Az XSD 1.0-ás specifikációját 2001-ben publikálták, majd 2004-ben adták ki a második kiadást, amely sok hibát javított. Az XSD 1.1-es verziója 2012 áprilisában lett W3C ajánlás.

Sémák és Séma Dokumentumok[szerkesztés | forrásszöveg szerkesztése]

Definíció szerint a séma metaadatok egy absztrakt gyűjteménye, amely sémakomponensekből áll, amelyek főként elem- és attribútumdeklarációk valamint egyszerű és összetett típusdefiníciók. Ezeket séma dokumentumok feldolgozása közben kapjuk, amelyek ezen komponensek definícióit tartalmazza. A nyelvben viszont a séma dokumentumot is gyakran sémának nevezik.

A séma dokumentumok névterek által vannak rendszerezve: adott megnevezett séma komponensek egy adott névtérhez tartoznak, valamint a névtér az egész séma dokumentum egy része. Egy séma dokumentum hivatkozhat más dokumentumokra ugyanabban a névtérben és importálhat más séma dokumentumokat más névterek eléréséhez.

XML Schema dokumentumok kiterjesztése általában ".xsd". Nincs még egyedi MIME-típus az XSD-hez, tehát az RCF 3023 szerint az "application/xml" vagy "text/xml" használata szükséges hozzájuk.

Adattípusok[szerkesztés | forrásszöveg szerkesztése]

A DTD-kkel ellentétben XSD használata esetén egy elem vagy attribútum tartalmát egy adattípushoz lehet egyeztetni. Például egy attribútumra kiadhatunk olyan megkötést, hogy csak dátumot vagy egész számot tartalmazhat.

Az XSD 19 primitív adattípust támogat: anyURI, base64Binary, boolean, date, dateTime, decimal, double, duration, float, hexBinary, gDay, gMonth, gMonthDay, gYear, gYearMonth, NOTATION, QName, string, és time. Új adattípusokat ezen primitív adattípusok és a következő módszerek segítségével készítnetünk:

  • megszorítás (a lehetséges értékekre),
  • lista (értékek adott sorozatát), és
  • unió (többféle adattípus közül lehet választani).

A specifikáción belül huszonöt ilyen származtatott típust találhatunk, valamint a felhasználók is hozhatnak létre saját típusokat a sémáikban.

Példa[szerkesztés | forrásszöveg szerkesztése]

Az alábbi egy egyszerű séma dokumentum példa arra, hogyan adhatunk meg egy címet.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Address">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Recipient" type="xs:string" />
        <xs:element name="House" type="xs:string" />
        <xs:element name="Street" type="xs:string" />
        <xs:element name="Town" type="xs:string" />
        <xs:element name="County" type="xs:string" minOccurs="0" />
        <xs:element name="PostCode" type="xs:string" />
        <xs:element name="Country">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="IN" />
              <xs:enumeration value="DE" />
              <xs:enumeration value="ES" />
              <xs:enumeration value="UK" />
              <xs:enumeration value="US" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Itt pedig egy XML, amely megfelel ennek a sémának:

<?xml version="1.0" encoding="utf-8"?>
<Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="SimpleAddress.xsd">
  <Recipient>Mr. Walter C. Brown</Recipient>
  <House>49</House>
  <Street>Featherstone Street</Street>
  <Town>LONDON</Town>
  <PostCode>EC1Y 8SY</PostCode>
  <Country>UK</Country>
</Address>

XML sémák egyéb felhasználásai[szerkesztés | forrásszöveg szerkesztése]

Az XML Sémák elkészítésének elsődleges célja, hogy formálisan leírjunk egy XML dokumentumot, viszont az így létrehozott sémának lehetnek egyéb felhasználásai is a validáláson kívül.

Forráskód generálás[szerkesztés | forrásszöveg szerkesztése]

A séma segítségével forráskód készíthető, ennek neve XML Adatkötés. Az így generált forráskód segítségével XML dokumentumokat objektumokként kezelhetünk a fejlesztői környezetekben.

XML struktúra dokumentáció készítése[szerkesztés | forrásszöveg szerkesztése]

A sémákat felhasználhatjuk arra, hogy egy XML dokumentumból ember számára is jól olvasható kimenetet hozzunk létre. Ez akkor hasznos, ha a szerzők rengeteg annotációs elemet használtak fel. Az ilyen dokumentáció készítésére nincs norma, de több felhasználói eszköz is a rendelkezésünkre áll, például az Xs3p stylesheet, melynek segítségével minőségi HTML és nyomtatott oldalakat tudunk készíteni.

Kritikák[szerkesztés | forrásszöveg szerkesztése]

Habár az XML Sémát nagyon sok helyen használják és elérte azokat a célokat, melyeket maga elé tűzött, mégis rengeteg kritikát kapott.

A kritikák egy jó összefoglalását James Clark[3] fogalmazta meg, aki mellesleg a saját RELAX NG formátumát támogatja:

  • Rengeteg meglepetés van a nyelvben, például az, hogy az elemek megszorítása és az attribútumok megszorítása különböző módszerekkel történik.
  • A W3C Ajánlás roppant nehezen olvasható. A felhasználók többsége a W3C által kiadott XML Schema Primer-t használja.
  • Az XSD-hez semmiféle formális matematikai specifikáció nem tartozik. Ennek hiányában nehéz a sémák kapcsolatairól beszélni, például belátni, hogy egy sémán végzett módosítás visszafelé kompatibilis.
  • Az XSD-ben nem tudunk olyan megszorítást adni, amellyel azt várjuk el, hogy adott attribútum létezése vagy értéke függjön más attribútumok létezésétől vagy értékétől. (Ezek az ún. együttes előfordulás (co-occurrence) megkötések.
  • Az XSD nem sok támogatást nyújt a rendezetlen adatok tárolására.
  • A validációt és az augmentációt (típus információk és alapértelmezett értékek hozzáadása) együtt kezeli.

XSD 1.1[szerkesztés | forrásszöveg szerkesztése]

Az XSD 1.1 egy W3C Ajánlássá vált 2012 áprilisában. Ez azt jelenti, hogy a W3C által elfogadott specifikáció lett.

Az XSD 1.1 főbb új funkciói:

  • A dokumentum tartalmára vonatkozó kijelentéseket tehetünk Xpath 2.0 kifejezésekkel.
  • Megadhatjuk, hogy mely adattípus ellen fogjuk validálni az adott elemet, az elem attribútumainak értéke alapján. ("feltételes típushozzárendelés")
  • Helyettesítő elemeket (wildcard) adhatunk meg az elemekre és az attribútumokra egyaránt, amelyek az egész sémára vonatkoznak. Ezek segítségével később könnyen kiterjeszthetjük a sémát.
  • Lazíthatunk a szabályokon úgy, hogy egyes külön kijelölt elemeknek nem kell a helyettesítő elemek által definiált szabályokra illeszkedniük.

Kapcsolódó szócikkek[szerkesztés | forrásszöveg szerkesztése]

  • RELAX NG - egy másik XML sémanyelv (ISO nemzetközi szabvány), melyet gyakran használnak XML Schema adatokkal.

Szakirodalom[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]