Obsah
Původní specifikace (W3C Recommendation) XML 1.0 na W3C: http://www.w3.org/XML/
3rd Edition (aktualizace, ne změny) na http://www.w3.org/TR/2000/REC-xml-20001006
výborná komentovaná verze téhož na XML.COM (Annotated XML): http://www.xml.com/pub/a/axml/axmlintro.html
na XML 1.1 (Candidate Recommendation) - změny indukované zavedením UNICODE 3, lepší možnosti normalizace, upřesnění postupu manipulace se znaky ukončení řádku.
Opakování: každý XML dokument MUSÍ být správně utvořený (well formed)
Nové: XML dokument můřže být platný (valid) dokument:
Platný podle specifikace znamená přísnější omezení než správně utvořený.
Obvykle se validitou myslí soulad s DTD (Document Type Definition) dokumentu nebo
(moderněji) - soulad s XML Schematem, případně jinými schématy (RelaxNG, Schematron).
Definice typu dokumentu (použití této definice je pak deklarace typu dokumentu)
Specifikována přímo standardem XML 1.0
Popisuje přípustný obsah elementů, atributů, jejich implicitní (default) hodnoty, definuje použité entity
Může být uvedena jako interní nebo externí DTD (internal and external subset) nebo "napůl" - tam i tam.
Dokument vyhovující DTD je označován jako valid (platný).
Webreview: http://www.webreview.com/2000/08_11/developers/08_11_00_2.shtml
ZVON: http://www.zvon.org/xxl/DTDTutorial/General/contents.html
XML DTD Tutorial (101): http://www.xml101.com/dtd/
W3Schools DTD Tutorial: http://www.w3schools.com
Uvádí se těsně před kořenový elementem konstrukcí
Interní nebo externí část (internal or external subset) nemusí být uvedena nebo mohou být uvedeny obě.
Externí identifikátor může být buď
PUBLIC
(hodí se pro "veřejná",
obecně uznané DTD) nebo"PUBLIC ID"
"URI"
SYSTEM
-
pro soukromá nebo jiná "ne zcela standardizovaná" DTD ("URI" nemusí
být jen URL na síti, může být i jméno souboru, vyhodnocení se děje
podle systému, na němž se vyhodnocuje)"URI"
Význam interní a externí části je rovnocenný (a nesmí si odporovat - např. dvě definice téhož elementu).
Obsahem DTD je seznam deklarací jednotlivých prvků - elementů, seznamů atributů, entit, notací
Popisuje možný obsah elementu, má formu <!ELEMENT
jméno-elementu ... >
,kde ...
může
být
EMPTY
- prázdný element, může být zobrazen
jako <element/>
nebo
<element></element>
- totéž
ANY
- povolen je libovolný obsah elementu,
tj. text, dceřinné elementy, ...
může obsahovat dceřinné
elementy - <!ELEMENT jméno-elementu
(specifikace dceřinných elementů)>
může být smíšený (MIXED) -
obsahující text i dceřinné elementy dané výčtem
<!ELEMENT jméno-elementu (#PCDATA | přípustné dceřinných
elementy)*>
. Nelze specifikovat pořadí nebo počet
výskytů konkrétních dceřinných elementů. Hvězdička za závorkou je
povinná - vždy je možný libovolný počet
výskytů.
Pro specifikaci dceřinných elementů používáme:
operátor sekvence
(sequence, follow with)
,
operátor volby (výběru,
select, choice) |
závorky ()
mají obvyklý význam
nelze kombinovat v jedné skupině různé operátory
,
|
počet výskytů dceřinného elementu omezujeme specifikátory "hvězdička", "otazník", "plus" s obvyklými významy. Bez specifikátoru znamená, že je povolen právě jeden výskyt.
Popisuje (datový) typ, případně implicitní hodnoty atributu u daného elementu.
Má tvar <!ATTLIST jméno-elementu jméno-atributu
typ-hodnoty implicitní-hodnota>
mohou být použity jen v rámci DTD
hodí se při např. deklaracích seznamu atributů (pokud je dlouhý a vícekrát použitý, nahradíme ho referencí na parametrickou entitu)
viz např. DTD pro HTML 4.01 - http://www.w3.org/TR/html4/sgml/dtd.html
definicí parametrické entity je např. <!ENTITY %
heading "H1|H2|H3|H4|H5|H6">
XML Base, W3C Recommendation 27 June 2001: http://www.w3.org/TR/xmlbase/
Standard pro vyhodnocování relativních URL v odkazech z/na XML dokumenty.
Definuje použití vyhrazeného atributu
xml:base
označujícího základ pro vyhodnocování
relativních URL.
Doplňuje se se standardem XLink.
Respektuje princip "překrývání" bázové adresy nastavené v nadřazeném elementu.
XML Namespaces (W3C Recommendation): http://www.w3.org/TR/REC-xml-names
Existuje také nové Namespaces in XML 1.1 W3C Recommendation 4th February 2004. Andrew Layman, Richard Tobin, Tim Bray, Dave Hollander
Definují "logické prostory" jmen (elementů, atributů) v XML dokumentu.
Dávají uzlům ve stromu XML dokumentu "třetí dimenzi".
Logickému prostoru jmen odpovídá jeden globálně ("celosvětově") jednoznačný identifikátor, daný URI (URI tvoří nadmnožinu URL).
NS odpovídající danému URI nemá nic společného s obsahem nacházejícím se případně na tomto URL ("nic se odnikud automaticky nestahuje" - nedochází k tzv. dereferenci danéhol URI).
V rámci dokumentů se místo těchto URL používají zkratky,
prefixy těchto NS namapované na příslušné URI
atributem xmlns:prefix="URI"
.
Jméno elementu či atributu obsahující dvojtečku se označuje jako kvalifikované jméno, QName.
Dva NS jsou stejné, jestliže se jejich URI shodují po znacích přesně (v kódování UNICODE).
NS neovlivňují význam textových uzlů.
Element/atribut nemusí patřit do žádného NS.
Deklarace prefixu NS nebo implicitního NS má platnost na všechny dceřinné uzly rekurentně, dokud není uvedena jiná deklarace "přemapující" daný prefix.
Jeden NS je tzv. implicitní
(default NS), deklarovaný atributem
xmlns=
Na atributy se implicitní NS nevztahuje!!!, čili atributy bez explicitního uvedení prefixu nejsou v žádném NS.
V následující ukázce je pro celý úryvek platný deklarovaný
implicitní jmenný prostor charakterizovaný URI (URL)
http://www.w3.org/1999/xhtml
V následující ukázce je deklarován a přiřazen prefixu
xhtml
jmenný prostor charakterizovaný URI (URL)
http://www.w3.org/1999/xhtml
XML Infoset 2nd Edition W3C Recommendation First published.og 24 October 2001, revised 4 February 2004, John Cowan, Richard Tobin, http://www.w3.org/TR/xml-infoset/
Infoset popisuje "jaké všechny informace lze o uzlu (elementu, dokumentu, atributu...) získat"
Jinými slovy: aplikace by neměla spoléhat na informace z XML dokumentu, které se po analýze (parsingu) neobjeví v Infosetu.
Každý správně utvořený XML dokument vyhovující standardu pro jmenné prostory má Infoset.
Canonical XML Version 1.0, W3C Recommendation 15 March 2001, http://www.w3.org/TR/xml-c14n
Smyslem je popsat kritéria (a algoritmy), které pomohou rozhodnout, zda jsou dva XML dokumenty ekvivalentní, lišící se pouze fyzickou reprezentací (entity, pořadí atributů, kódování znaků)
Kanonizace "setře" rozdíly mezi takovými dokumenty, k nimž se analyzátor "bude jistě chovat stejně", tj. z pohledu aplikace jsou totožné.
Použití kanonického tvaru je nutné např. u elektronického podpisu XML dat (při výpočtu hodnoty digest).
Bylo by možné nad XML dokumenty definovat i jiné relace ekvivalence než je Canonical XML.
Hlavní zásady konstrukce kanonického tvaru XML dokumentu:
kódování v UTF-8
zlomy řádků (CR, LF) jsou normalizovány podle algoritmu uvedeného v std. XML 1.0
hodnoty atributů jsou normalizovány
reference na znakové a parsované entity jsou nahrazeny jejich obsahem
CDATA sekce jsou nahrazeny jejich obsahem
hlavička "xml" a deklarace typu dokumentu jsou odstraněny
bílé znaky mimo kořenový element jsou normalizovány
jiné bílé znaky (vyjma normalizace zlomu řádků) jsou zachovány
hodnoty atributů jsou uvozeny "
speciální znaky v hodnotách atributů a textovém obsahu elementů jsou nahrazeny referencemi na entity
nadbytečné deklarace jmenných prostorů jsou z každého elementu odstraněny
implicitní hodnoty atributů jsou dodány do každého elementu (kde je to relevantní)
na pořadí atributů a deklarací jmenných prostorů se uplatní lexikografické řazení
Vycházejí ze starších SGML katalogů
Jde o prostředek, jak se jednotně odkazovat na entity (dokumenty) umístěné na různých systémech na různých místech.
Dovoluje také praktické použití identifikátorů URI typu PUBLIC, které neodkazují na žádnou reálnou lokaci na internetu.
Existuje několik formátů pro katalogy - bohužel.
Příklad 4. Katalog pro styly značkování DocBook Slides
<?xml version="1.0"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- Slides DTD locations -->
<group xml:base="schema/dtd/"
id="slides-dtd"
prefer="public">
<public
publicId="-//Norman Walsh//DTD Slides Custom V3.1.0//EN"
uri="slides-custom.dtd"/>
<public
publicId="-//Norman Walsh//DTD slides Full V3.1.0//EN"
uri="slides-full.dtd"/>
</group>
<rewriteURI
uriStartString="http://docbook.sourceforge.net/release/xsl/current/"
rewritePrefix="file:/c:/devel/docbook-xsl-1.62.4/"/>
<!-- Map web references to DocBook 4.2 DTD -->
<nextCatalog catalog="file:/c:/devel/docbook4.2/catalog.xml" />
</catalog>