sco0ter: Gültigkeit von XML Struktur

Hi,

habe eine kleine Frage zum Aufbau eines gültigen XML Dokuments:

Kann ein Element mit dem GLEICHEN Namen öfters in verschiedenem Kontext bzw. verschiedenen Kind/Elternelementen genutzt werden?

Also ich möchte eine Datenbanktabelle beschreiben. Den Namen der Tabelle beschreibe ich mit dem Element <name>...</name>.

Jede Spalte der Tabelle enthält (bisher) jedoch auch das Element <name>

Ist das gültig?

Also es sieht etwa so aus:

<databasetable>
 <name>Beispiel</name>
 <columns>
  <column>
   <name>Test</name>
   <type>varchar</type>
  ...

Hier ist zwar der Inhalt noch gleich, nämlich string bzw. #PCDATA, aber mal angenommen, man hätte noch weitere Kindelemente in einem der beiden <name> elemente.
Dann gäb es doch Probleme, bei der DTD.

Also ist das oben valide?

MfG!

  1. Hello out there!

    Kann ein Element mit dem GLEICHEN Namen öfters in verschiedenem Kontext bzw. verschiedenen Kind/Elternelementen genutzt werden?

    Ja. Aber ob das auch sinnvoll ist?

    Hier ist zwar der Inhalt noch gleich, nämlich string bzw. #PCDATA, aber mal angenommen, man hätte noch weitere Kindelemente in einem der beiden <name> elemente.

    Dann darfst du die auch in allen anderen Elementen des Elementtyps 'name' haben.

    Dann gäb es doch Probleme, bei der DTD.

    In der DTD kannst du nicht sagen, dass 'name' ein Kindelement 'foo' haben darf, wenn es selbst Kind von 'databasetable' ist; und ein Kindelement 'bar', wenn es selbst Kind von 'column' ist.

    Also ist das oben valide?

    Nein. Ohne Angabe einer DTD kann es das nicht sein.

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  2. Hallo,

    habe eine kleine Frage zum Aufbau eines gültigen XML Dokuments:

    Kann ein Element mit dem GLEICHEN Namen öfters in verschiedenem Kontext bzw. verschiedenen Kind/Elternelementen genutzt werden?

    Natürlich.

    Also ich möchte eine Datenbanktabelle beschreiben. Den Namen der Tabelle beschreibe ich mit dem Element <name>...</name>.

    Jede Spalte der Tabelle enthält (bisher) jedoch auch das Element <name>

    Ist das gültig?

    Das kann dir niemand sagen, wenn du die DTD oder Schema dazu nicht bekanntgibst.

    Also es sieht etwa so aus:

    <databasetable>
    <name>Beispiel</name>
    <columns>
      <column>
       <name>Test</name>
       <type>varchar</type>
      ...

    Hier ist zwar der Inhalt noch gleich, nämlich string bzw. #PCDATA, aber mal angenommen, man hätte noch weitere Kindelemente in einem der beiden <name> elemente.
    Dann gäb es doch Probleme, bei der DTD.

    Also ist das oben valide?

    Das kann dir niemand sagen, wenn du die DTD oder Schema dazu nicht bekanntgibst.

    Grüße
    Thomas

    1. 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.
      Einmal ist halt der Tabellenname gemeint, das andere mal der SPaltenname.

      Für Type, Maxlength, usw, fehlt da jetzt noch die DTD, aber das ist alles #PCDATA und hier nicht weiter wichtig.

      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?

      Es ist ja dann nicht mehr eindeutig, wenn ich dann schreibe:

      <!ELEMENT DatabaseTable (Name, Columns)>

      da man nicht weiß, auf was sich das "Name" nun bezieht. Oder ist das dann egal und es ist beides gültig?

      MfG!

      Hallo,

      habe eine kleine Frage zum Aufbau eines gültigen XML Dokuments:

      Kann ein Element mit dem GLEICHEN Namen öfters in verschiedenem Kontext bzw. verschiedenen Kind/Elternelementen genutzt werden?

      Natürlich.

      Also ich möchte eine Datenbanktabelle beschreiben. Den Namen der Tabelle beschreibe ich mit dem Element <name>...</name>.

      Jede Spalte der Tabelle enthält (bisher) jedoch auch das Element <name>

      Ist das gültig?

      Das kann dir niemand sagen, wenn du die DTD oder Schema dazu nicht bekanntgibst.

      Also es sieht etwa so aus:

      <databasetable>
      <name>Beispiel</name>
      <columns>
        <column>
         <name>Test</name>
         <type>varchar</type>
        ...

      Hier ist zwar der Inhalt noch gleich, nämlich string bzw. #PCDATA, aber mal angenommen, man hätte noch weitere Kindelemente in einem der beiden <name> elemente.
      Dann gäb es doch Probleme, bei der DTD.

      Also ist das oben valide?

      Das kann dir niemand sagen, wenn du die DTD oder Schema dazu nicht bekanntgibst.

      Grüße
      Thomas

      1. 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

        1. Ah danke!

          also kann ich das so lassen:

          <!ELEMENT Name (#PCDATA)>

          auch wenn inhaltlich gesehen, verschiedene Sachen gemeint sind.

          Und das hier wäre also undenkbar:

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

          ??

          Hab das ganze mit prgrammatisch erzeugt mit Methoden wir WriteStartElement und WriteEndElement, und wenn wohl nichts dazwischen ist, dann schreibt er autormatisch <dir /> statt <dir></dir>.

          MfG!

          1. Hallo,

            Und das hier wäre also undenkbar:

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

            ??

            Natürlich ist das denkbar, ich habe nur statt <dir /> eben <dir></dir> geschrieben.

            Hab das ganze mit prgrammatisch erzeugt mit Methoden wir WriteStartElement und WriteEndElement, und wenn wohl nichts dazwischen ist, dann schreibt er autormatisch <dir /> statt <dir></dir>.

            Das macht keinen Unterschied.

            Grüße
            Thomas

  3. Hi,

    hab noch einen kleinen Nachtrag.

    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.

    Also es sieht so aus:

    <dir id="leeresverzeichnis" />
    <dir id="vollesverzeichnis">
     <file id="beispiel.php" />
    </dir>

    ...

    Meine DTD Notation zum dir element sieht so aus:

    <!ELEMENT dir (EMPTY|file*|dir*)>

    Bin nur überfragt ob das so richtig notiert ist.

    MfG!

    1. Hello out there!

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

      <!ELEMENT dir (file|dir)*>
      Der Stern heißt ja: beliebig viele (auch gar keins).

      Du erkennst auch den Unterschied zu
      <!ELEMENT dir (file*|dir*)>
      ? Das hieße nämlich was anderes.

      See ya up the road,
      Gunnar

      --
      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
      1. Hallo,

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

        <!ELEMENT dir (file|dir)*>
        Der Stern heißt ja: beliebig viele (auch gar keins).

        Mich dünkt, ich hätte das schon gesagt: https://forum.selfhtml.org/?t=133020&m=861393 ...

        Grüße
        Thomas