Thomas J.S.: Gültigkeit von XML Struktur

Beitrag lesen

Hallo,

Och Leute, die DTD muss ich ja erst noch schreiben und genau da liegt ja das Problem, bzw. da ist es mir aufgefallen.

Also es sieht etwa so aus:

<!ELEMENT DatabaseTable (Name, Columns)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Columns (Column*)>
<!ELEMENT Column (Name, Type, MaxLength, IsNullable,
                  IsPrimaryKey, DefaultValue , Description)>

Frage ist halt nun, ob das Element "Name" in "Column" sich auf das darüber liegende "Name" beziehen kann.

Die Reihenfolge der Element-Deklarationen in der DTD spielt keine Rolle.
Also es ist egal wo du in der DTD die Deklaration für "Name" schreibst.

Einmal ist halt der Tabellenname gemeint, das andere mal der SPaltenname.

Das ist einer DTD auch egal ;-)

Und wenn es eben zwei Elemente "Name" in verschiedenem Kontext gibt, ob das dann gültig wäre, ist die Frage.

Oder wenn beide Element den gleichen Namen haben, aber unterschiedliche Kindelemente, beispielsweise so:

<!ELEMENT Name (#PCDATA)>
<!ELEMENT Name (Vorname, Nachname)>

Kann man das so notieren?

Nein kann man nicht.
Entweder hast du mixed-content, was dann nur in der Form:
<!ELEMENT Name (#PCDATA, Vorname, Nachname)*> möglich ist,
oder du definierst zwei verschiedene Name-Elemente oder du versuchst das Problem mit einem XML-Schmema zu lösen, wo du mehr Möglichkeiten als in der DTD hast.

-------
Wie notiere ich es in der DTD korrekt, wenn ein Element sowohl empty sein darf, aber auch Kind Elemente haben darf.

Ich brauche das zur Abbildung einer Verzeichnisstruktur.

Wenn ein Verzeichnis leer ist, ist es also EMPTY. Es kann aber auch Dateien enthalten.

<!ELEMENT dir (file | dir)*>

So kannst du indirekt sagen, dass das Element auch leer sein kann, denn du sagt, dass das Inhaltmodell des Elements (file oder dir) kein Mal oder beliebig oft vorkommen kann.

Es sind also viele kombinationen möglich:
<dir></dir>

<dir>
  <file />
  <dir></dir>
  <dir>
    <file />
  </dir>
  <file />
  <file />
  <dir>
     <file />
     <dir>
  </dir>
</dir>

<dir>
   <file />
   <file />
   <file />
   <file />
</dir>

<dir>
  <dir></dir>
  <dir></dir>
  <dir></dir>
</dir>

usw.
--------

Grüße
Thomas