Komplexe Elementtyp-Deklaration

18.01.2017 11:31 Uhr

Erweiterte Content Model- Deklaration

Um eine bewusste Auswahl zwischen zwei oder mehreren nichtterminalen Elementen in der Content Model- Deklaration zu geben, nutzt man den „logischen Oder Operator“ |. Dadurch kann jeweils nur ein nichtterminales Unterelement in dem übergeordneten Element enthalten sein. Der Inhalt eines Elements mit dem Content Model (A|B) muß demnach dem Content Model A oder dem Content Model B entsprechen:

DTD

<!ELEMENT kosten (warmiete | kaltmiete)>

XML

<kosten>
<warmiete>...</warmiete>
</kosten>

oder

<kosten>
<kaltmiete>...</kaltmiete>
</kosten>

Die Auswahl zwischen zwei oder mehreren Elementen innerhalb der Content Model- Deklaration kann zusätzlich durch Klammern umschlossen werden, sodass einzelne Model Groups entstehen, die eine jeweilige Ausprägung des Content Models definieren:

DTD

<!ELEMENT adresse (email | (strasse, plz, ort))>

XML

<adresse>
<email>...</email>
</adresse>

oder

<adresse>
<strasse>...</strasse>
<plz>...</plz>
<ort>...</ort>
</adresse>

Dadurch können weitaus komplexere Content Models erstellt werden:

DTD

<!ELEMENT e ((v|(x,y)|(p*,z)), (w|(x?,t)|(y?,u)), r)>

XML

<e>
<p>...</p>
<p>...</p>
<p>...</p>
<z>...</z>
<t>...</t>
<r>...</r>
</e>

Mixed Content

Bei Content Model- Deklarationen muss nicht immer strigent zwischen Nichtterminalen und Terminalsymbolen (wie PCDATA) entschieden werden. In der bisherigen Notation wurden beide immer getrennt behandelt.

Ausgangstext

3 cl Tequila

DTD

<!ELEMENT zutat (zutatsname , menge , einheit)>
<!ELEMENT zutatsname (#PCDATA)>
<!ELEMENT menge (#PCDATA)>
<!ELEMENT einheit (#PCDATA)>

XML

<zutat>
<zutatsname>Tequila</zutatsname>
<menge>3</menge>
<einheit>cl</einheit>
</zutat>

Um Redundanzen innerhalb der Strukturen vorzubeugen ist eine Vermischung beider Elemente durch den Mixed Content möglich. Der Mixed Content kann Terminalsymbole mit Nichtterminalen verknüpfen und somit beide Typen gleichzeitig innerhalb eines Elementes ermöglichen.

DTD

<!ELEMENT zutat (#PCDATA | menge | einheit)*>
<!ELEMENT menge (#PCDATA)>
<!ELEMENT einheit (#PCDATA)>

XML

<zutat>Tequila <menge>3</menge> <einheit>cl</einheit></zutat>

Das Terminal #PCDATA darf ausschließlich als erstes Symbol in einer Auswahl mit beliebig vielen weiteren Nichtterminalen verwendet werden. Dem Modell muß schließlich der Häufigkeitsoperator * hinzugefügt werden, um die wiederholte Einbindung von Elementen des aufgeführten Typs bzw. der Textdaten zu ermöglichen.

vorherige Folie / nächste Folie

Schlagwörter: