[go: up one dir, main page]

XSD

XML Schema Definition
Ez a közzétett változat, ellenőrizve: 2024. április 21.

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ók olyan szabályrendszerek, melynek meg kell feleljen egy XML-dokumentum ahhoz, hogy „érvényes” legyen az adott sémában.

Az XSD története

szerkesztés

Az XSD-re hatással volt a DTD és más korai XML-sémarendszerek, mint a DDML, SOX, XML-Data és XDR. Ezen rendszerekből vett át 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 2006 decemberéig, az MSXML 6.0-s verziójáig, amelyben lecserélték az XDR-t az XSD-re.[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 találhatók meg a DTD-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émadokumentumok

szerkesztés

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émadokumentumok feldolgozása közben kapjuk, amelyek ezen komponensek definícióit tartalmazza. A nyelvben viszont a sémadokumentumot is gyakran sémának nevezik.

A sémadokumentumok névterek által vannak rendszerezve: adott megnevezett sémakomponensek egy adott névtérhez tartoznak, valamint a névtér az egész sémadokumentum egy része. Egy sémadokumentum hivatkozhat más dokumentumokra ugyanabban a névtérben, és importálhat más sémadokumentumokat 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

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íthetü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.

Az alábbi egy egyszerű sémadokumentum 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

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

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

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.

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 H. 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.

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
  • RELAX NG – egy másik XML sémanyelv (ISO nemzetközi szabvány), melyet gyakran használnak XML Schema adatokkal.

Szakirodalom

szerkesztés
  1. XML and Semantic Web W3C Standards Timeline, 2012. február 4. [2013. április 24-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 19.)
  2. Removal of XDR Schema Support in MSXML 6.0. (Hozzáférés: 2010. szeptember 19.)
  3. Archivált másolat. [2007. szeptember 27-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 19.)