Florian: Fehler in der DTD - Versthe ihn aber nicht.

Hallo!

Also, ich schreibe gerade an einem Programm, was seinen eigenen Filetype braucht, nungut, hab ich mir gedahct nehm ich xml, dann kann ich auch gleich schöne exports daraus machen.
Nun wollte ich heute eine DTD dazu verfassen.
Habe ich auch gemacht, dazu habe ich mri erstmal eine Beispieldatei geschrieben, wie sie später aussehen könnte (Also, die xml file) und dann eine DTD verfasst, welche ich nun mit dem w3c validator überprüfen wollte.
Dieser bringt mir jetzt zum 1en immer den fehler, dass </person> kommt, bevor es beendet ist (Also, da darin wohl etwas fehlen wird, ich nehme an das er damit das <image> tag meint, welches ich in der DTD aber mit image? angegeben hab, das fragezeichen bedeutet doch, dass es nicht zwingend enthalten sien muss!?
Und der 2te, das innerhalb von <person> und </person> die ganzen tags <name><address> und co. nicht enhalten sein dürften, obwohl ich dies doch in der dtd mit folgendem erlaubt habe:
<!ELEMENT person (name, address, phone, mobile, dob, division, teaching, hobbys, notes, image?)>

Ich habe die entsprechende sample datei inklusive DTD einmal hochgeladen:
o http://s01.mcb.cc/TeamOrga.xml
Hier auch gleich der link zum w3c validator:
o http://validator.w3.org/check?uri=http%3A%2F%2Fs01.mcb.cc%2FTeamOrga.xml

Wäre sehr gut wenn irh mir helfen könntet, ich bin mir sicher der ein oder andere hier kennt sich damit aus ;-)

Vielen dank im vorraus, Florian

  1. Hi,

    Hier auch gleich der link zum w3c validator:

    Das ist kein Link, sondern eine URL. Siehe </faq/#Q-19>, um Links zu erzeugen.

    http://validator.w3.org/check?uri=http%3A%2F%2Fs01.mcb.cc%2FTeamOrga.xml

    69:   <!ELEMENT person (name, address, phone, mobile, dob, division, teaching, hobbys, notes, image?)>

    Hier legst Du fest, daß person folgende Elemente in der genannten Reihenfolge enthalten soll:
    name, address, phone, mobile, dob, division, teaching, hobbys, notes, image?

    149:    <person>
    150:     <name>Maik Peters</name>
    151:     <dob>02.05.1984</dob>

    dob kommt hier vor address - obwohl es laut DTD erst nach address und phone und mobile kommen dürfte.

    152:     <address>Kawutschkoweg 9, 64982 Hanne</address>

    153:     <notes>Ist n Dorftrottel..</notes>

    Auch hier - falsche Stelle

    154:     <room>226</room>

    Dieses Teil ist gar nicht erlaubt.

    155:     <classes>2BFE21, 2FTE1</classes>

    Dieses auch nicht.

    156:    </person>

    Das end-Tag wird hier angemeckert, weil nicht alle erforderlichen subelemente vorhanden sind, es fehlt z.B. hobbys

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi!
      Danke, jetzt funktioniert es:
      http://validator.w3.org/check?uri=http%3A%2F%2Fs01.mcb.cc%2FTeamOrga.xml

      Aber 2 Fragen habe ich da dann doch noch..

      1. Wie kann ich den machen, das die reihnfolge beliebig ist?
           o <!ELEMENT person (name, address, phone, mobile, dob, division, teaching, hobbys, notes, image?)>
           Scheint diese ja fest vorzugeben.

      2. Die final DTD
           o Wenn ich die DTD dann auslagern will, kann ich das <!DOCTYPE in der dtd weglassen? - Denke mal Ja, so wie ichs verstanden habe.
           o Wie gebe ich den namen der DTD am besten an?
             Ich hab zb einmal gesehen, das jemand eine DTD für FML (FluffyMarkupLanguage) gemacht hat, wo dann beim Valiaotr tatsächlich stand
             "This page is valid FluffyMarkupLanguage 1.0"
             Wie macht man das? Wenns überhaupt noch geht^^

      Wie immer nochmal Danke und Danke im Vorraus,
      Florian

      1. Hi,

        1. Wie kann ich den machen, das die reihnfolge beliebig ist?

        Warum willst Du das?
        Es widerspricht meiner Meinung nach einem ordentlich strukturiertem Dokument, wenn solche Daten in beliebiger Reihenfolge vorliegen.

        o <!ELEMENT person (name, address, phone, mobile, dob, division, teaching, hobbys, notes, image?)>
           Scheint diese ja fest vorzugeben.

        Es scheint nicht so, es ist so.

        Wenn Du es unbedingt in beliebiger Reihenfolge brauchst - soweit ich weiß, gibt es in einer DTD keine andere Möglichkeit als alternativ alle möglichen Reihenfolgen anzugeben, also

        <!ELEMENT person (name, address, phone, mobile, dob, division, teaching, hobbys, notes, image?)
                         | (address, name, phone, mobile, dob, division, teaching, hobbys, notes, image?)
                         | (address, phone, name, mobile, dob, division, teaching, hobbys, notes, image?)
                         | ...

        Für 10 Subelemente gibt es nur 10! = 3628800 mögliche Reihenfolgen, viel Spaß beim Auflisten ;-)

        (mit einem XSchema geht es - wenn ich mich richtig erinnere - etwas weniger aufwendig)

        o Wenn ich die DTD dann auslagern will, kann ich das <!DOCTYPE in der dtd weglassen? - Denke mal Ja, so wie ichs verstanden habe.

        Das <!DOCTYPE ...> gehört ins Dokument und gibt dort u.a. an, wo die DTD zu finden ist.

        o Wie gebe ich den namen der DTD am besten an?
             Ich hab zb einmal gesehen, das jemand eine DTD für FML (FluffyMarkupLanguage) gemacht hat, wo dann beim Valiaotr tatsächlich stand
             "This page is valid FluffyMarkupLanguage 1.0"

        Das wird dem public identifier des DOCTYPE elements entnommen.

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Ok, dann lasse ich die Reihnfolge jetzt so..

          Hab jetzt mal veruscht die dtd auszulagern.
          Aber jetzt bekomm ich wieder 3 Neue Fehler vom Validator :-/
          Hier die Links:
          Der Validator: http://validator.w3.org/check?uri=http%3A%2F%2Fs01.mcb.cc%2Fteamorga.xml&charset=(detect+automatically)&doctype=(detect+automatically)
          Die DTD: http://s01.mcb.cc/TeamOrgaXML-1-0.dtd
          Das Sample XML: http://s01.mcb.cc/teamorga.xml

          Also, das erste ist jetzt das er <team> nicht mehr kennen will,
          und das 2te das <name> nicht deklariert währe, aber ging ja davor,
          wo es die DTD im Head des Dokumentes selber war, daurm bin ich mal wieder rahtlos :-/

          1. Hi,

            http://validator.w3.org/check?uri=http%3A%2F%2Fs01.mcb.cc%2Fteamorga.xml&charset=(detect+automatically)&doctype=(detect+automatically)

            Die DTD: http://s01.mcb.cc/TeamOrgaXML-1-0.dtd
            Das Sample XML: http://s01.mcb.cc/teamorga.xml

            <!DOCTYPE TeamOrgaXML SYSTEM "http://s01.mcb.cc/TeamOrgaXML-1-0.dtd">
            <team>

            Du hast einen Doctype für TeamOrgaXML angegeben - aber Dein toplevel-Element ist kein TeamOrgaXML Element, sondern ein team Element.

            In der DTD ist auch kein TeamOrgaXML-Element definiert.

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.Mud-Guard.de/
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hi,

    <!ELEMENT person (name, address, phone, mobile, dob, division, teaching, hobbys, notes, image?)>

    Wenn Du auf Validität achtest, dann verwende doch auch den linguistisch korrekten Plural "hobbies" - statt des falschen und IMHO nur im Deutschen so gebräuchlichen "Hobbys"... ;)

    Viele Grüße,
    Bubax