Schéma XML - XML schema

Schéma XML je popis typu XML dokumentu, typicky vyjádřena omezení týkající se struktury a obsahu dokumentů tohoto typu nad rámec základních syntaktických omezeními danými samotnou XML. Tato omezení jsou obecně vyjádřena pomocí určité kombinace gramatických pravidel, která řídí pořadí prvků, Booleovské predikáty, které musí obsah splňovat, datových typů, které řídí obsah prvků a atributů, a více specializovaných pravidel, jako jsou jedinečnost a omezení referenční integrity .

Existují jazyky vyvinuté speciálně pro expresi schémat XML. Jazyk definice typu dokumentu (DTD), který je nativní pro specifikaci XML, je jazyk schématu, který má relativně omezené možnosti, ale kromě vyjádření schémat má v XML také další použití. Dva další expresivní jazyky schématu XML v širokém použití jsou schéma XML (s velkým S ) a RELAX NG .

Mechanismus přidružení dokumentu XML ke schématu se liší podle jazyka schématu. Přidružení lze dosáhnout prostřednictvím značek v samotném dokumentu XML nebo pomocí externích prostředků.

Validace

Proces kontroly, zda dokument XML odpovídá schématu, se nazývá ověření , které je oddělené od základního konceptu XML syntaktické správnosti . Všechny dokumenty XML musí mít správný tvar, ale není vyžadováno, aby byl dokument platný, pokud analyzátor XML neprovádí „validaci“. V takovém případě je dokument také zkontrolován na shodu s přidruženým schématem. Nejběžnější jsou analyzátory ověřující DTD , ale některé také podporují schéma XML nebo RELAX NG.


Ověření dokumentu instance proti schématu lze považovat za koncepčně samostatnou operaci od analýzy XML. V praxi je však mnoho validátorů schémat integrováno s analyzátorem XML.

Jazyky

Pro zadání schématu XML je k dispozici několik různých jazyků. Každý jazyk má své silné a slabé stránky.

Primárním účelem jazyka schématu je určit, jaká může být struktura dokumentu XML. To znamená, které prvky mohou být umístěny ve kterých jiných prvcích, které atributy jsou a nejsou legální mít na konkrétním prvku atd. Schéma je analogické gramatice pro jazyk; schéma definuje, co může být slovník pro daný jazyk a co je platná „věta“.

Existují historické a aktuální jazyky schématu XML:

Jazyk Zkratka. Verze Úřad
Omezovací jazyk v XML CLiX 2005 Nezávislý
Zařízení pro popis obsahu dokumentu pro XML, rámec RDF DCD v1.0 (1998) W3C (poznámka)
Značkovací jazyk definice dokumentu DDML v0 (1999) W3C (poznámka)
Popis struktury dokumentu DSD 2002, 2005 BRICS (zaniklý)
Definice typu dokumentu DTD 1986 (SGML) ISO
2008 (XML) ISO / IEC
Jazyk směrování oboru názvů NRL 2003 Nezávislý
Ověření dispečinku na základě oboru názvů NVDL 2006 ISO / IEC
Mechanismus sestavení obsahu VAČKA 2007 OÁZA
PRAVIDELNÝ jazyk pro XML příští generace RELAX NG, RelaxNG 2001, Compact Syntax (2002) OÁZA
v1 (2003), v1 Compact Syntax (2006), v2 (2008) ISO / IEC
Schéma pro objektově orientovaný XML SOX ? ?
Schematron N / A 2006, 2010, 2016, 2020 ISO / IEC
Data XML byla snížena XDR ? ?
ASN.1 Pravidla kódování XML XER ? ?
Schéma XML WXS, XSD 1,0 (2004), 1,1 (2012) W3C

Hlavní (viz také schválené jazyky ISO 19757 ) jsou popsány níže.

Ačkoli je k dispozici řada jazyků schématu, primárními třemi jazyky jsou definice typu dokumentu , schéma W3C XML a RELAX NG . Každý jazyk má své vlastní výhody a nevýhody.

Definice typu dokumentu

Podpora nástrojů

DTD jsou možná nejvíce podporovaným jazykem schématu pro XML. Protože DTD jsou jedním z prvních jazyků schémat pro XML, které byly definovány dříve, než XML dokonce mělo podporu oboru názvů, jsou široce podporovány. Interní DTD jsou často podporovány procesory XML; externí DTD jsou méně často podporovány, ale jen mírně. Většina velkých analyzátorů XML, které podporují více technologií XML, poskytne podporu také pro DTD.

Schéma XML W3C

Výhody oproti DTD

Mezi funkce dostupné v XSD, které v DTD chybí, patří:

  • Názvy prvků a atributů zohledňují jmenný prostor
  • Omezení („jednoduché typy“) lze definovat pro textový obsah prvků a atributů, například pro určení, že jsou číselné nebo obsahují data. Standardně je k dispozici široký repertoár jednoduchých typů a z nich lze odvodit další typy definované uživatelem, například zadáním rozsahů hodnot, regulárních výrazů nebo výčtem povolených hodnot.
  • Zařízení pro definování omezení jedinečnosti a referenční integrity jsou výkonnější: na rozdíl od omezení ID a IDREF v DTD mohou být vymezeny na libovolnou část dokumentu, mohou být jakéhokoli datového typu, mohou být použity na element i na obsah atributu a může být vícedílný (například kombinace křestního jména a příjmení musí být jedinečná).
  • Mnoho požadavků, které se tradičně zpracovávají pomocí entit parametrů v DTD, má v XSD explicitní podporu: příklady zahrnují substituční skupiny, které umožňují jednomu názvu (například „block“ nebo „inline“) odkazovat na celou třídu prvků; komplexní typy, které umožňují sdílení (nebo přizpůsobení omezením nebo rozšířením) stejného modelu obsahu více prvky; a modelové skupiny a skupiny atributů, které umožňují definovat společné části komponentních modelů na jednom místě a znovu je použít.
  • XSD 1.1 přidává možnost definovat libovolná tvrzení (pomocí výrazů XPath) jako omezení obsahu prvku.

Schémata XSD jsou běžně psána jako dokumenty XML, takže lze použít známé nástroje pro úpravy a transformaci.

Kromě ověřování umožňuje XSD anotovat instance XML informacemi o typu ( Post-Schema-Validation Infoset (PSVI) ), které mají usnadnit manipulaci s instancí XML v aplikačních programech. Může to být mapováním typů definovaných XSD na typy v programovacím jazyce, jako je Java („datová vazba“), nebo obohacením systému typů jazyků pro zpracování XML, jako jsou XSLT a XQuery (známé jako „schema-aware“).

Společné rysy s RELAX NG

Schémata XML RELAX NG a W3C umožňují podobné mechanismy specificity. Oba umožňují určitou modularitu ve svých jazycích, včetně například rozdělení schématu na více souborů. A oba jsou nebo mohou být definovány v jazyce XML.

Výhody oproti RELAX NG

RELAX NG nemá žádný analog k PSVI . Na rozdíl od schématu W3C XML byl RELAX NG navržen tak, aby ověřování a rozšiřování (přidávání informací o typu a výchozích hodnot) byly oddělené.

Schéma XML W3C má formální mechanismus pro připojení schématu k dokumentu XML, zatímco RELAX NG se záměrně vyhýbá těmto mechanismům z důvodu bezpečnosti a interoperability.

RELAX NG nemá schopnost použít výchozí data atributů na seznam atributů prvku (tj. Změnit sadu informací XML), zatímco W3C XML Schema ano. Tento návrh je opět záměrný a má oddělit ověřování a rozšiřování.

W3C XML Schema má zabudovaný bohatý systém "jednoduchého typu" (xs: number, xs: date atd., Plus odvození vlastních typů), zatímco RELAX NG má extrémně zjednodušující, protože je určen k použití vyvinutých knihoven typů nezávisle na RELAX NG, spíše než pěstovat vlastní. Někteří to považují za nevýhodu. V praxi je běžné, že schéma RELAX NG používá předdefinované „jednoduché typy“ a „omezení“ (vzor, ​​maxLength atd.) Schématu W3C XML.

Ve schématu W3C XML lze vyjádřit konkrétní počet nebo rozsah opakování vzorů, zatímco v RELAX NG není prakticky možné specifikovat vůbec (<oneOrMore> nebo <zeroOrMore>).

Nevýhody

Schéma XML W3C je složité a těžko se učí, i když je to částečně proto, že se snaží udělat více než pouhé ověření (viz PSVI ).

Ačkoli je zápis v XML výhodou, v některých ohledech je to také nevýhoda. Zejména jazyk schématu XML W3C může být docela podrobný, zatímco DTD může být strohý a relativně snadno upravitelný.

Podobně může formální mechanismus WXS pro přidružení dokumentu ke schématu představovat potenciální bezpečnostní problém. Pro validátory WXS, kteří budou sledovat URI na libovolné online umístění, existuje potenciál pro čtení něčeho škodlivého z druhé strany streamu.

Schéma XML W3C neimplementuje většinu schopnosti DTD poskytovat datové prvky dokumentu.

Ačkoli schopnost schématu W3C XML přidat výchozí atributy k prvkům je výhodou, je v některých ohledech také nevýhodou. To znamená, že soubor XML nemusí být použitelný při absenci jeho schématu, i když by se dokument proti tomuto schématu ověřil. Ve skutečnosti musí všichni uživatelé takového dokumentu XML také implementovat specifikaci schématu XML W3C, čímž vylučují minimalistické nebo starší analyzátory XML. Může také zpomalit zpracování dokumentu, protože procesor musí potenciálně stáhnout a zpracovat druhý soubor XML (schéma); schéma by se však normálně poté uložilo do mezipaměti, takže cena přichází pouze při prvním použití.

Podpora nástrojů

Podpora WXS existuje v řadě velkých balíčků analýzy XML. Xerces a .NET Framework ‚s Základní Class Library jak poskytovat podporu pro validaci WXS.

RELAX NG

RELAX NG poskytuje většinu výhod, které schéma W3C XML poskytuje přes DTD.

Výhody oproti schématu W3C XML

Zatímco jazyk RELAX NG lze psát v XML, má také ekvivalentní podobu, která je mnohem podobnější DTD, ale s větší specifikací. Tato forma se nazývá kompaktní syntaxe. Nástroje mohou snadno převádět mezi těmito formuláři bez ztráty funkcí nebo dokonce s komentováním. Dokonce i libovolné prvky uvedené mezi prvky XML RELAX NG lze převést do kompaktní podoby.

RELAX NG poskytuje velmi silnou podporu pro neuspořádaný obsah. To znamená, že umožňuje schématu uvést, že posloupnost vzorů se může objevit v libovolném pořadí.

RELAX NG také umožňuje nedeterministické modely obsahu. To znamená, že RELAX NG umožňuje specifikaci sekvence, jako je následující:

<zeroOrMore>
  <ref name="odd" />
  <ref name="even" />
</zeroOrMore>
<optional>
  <ref name="odd" />
</optional>

Když validátor narazí na něco, co odpovídá „lichému“ vzoru, není známo, zda se jedná o volitelný poslední „lichý“ odkaz, nebo jednoduše jeden v posloupnosti zeroOrMore, aniž by se díval dopředu na data. RELAX NG umožňuje tento druh specifikace. Schéma XML W3C vyžaduje, aby všechny jeho sekvence byly plně deterministické, takže mechanismy jako výše uvedené musí být buď specifikovány jiným způsobem, nebo úplně vynechány.

RELAX NG umožňuje považovat atributy v modelech obsahu za prvky. To zejména znamená, že lze poskytnout následující:

<element name="some_element">
  <choice>
    <attribute name="has_name">
      <value>false</value>
    </attribute>
    <group>
      <attribute name="has_name">
        <value>true</value>
      </attribute>
      <element name="name"><text /></element>
    </group>
  </choice>
</element>

Tento blok uvádí, že prvek „some_element“ musí mít atribut s názvem „has_name“. Tento atribut může mít jako hodnoty pouze hodnotu true nebo false, a pokud je to pravda, první podřízený prvek prvku musí být „name“, který ukládá text. Pokud „name“ nemusí být prvním prvkem, pak může být výběr zabalen do prvku „interleave“ spolu s dalšími prvky. Pořadí specifikace atributů v RELAX NG nemá žádný význam, takže tento blok nemusí být prvním blokem v definici prvku.

Schéma XML W3C nemůže specifikovat takovou závislost mezi obsahem atributu a podřízenými prvky.

Specifikace RELAX NG uvádí pouze dva vestavěné typy (řetězec a token), ale umožňuje definici mnoha dalších. Teoreticky nedostatek konkrétního seznamu umožňuje procesoru podporovat datové typy, které jsou velmi specifické pro konkrétní problémovou doménu.

Většina schémat RELAX NG může být algoritmicky převedena na schémata XML W3C a dokonce i DTD (kromě případů, kdy jsou použity funkce RELAX NG, které tyto jazyky nepodporují, jak je uvedeno výše). Opak není pravdou. Jako takový lze RELAX NG použít jako normativní verzi schématu a uživatel jej může převést do jiných formulářů pro nástroje, které nepodporují RELAX NG.

Nevýhody

Většina nevýhod RELAX NG je pokryta v části o výhodách schématu W3C XML oproti RELAX NG.

Ačkoli je schopnost RELAX NG podporovat uživatelem definované datové typy užitečná, má tu nevýhodu, že má pouze dva datové typy, na které se uživatel může spolehnout. Což teoreticky znamená, že použití schématu RELAX NG napříč více validátory vyžaduje buď poskytnutí těchto uživatelem definovaných datových typů tomuto validátoru, nebo použití pouze dvou základních typů. V praxi však většina procesorů RELAX NG podporuje sadu datových typů schématu W3C XML.

Schematron

Schematron je poměrně neobvyklý jazyk schématu. Na rozdíl od hlavních tří definuje syntaxi souboru XML jako seznam pravidel založených na XPath . Pokud dokument projde těmito pravidly, pak je platný.

Výhody

Vzhledem ke své povaze založené na pravidlech je Schematronova specifičnost velmi silná. Může vyžadovat, aby byl obsah prvku řízen jedním z jeho sourozenců. Může také požadovat nebo vyžadovat, aby kořenový prvek, bez ohledu na to, jaký prvek se stane, měl konkrétní atributy. Může dokonce určit požadované vztahy mezi více soubory XML.

Nevýhody

Zatímco Schematron je dobrý v relačních konstrukcích, jeho schopnost určit základní strukturu dokumentu, to znamená, které prvky mohou jít kam, vede k velmi podrobnému schématu.

Typickým způsobem, jak to vyřešit, je kombinace Schematronu se schématem XML RELAX NG nebo W3C. Pro oba jazyky je k dispozici několik procesorů schémat, které podporují tento kombinovaný formulář. To umožňuje pravidlům Schematronu určit další omezení struktury definované schématem W3C XML nebo RELAX NG.

Podpora nástrojů

Referenční implementace společnosti Schematron je ve skutečnosti transformací XSLT, která transformuje dokument Schematron na XSLT, který ověřuje soubor XML. Potenciální sadou nástrojů Schematronu je tedy jakýkoli procesor XSLT, ačkoli libxml2 poskytuje implementaci, která nevyžaduje XSLT. Sun Microsystems 's Multiple Schema Validator for Java má doplněk, který mu umožňuje ověřovat schémata RELAX NG, která mají zabudovaná pravidla Schematron.

Namespace Routing Language (NRL)

Toto není technicky jazyk schématu. Jeho jediným účelem je nasměrovat části dokumentů do jednotlivých schémat na základě oboru názvů nalezených prvků. NRL je pouze seznam jmenných prostorů XML a cesta ke schématu, kterému každý odpovídá. To umožňuje každému schématu, aby se zabýval pouze vlastní definicí jazyka, a soubor NRL směruje validátor schématu do správného souboru schématu na základě oboru názvů daného prvku.

Tento formát XML je agnostický ve schématu a funguje téměř pro jakýkoli jazyk schématu.

Terminologie

Velká písmena ve slově schématu : existují určité nejasnosti ohledně toho, kdy použít pravopis s velkým písmem „Schéma“ a kdy použít pravopis s malými písmeny. Forma malých písmen je obecný termín a může odkazovat na jakýkoli typ schématu, včetně DTD, schématu XML (aka XSD), RELAX NG nebo jiných, a měla by být vždy psána malými písmeny, kromě případů, kdy se objeví na začátku věty. Formulář „Schéma“ (s velkými písmeny) běžně používaný v komunitě XML vždy odkazuje na schéma W3C XML .

Možnosti vytváření schémat

Zaměření definice schématu je struktura a určitá sémantika dokumentů. Návrh schématu, stejně jako návrh databází, počítačového programu a dalších formálních konstrukcí, však také zahrnuje mnoho ohledů na styl, konvenci a čitelnost. Rozsáhlé diskuse o problémech návrhu schémat lze nalézt například v Maler (1995) a DeRose (1997).

Konzistence
Jedna zřejmá úvaha je, že značky a názvy atributů by měly používat konzistentní konvence. Například by bylo neobvyklé vytvořit schéma, kde jsou některé názvy prvků camelCase, ale jiné používají podtržítka k oddělení částí názvů nebo jiných konvencí.
Jasná a mnemotechnická jména
Stejně jako v jiných formálních jazycích může dobrá volba jmen pomoci porozumět, i když jména sama o sobě nemají žádný formální význam. Pojmenování vhodné značky „kapitola“ místo „tag37“ pomůže čtenáři. To zároveň přináší problémy s výběrem přirozeného jazyka. Schéma, které se má použít pro irské gaelské dokumenty, bude pravděpodobně používat stejný jazyk pro názvy prvků a atributů, protože to bude jazyk běžný pro editory a čtenáře.
Volba značky vs atributu
Některé informace mohou snadno „zapadnout“ buď do prvku, nebo do atributu. Protože atributy nemohou obsahovat prvky v XML, vyvstává tato otázka pouze pro komponenty, které nemají žádnou další podstrukturu, které si XML musí být vědomy (atributy podporují více tokenů, například více hodnot IDREF, které lze považovat za mírnou výjimku). Atributy obvykle představují informace spojené s celistvostí prvku, na kterém se vyskytují, zatímco dílčí prvky zavádějí nový vlastní rozsah.
Textový obsah
Některá schémata XML, zejména ta, která představují různé druhy dokumentů , zajišťují, že veškerý „textový obsah“ (zhruba každá část, kterou by člověk mluvil, pokud nahlas přečte dokument), se vyskytuje jako text a nikdy v atributech. Existuje však mnoho okrajových případů, kdy to neplatí: Za prvé, existují dokumenty XML, které vůbec neobsahují „přirozený jazyk“, nebo jen minimálně, například pro telemetrii, vytváření vektorové grafiky nebo matematické vzorce atd. . Zadruhé, informace, jako jsou scénické směry ve hrách, čísla veršů v klasických a biblických dílech a oprava nebo normalizace pravopisu v přepisovaných dílech, představují všechny problémy interpretace, které musí návrháři schémat pro tyto žánry vzít v úvahu.
Opětovné použití schématu
Nové schéma XML lze vyvinout od nuly nebo může znovu použít některé fragmenty jiných schémat XML . Všechny jazyky schématu nabídnout některé nástroje (například patří i kontrola nad modulárních jmenných prostorů) a doporučuje opětovné použití pokud je to možné. Různé části rozsáhlých a propracovaných schémat Iniciativy kódování textu jsou také znovu použity v mimořádné paletě dalších schémat.
Sémantický vs syntatický
S výjimkou RDF, žádný jazyk schématu výslovně formálně sémantický, pouze struktura a datové typy. Přestože je předpoklad RDF ideální, je velmi špatný a není doporučením v rámci vývoje schémat .

Viz také

Jazyky:

Reference

externí odkazy