Robert: DTD: extern + intern möglich?

Hallöle,

es gibt doch die zwei Möglichkeiten, im DOCTYPE-Element einerseits auf eine externe DTD zu verweisen und andererseits direkt die Angaben zu machen:

<!DOCTYPE root PUBLIC "MeineTolleDTD" "http://example.org/my.dtd">

oder

<!DOCTYPE root [ <!ELEMENT root (wasauchimmer) > ] > (oder so ähnlich von der Syntax her).

Frage:
Ist es auch möglich, beides zu kombinieren, um praktisch eine bestehende DTD um ein oder zwei Attribute zu ergänzen?

Also sowas:

<!DOCTYPE root PUBLIC "MeineTolleDTD" "http://example.org/my.dtd" [ <!ATTLIST root myattrib CDATA #IMPLIED> ]>

Ist das erlaubt?
Und ist es damit möglich, lokal Attribute für Elemente der nichtlokalen DTD zu ergänzen?

TIA,
Robert

  1. Hi Robert,

    Ist es auch möglich, beides zu kombinieren, um praktisch eine bestehende DTD um ein oder zwei Attribute zu ergänzen?

    Laut [XML10] ja:

    [28]      doctypedecl      ::=      '<!DOCTYPE' S Name  (S ExternalID)? S? ('[' (markupdecl | DeclSep)* ']' S?)? '>'

    Aber warum nutzt du nicht verschiedene Namensräume? [XML-NAMES]

    Gruß,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. Hi,

      Laut [XML10] ja:
      [28]      doctypedecl      ::=      '<!DOCTYPE' S Name  (S ExternalID)? S? ('[' (markupdecl | DeclSep)* ']' S?)? '>'

      Danke.
      Das zeigt, daß beides gleichzeitig benutzt werden kann.
      Aber leider sagt das nichts darüber aus, ob ich damit eine ATTLIST lokal zusätzlich zur externen ATTLIST (bei denselben Elementen) bauen darf.

      Aber warum nutzt du nicht verschiedene Namensräume? [XML-NAMES]

      Weil das hieße, daß haufenweise Software angepaßt werden müßte.

      Andere Frage (falls das mit 2 ATTLIST pro Element geht):

      Gibt es für den Element-Namen sowas wie einen Joker?
      Es soll allen Elementen ein bestimmtes Attribut zugefügt werden, ich hätte also gerne sowas wie

      <!ATTLIST (*) myattrib CDATA #IMPLIED>

      statt

      <!ATTLIST (bla|ble|bli|blo|blu) myattrib CDATA #IMPLIED>

      (da es sich um sehr viele Elemente handelt, wäre das wesentlich praktischer)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      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 wer denn nun?

        Gibt es für den Element-Namen sowas wie einen Joker?
        Es soll allen Elementen ein bestimmtes Attribut zugefügt werden, ich hätte also gerne sowas wie
        <!ATTLIST (*) myattrib CDATA #IMPLIED>
        statt
        <!ATTLIST (bla|ble|bli|blo|blu) myattrib CDATA #IMPLIED>

        Die Joker nennen sich Parameter-Entities. [XML10 §4]

        Die (X)HTML-DTDs verwenden sie zahlreich.

        Gruß,
        Gunnar

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        1. Hi,

          Hi wer denn nun?

          Ich. Mein Rechner wurde vom Nachbarn benutzt.

          Gibt es für den Element-Namen sowas wie einen Joker?
          Es soll allen Elementen ein bestimmtes Attribut zugefügt werden, ich hätte also gerne sowas wie
          <!ATTLIST (*) myattrib CDATA #IMPLIED>
          statt
          <!ATTLIST (bla|ble|bli|blo|blu) myattrib CDATA #IMPLIED>

          Die Joker nennen sich Parameter-Entities. [XML10 §4]

          Das nutzt aber nichts. Im Gegenteil.
          Statt nur die Elemente aufzulisten, müßte ich dann erst noch eine Parameter-Entity definieren mit der kompletten Auflistung, um sie dann genau einmal zu verwenden. Nicht sehr effektiv.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          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. Hallo Hacker, :-)

        Danke.
        Das zeigt, daß beides gleichzeitig benutzt werden kann.
        Aber leider sagt das nichts darüber aus, ob ich damit eine ATTLIST lokal zusätzlich zur externen ATTLIST (bei denselben Elementen) bauen darf.

        Darfst du.
        Du kannst für jedes Attribut ein eigenes <!ATTLIST> erstellen.
        Du kannst in der internen Teilmenge der DTD auch teile der externen Teilmenge überschreiben. Regel: die Angaben in der interne Teilmenge haben immer den Vorrang.

        Andere Frage (falls das mit 2 ATTLIST pro Element geht):

        Gibt es für den Element-Namen sowas wie einen Joker?

        Nein.

        Es soll allen Elementen ein bestimmtes Attribut zugefügt werden, ich hätte also gerne sowas wie

        <!ATTLIST (*) myattrib CDATA #IMPLIED>

        statt

        <!ATTLIST (bla|ble|bli|blo|blu) myattrib CDATA #IMPLIED>

        (da es sich um sehr viele Elemente handelt, wäre das wesentlich praktischer)

        Tja ... jetzt geht es entweder so, oder mit Überarbeitung der DTD:
        <!ENTITY % allg.attrib
        "  myattrib  CDATA  #IMPLIED
        ">

        <!ATTLIST element
          %allg.attrib;
           ...

        Wenn dann nochmal ein Attribut für alle Elemente kommen soll: einfach die  Parameterentity erweitern und so ist die Sache erledigt.

        Grüße
        Thomas

        --
        Surftip: kennen Sie schon Pipolino's Clowntheater?
        http://www.clowntheater-pipolino.net/
  2. Hi,

    Hallöle,

    Hi Robert,

    wenn Du schon meinen Rechner benutzt, log Dich doch bitte wieder aus - sprich: beende den Firefox.
    Ich hatte Dir doch extra mal Deinen heißgeliebten Opera installiert.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    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,

      Hi Robert,

      wenn Du schon meinen Rechner benutzt, log Dich doch bitte wieder aus - sprich: beende den Firefox.

      ja, die konsequente trennung zwischen zwei in einem kopf wohnenden persönlichkeiten ist nie eine leichte aufgabe ...

      scnr,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hi,

        Hi Robert,
        wenn Du schon meinen Rechner benutzt, log Dich doch bitte wieder aus - sprich: beende den Firefox.

        ja, die konsequente trennung zwischen zwei in einem kopf wohnenden persönlichkeiten ist nie eine leichte aufgabe ...

        Mein Nachbar (Robert) benutzt manchmal meinen Rechner, da er Probleme mit dem Internet-Zugang hat (sein Modem spinnt manchmal).

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  3. Hallo Robert,

    Frage:
    Ist es auch möglich, beides zu kombinieren, um praktisch eine bestehende DTD um ein oder zwei Attribute zu ergänzen?

    "If both the external and internal subsets are used, the internal subset MUST be considered to occur before the external subset. This has the effect that entity and attribute-list declarations in the internal subset take precedence over those in the external subset."
    Quelle: < http://www.w3.org/TR/REC-xml/#sec-prolog-dtd>

    Es ist also möglich, die in der DTD zu überschreiben. Wenn Du sie erweitern willst, musst Du aber Parameter-Entities verwenden.

    Zu dem Vorschlag mit den Namespaces:
    DTDs unterstüzen keine Namespaces, von daher artet es oft in gepfusche aus, wenn man Namespaces und DTDs gemeinsam verwendet. Das W3C stellt zwar für viele XML-Anwendungen auch DTDs zur verfügung, damit kann man dann aber auch Namespaces nicht wirklich vernünftig verwenden.
    Abgesehen davon beheben sie nicht das Problem, eine DTD zu erweitern.

    Grüße

    Daniel