XML DTD – atributy

    0

    Je to více než rok, kdy byl vydán článek o zápisu elementů v DTD pro XML. Pokusím se na tento článek plynule navázat dalším pokračováním, abyste měli ucelenou představu o tvorbě definice typu dokumentu pro vlastní varianty jazyků, odvozených od obecné normy XML.

    Deklarace atributů

    Každý element může obsahovat libovolné množství atributů. Atributy znáte i z HTML, např. tag <IMG> má atributy SRC, ALT, BORDER a jiné. Atributy slouží pro doplnění, resp. upřesnění informací o daném tagu. Například máme-li element KNIHA, tak jeho doplňující informací může být číslo knihy, tj. <KNIHA CISLO=“12″>. Atribut CISLO má samozřejmě význam pro strojové zpracování. Lze chápat jako „vnitřní“ číslo knihy v databázi.

    Deklarace atributů vypadá následovně:

    <!ATTLIST jméno_elementu deklarace_atributů>

    Nejprve je uvedeno klíčové slovo ATTLIST, které říká, že se bude deklarovat atribut. Za ním následuje jméno elementu, pro který definujeme atributy. Deklarace atributů je seznam trojic „jmeno typ hodnota“. Každý atribut má svoje pojmenování a dále se musí specifikovat, jakého typu je. Třetí argument nemusí být vždy uveden a určuje standardní hodnotu atributu. Na zápis jména atributu se vztahují podobná pravidla jako pro zápis jmen elementů.

    Typy atributů

    V XML můžeme použít několika typů:

    • CDATA – nejobecnější typ, atribut tohoto typu může nabývat hodnoty libovolného řetězce.
    • NMTOKEN – hodnotou může být řetězec složený pouze z písmen, číslic a podtržítka, nesmí obsahovat mezeru ani speciální znaky
    • NMTOKENS – totéž co NMTOKEN, může být obsaženo více slov oddělených mezerou.
    • ID – atribut musí mít jedinečnou hodnotu v rámci dokumentu
    • IDREF – musí odkazovat na již použitou hodnotu ID v rámci dokumentu
    • IDREFS – může obsahovat více odkazovaných ID oddělených mezerou

    Standardní hodnota atributu

    Posledním prvkem v deklaraci atributu je standardní hodnota. Zde může být uvedena např. implicitní hodnota, nebo výčet hodnot, kterých může atribut nabývat. Na závěr může být uvedeno jedno z uvedených klíčových slov:

    • #REQUIRED – je požadováno, aby hodnota atributu byla zadána
    • #IMPLIED – aplikace předpokládá implicitní nastavení prostředí (hodnota se pak vezme z prostředí)
    • #FIXED – hodnota je zafixována, tj. může nabývat právě této hodnoty a žádné jiné

    Příklady

    <!ATTLIST NADPIS
            ZAROVNANI (LEFT|RIGHT|CENTER|JUSTIFY) #REQUIED
            TEXT CDATA „Velký nadpis 1“
            PODTEXT #FIXED „podtržení“>
    <!ATTLIST CLANEK
            NADPIS CDATA #REQUIRED
            JAZYK (cs|en|fr|de|sp) „cs“ #REQUIRED
            POZNAMKA CDATA #IMPLIED>
    <!ATTLIST OBRAZEK
            ROZMERY NMTOKENS #REQUIRED>

    Použití definovaných tagů by mohlo vypadat následovně:

    <NADPIS ZAROVNANI=“RIGHT“ TEXT=“Aplikace XML“ PODTEXT=“podtržení“/>
    <CLANEK NADPIS=“DTD 2. část – atributy“ JAZYK=“cs“ POZNAMKA=““/>
    <OBRAZEK ROZMERY=“10cm 20cm“/>

    Několikanásobná deklarace

    V DTD lze, ale není to obecně doporučováno, deklarovat atributy daného elementu i vícekrát, nebo deklaraci rozdělit do několika deklarací. V každém případě, jednotlivé deklarace se kombinují dohromady a pokud se deklaroval jeden atribut vícekrát, bere se v úvahu první deklarace, jak je názorně vidět na následujícím příkladu:

    <!ATTLIST OSOBA
            JMENO CDATA
            PRIJMENI CDATA #REQUIRED
            POHLAVI (muz|zena) #REQUIED>
    <!ATTLIST OSOBA
            POHLAVI (male|female) #REQUIED
            RODNE_C CDATA #REQUIED>

    Element OSOBA má definovány celkem 4 atributy. Atribut POHLAVI byl deklarován dvakrát, v úvahu se bere první definice. Správné použití ukazuje následující příklad:

    <OSOBA JMENO=“Jan“ PRIJMENI=“Novák“ POHLAVI=“muz“ RODNE_C=“111111/1111″/>

    Společné atributy

    V DTD může někdy nastat situace, že budeme mít několik atributů (skupinu), která bude společná pro více elementů. Mějme následující příklad fragmentu DTD dokumentu:

    <ELEMENT osoba (jmeno, prijmeni)>
    <ELEMENT jmeno (#PCDATA)>
    <ELEMENT prijmeni (#PCDATA)>
    <!ATTLIST jmeno
            cz_text CDATA #REQUIRED
            en_text CDATA
            cz_zkratka CDATA
            en_zkratka CDATA>

    <!ATTLIST prijmeni
            cz_text CDATA #REQUIRED
            en_text CDATA
            cz_zkratka CDATA
            en_zkratka CDATA
            id ID #REQUIRED>

    V uvedené části DTD jsou dva elementy, které mají společné čtyři atributy, příjmení má navíc ještě atribut ID. Obecně bychom mohli mít DTD, kde by se takové části společných atributů opakovaly mnohem více, proto je někdy lepší použít jiného zápisu, pomocí tzv. parametrových entit. Jejich použití ukazuje následující příklad:

    <!ENTITY % moje_atributy
            „cz_text CDATA #REQUIRED
            en_text CDATA
            cz_zkratka CDATA
            en_zkratka CDATA“>

    <ELEMENT osoba (jmeno, prijmeni)>
    <ELEMENT jmeno (#PCDATA)>
    <ELEMENT prijmeni (#PCDATA)>
    <!ATTLIST jmeno %moje_atributy>
    <!ATTLIST prijmeni %moje_atributy;
            id ID #REQUIRED>

    Nejprve jsem pomocí ENTITY nadefinoval skupinu atributů, která je společná pro oba elementy a pak jsem tuto definici využil v deklaraci atributů. Z příkladu je patrná i syntaxe zápisu a použití parametrových entit.

    Na závěr ještě uvedu jednu důležitou poznámku. Při zápisu atributů záleží na velikosti písmen. Tzn. že „JMENO“ a „Jmeno“ jsou dva různé atributy.

    Žádný příspěvek v diskuzi

    Odpovědět