XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   (X)HTML (http://xhtmlforum.de/forumdisplay.php?f=72)
-   -   XHTML erweitern (http://xhtmlforum.de/showthread.php?t=59286)

.rhavin 24.11.2009 23:21

XHTML erweitern
 
Ich finde keine Lösung für folgendes Problem und bin auf dieses Forum gestoßen (Hallo ;)) ... evtl. hat ja einer 'ne Idee.

Problem:
Ich möchte eine DTD erweitern, indem ich einem bereits definierten Element (in diesem Fall den gemischten inline/block-Elementen aus der xhtml11.dtd zusätzliche erlaubte Elemente hinzufüge - in diesem Fall ein "qsel-Element":
HTML-Code:

<p> <qsel id="a50" val="50" opt="0:2-4" /> </p>
Ich dachte, ich könne das ungefähr so machen:
HTML-Code:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE html [
        <!ENTITY % stdxhtmlDTD PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


        %stdxhtmlDTD;

        <!ELEMENT qsel EMPTY>

        <!ATTLIST qsel
                id        ID #IMPLIED
                val        NMTOKEN "0"
                opt        CDATA #IMPLIED
        >


        <!ENTITY % Misc.class "ins | del | script | noscript | qsel" >
]>

<html><head>
        <title>test</title>
</head><body>
        <p> <qsel id="a50" val="50" opt="0:2-4" /> </p>
</body></html>

Zumindest wird das hier so angedeutet; aber leider wird das so nix, der Validator sagt dies:

Zitat:

http://validator.w3.org/images/info_icons/error.pngLine 24, Column 43: document type does not allow element "qsel" here

<p> <qsel id="a50" val="50" opt="0:2-4" /> </p>

The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).

One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).
Da einer der Hauptvorteile von XML seine Erweiterbarkeit ist, hatte ich gehofft, ich kann in XHTML etwas ähnliches erreichen, aber derzeit weiß ich nicht, wie. Hat einer 'ne Idee? Ich möchte nicht die gesammte xhtml11.dtd als editierte Version auf den Server schmeißen, sondern suche eine Möglichkeit, diese gezielt zu erweitern...

Pascolo 25.11.2009 10:54

Dann versuch es einmal folgendermassen:

HTML-Code:

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" [
   
    <!ELEMENT qsel EMPTY>

   
    <!ATTLIST qsel
      id  ID      #IMPLIED
      val  NMTOKEN  "0"
      opt  CDATA    #IMPLIED
    >

   
    <!ENTITY % misc.inline "qsel">
    <!ENTITY % misc.class "qsel">
  ]
>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
  <head>
    <title>Mein neues Attribut</title>
  </head>
  <body>
    <p>
      <qsel id="a50" val="50" opt="0:2-4" />
    </p>
  </body>
</html>

Unter XHTML 1.1 konnte ich deinen Fehler reproduzieren, weshalb ich auch auf XHTML 1.0 Strict ausgewichen bin. Da ich gleich ausser Haus muss, kann ich dir momentan auch nicht mehr weiterhelfen. Vielleicht kann dir hier in der Zwischenzeit noch ein anderer eine Lösung anbieten.

Weshalb stellst du deine Frage in verschiedenen Foren?

Nachtrag:

Versuch doch noch einmal, dein neues Element zu einem "inline" Element zu machen, da es ansonsten in einem Absatz nichts zu suchen hat. Wie das geht, siehst du in meinem Beispiel.

.rhavin 25.11.2009 11:48

Hi Pascolo, danke für Deine Antwort. Hab mir bis eben die XHTML-MOD Spezifikationen durchgelesen und bin nun drauf gekommen: In der oben verlinkten Anleitung war nicht wirklich ersichtlich, daß Misc.extra-Erweiterung mit einem '|' beginnen muß, was - wenn man es denn weiß - im Nachhinein auch logisch ist, sie wird schließlich an die in der XHTML-DTD definierten Elemente angehängt (wobei das W3C ja auch sowas wie ein 'wenn Misc.extra definiert ist, dann mache daraus "| Misc.extra" ' hätte einfügen können).

Wenn man das weiß, gibt's auch keine Fehlermeldung mehr, wenn man Misc.extra *vor* der DTD definiert (wo es ja - auch logisch ;)!) hingehört, damit es *in* der DTD benutzt werden kann.

Die funktionierende Lösung sieht also so aus:

HTML-Code:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE html [
        <!ENTITY % stdxhtmlDTD PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


<!-- first we define the new elements insert-position -->
<!ENTITY % Misc.extra "| qsel" >

<!-- then we insert the DTD -->
%stdxhtmlDTD;

<!-- now we may tell the world about our new element -->
<!ELEMENT qsel EMPTY>
<!ATTLIST qsel
        id        ID #IMPLIED
        val        NMTOKEN "0"
        opt        CDATA #IMPLIED
>


]>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" ><head>
        <title>test</title>
</head><body>

        <p> <qsel id="a50" val="50" opt="0:2-4" /> </p>
</body></html>

Zitat:

Zitat von Pascolo
Weshalb stellst du deine Frage in verschiedenen Foren?

Um die Wahrscheinlichkeit zu erhöhen, daß es jmd. beantwortet?

Pascolo 26.11.2009 15:45

Problem gelöst
 
Vielen Dank für diesen Hinweis. Somit wäre dein Problem gelöst und ich hab wieder etwas Neues gelernt. :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:57 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023