carsten schlichting: dtd eingebunden aber html nodes fehlen

hallo

habe mir folgende dtd runtergeladen

http://www.w3.org/People/cmsmcq/lib/xslt10.dtd

und als dtd in eine xsl datei eingebunden.

so hat man im eclipse xml editor gleich alle möglichen Sprachelemente mit der rechten Maustaste in der Hand.

nur Leider fehlt hier xhtml in der dtd? so dass html-elemente als Fehler gekennzeichnet werden.

weiß jemand noch von einer anderen dtd, die alles mit einschließt?

Es ist ja eigentlich gut, dass man mit xml nun daten und layout getrennt hat.
nur wäre es nun allerdings wieder schön, wenn man zu editierungszwecken beide seiten wieder irgendwie zusammenbringen könnte.

geht dies mit den namensräumen?

dass man quasi den xml-part und den xsl part zusammen in einer datei hat. könnte ich dieser datei auch irgendwie verschiedene dtds zuweisen.

zumindest kann man ja in der dtd für verschiedene namnesräume verschiedene regeln setzten ,also müße es ja eigentlich gehen.

weiß auch jemand gleich ob man in php aus so einer xml datei ein xhtml generieren könnte - gibt es da schon vorgefertigte Befehle, oder müßte ich die dateien erst mit den dom-Befehlen getrennt auslesen?.

grüße von mir

carsten

  1. Hallo,

    habe mir folgende dtd runtergeladen

    http://www.w3.org/People/cmsmcq/lib/xslt10.dtd

    und als dtd in eine xsl datei eingebunden.

    so hat man im eclipse xml editor gleich alle möglichen Sprachelemente mit der rechten Maustaste in der Hand.

    Eclipse für XML/XSLT zu verwenden ist, wie sich freiwillig in Brennnessel zu wälzen: am Anfang (vielleicht) der Kick, nachher langes Leiden.

    (OK, in MyEclipse sind dafür schon bessere Plugins vorhanden)

    nur Leider fehlt hier xhtml in der dtd? so dass html-elemente als Fehler gekennzeichnet werden.

    weiß jemand noch von einer anderen dtd, die alles mit einschließt?

    Nein, so eine DTD kann es auch nich geben, denn was ist "alles"? Man kann mit XSLT nicht nur HTML sondern zig andere (XML) Formate erzeugen. Es ist nicht möglich für alle mögliche Ausgabeformate die DTDs einzubinden.

    Es ist ja eigentlich gut, dass man mit xml nun daten und layout getrennt hat.
    nur wäre es nun allerdings wieder schön, wenn man zu editierungszwecken beide seiten wieder irgendwie zusammenbringen könnte.

    Nimm einen vernünftigen Editor für XML/XSLT.

    geht dies mit den namensräumen?

    Nein.

    dass man quasi den xml-part und den xsl part zusammen in einer datei hat. könnte ich dieser datei auch irgendwie verschiedene dtds zuweisen.

    Das geht schon gar nicht. Du kannst einem XML nur eine DTD zuweisen.

    zumindest kann man ja in der dtd für verschiedene namnesräume verschiedene regeln setzten ,also müße es ja eigentlich gehen.

    In der DTD kannst du für Namensräume gar keine Regel setzen.
    (bzw. sie nur fix vergeben/vorbelegen http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/)

    weiß auch jemand gleich ob man in php aus so einer xml datei ein xhtml generieren könnte - gibt es da schon vorgefertigte Befehle, oder müßte ich die dateien erst mit den dom-Befehlen getrennt auslesen?.

    Was meinst du mit "so einer xml datei"? Aus einer wo XML und XSLT in wildem Miteinander mit HTML föhlich eine Regen des Willkürs und der Unübersichtlichkeit tanzen?

    Grüße
    Thomas

    PS: ich habe jetzt deinen anderen Thread weiter unten (php) Teilweise gelesen. Ich habe das Gefühl, du bist jetzt auf der Suche nach der Eierlegendenwollmilchsau der Webentwicklung. Die gibt es aber nicht. Klar überlegt sich man, wenn man eine neue Technologie ebntdeckt, wie man diese für sich nutzen kann, aber das richtig zu überlegen, sollte man sich erst klarmachen, was man eigentlich erreichen will.

    1. Hallo und Danke für die Antwort

      Eclipse für XML/XSLT zu verwenden ist, wie sich freiwillig in Brennnessel zu wälzen: am Anfang (vielleicht) der Kick, nachher langes Leiden.

      (OK, in MyEclipse sind dafür schon bessere Plugins vorhanden)

      Nimm einen vernünftigen Editor für XML/XSLT.

      was meinstdu denn damit genau? warum der Kick und dann das Leiden?

      Und welchen Editor würdest du mir empfehlen?

      ich habe auch vor, XML und XSLT Daten mit PHP zusammen zufügen .

      Gibts da irgendwie gute tips die Sache möglichst übersichtlich behandeln zu können. Habe letztens was im php_manual gesehen - finde nur leider die Stelle nicht mehr -...ein Knoten wurde  mit folgenden Zeichen eingetragen
      <<<   node-code

      ....wäre super, wenn ich zum Thema XML Aufbereitung mit php irgendetwas finden könnte , was mir eine Richtung gibt.

      Nein, so eine DTD kann es auch nich geben, denn was ist "alles"? Man kann mit XSLT nicht nur HTML sondern zig andere (XML) Formate erzeugen. Es ist nicht möglich für alle mögliche Ausgabeformate die DTDs einzubinden.

      die eine DTD aus dem Link ist ja schon einmal gut für xsl und die ganzen elemente beziehen sich ja auf  nodes aus dem namespace xsl

      man müßte die DTD nur noch so verändern, dass auch beliebige nodes zulässig sind. Dies geht ja anscheinend mit ANY aber irgendwie scheint  ANY nur alleine_stehend zu funktionieren.??

      Was meinst du mit "so einer xml datei"? Aus einer wo XML und XSLT in wildem Miteinander mit HTML föhlich eine Regen des Willkürs und der Unübersichtlichkeit tanzen?

      man würde halt nach jedem einleitenden Tag für ein element auch noch das xsl stylesheet mitgeben

      so vielleicht ;-)

      Daten:basis

      <xsl:template match="?">
      </xsl:template>

      Daten:node
       <xsl:templa...
        </ xsl:templ...

      </ inhalt:basis>

      mit einem editor müßte man jetzt nur die einzelnen namespaces ausblenden können.

      allerdings wenn man in php die xml-dateien zusammensetzten würde, müßt eman natürlich auch auf einen editor verzichten. Vielleicht gibt es da ja bewährte Techniken.

      Allgemein könnte ich mir z.B. auch gut ein PHP - object vorstellen, das so eine xml_datei wieder in 2 getrennte schreiben könnte und diese dann als xhtml ausgibt.

      ???

      grüße carsten

      1. Hallo,

        Eclipse für XML/XSLT zu verwenden ist, wie sich freiwillig in Brennnessel zu wälzen: am Anfang (vielleicht) der Kick, nachher langes Leiden.

        (OK, in MyEclipse sind dafür schon bessere Plugins vorhanden)

        Nimm einen vernünftigen Editor für XML/XSLT.

        was meinstdu denn damit genau? warum der Kick und dann das Leiden?

        Der mächtigste Teil von XSLT sind die XPath-Ausrücke. Ein guter XSLT-Editor hat auch einen XPath-Parser. Das erleichter die Arbeit ungemein und hilft sehr viele Fehler von vornherein zu vermeiden.
        Bei einem Ausdruck wie z.B.
        match="subpage[not(@cmsused = 'no') and (publish = 'yes') and (number(concat(substring(/data/dateandtime/date,1,4),substring(/data/dateandtime/date,6,2),substring(/data/dateandtime/date,9,2))) &gt;= number(concat(substring(startdate,1,4),substring(startdate,6,2),substring(startdate,9,2))))]"

        oder

        href="Walker?source={sdml:getPathFromIndex($pagenode/id(@idref)/preceding-sibling::document[last()], $pagenode/id(@idref)/preceding-sibling::document[last()], '')}&amp;style={sdml:getXSLPage($pagenode/id(@idref)/preceding-sibling::document[last()]/@id)}"

        kann man schnell einen Fehler machen, nicht nur wenn man sich vertippt, sondern auch was den korrekten Inhaltstyp des Ausdrucks angeht.
        Hier hilft Eclipse gar nicht. Macht man einen Fehler wird das erst sichbar wenn man dein XML dann transformiert (und dann darf man in den serverlogs nachsehen, ob da eine gute Fehlermeldung steht)
        Ein Editor mit einem XPath-Parser zeigt aber schon hier Tippfehler und mögliche Typ-Unverträglichkeiten an.

        Und welchen Editor würdest du mir empfehlen?

        Es gibt viele, auch als freeware (aber wie genau das Feld jetzt dabei aussieht kann ich dir nicht sagen). Wenn du nur für dich ein wenig experimentierst, ist es vielleicht nicht wirklich nötig, dass du einen professionellen Editor kaufst. Aber wenn du das möchtest, kann ich dir Oxygen empfehlen. XMLSpy bot auch mal eine freie Version seines Editors an (und es gibt auch ein Plugin für die Intergration in Eclipse), allerdings bieten sie das nicht mehr an. Ev. ist das noch auf irgendeine PC-Zeitschift-CD zu finden.

        ich habe auch vor, XML und XSLT Daten mit PHP zusammen zufügen .

        Nö ;-) Du hast vor mit PHP XML/XSL-Transformation auszuführen ;-)

        Gibts da irgendwie gute tips die Sache möglichst übersichtlich behandeln zu können. Habe letztens was im php_manual gesehen - finde nur leider die Stelle nicht mehr -...ein Knoten wurde  mit folgenden Zeichen eingetragen
        <<<   node-code

        Als Ausgangspunkt empfehle ich dir: http://www.php.net/manual/en/ref.xsl.php und http://www.php.net/manual/en/ref.domxml.php

        Dann die Seiten der einzelnen Funktionen durchlesen und dabei vor allem die geposteten Beispiele. Da kannst du auch sehen wir XML- und auch XSL-Dateien erst als DOM (tree) geladen werden und dann erst die Transformation ausgeführt wird. (das nur wegen deiner Befürchtung von String)

        ....wäre super, wenn ich zum Thema XML Aufbereitung mit php irgendetwas finden könnte , was mir eine Richtung gibt.

        Nächste große Buchhandlung mit EDV-Abteilung aufsuchen und dort paar PHP-Bücher (oder XSL-Bücher) unter die Lupe nehmen? ;-)
        Was katuelles kann ich dir leider nicht empfehlen, da "meine" Bücher zum Thema sind noch auf PHP4 ausgerichtet.

        Nein, so eine DTD kann es auch nich geben, denn was ist "alles"? Man kann mit XSLT nicht nur HTML sondern zig andere (XML) Formate erzeugen. Es ist nicht möglich für alle mögliche Ausgabeformate die DTDs einzubinden.

        die eine DTD aus dem Link ist ja schon einmal gut für xsl und die ganzen elemente beziehen sich ja auf  nodes aus dem namespace xsl

        man müßte die DTD nur noch so verändern, dass auch beliebige nodes zulässig sind. Dies geht ja anscheinend mit ANY aber irgendwie scheint  ANY nur alleine_stehend zu funktionieren.??

        Ja, ANY kann nur alleine als Inhaltsmodell verwendet werden.
        Da ANY ja "irgendein XML-Element" bedeutet, kann der Parser ja nicht wissen, was darin erlaubt ist, oder nicht und deshalb kann es nicht so etwaswie (ANY, myElem, etc.) geben.

        Du kannst ja in die XSLT-DTD die HTML-DTD integrieren:

        <!ENTITY % html.dtd SYSTEM "html.dtd">
         %html.dtd;

        und dann die in der XSL-DTD bereist definierte Entities verwenden:

        <!ENTITY % result-elements "html">
        <!ENTITY % non-xsl-instructions "html">

        Aber wenn du dann z.B. nicht HTML sondern (XSL-)FO als ausgabe haben willst, muss du das austauschen. Und wenn du auch SVG erzeugen willst, auch. Und wenn du [setze was ein] erzeugen willst, auch.
        Oder es so machen:
        <!ENTITY % result-elements "(html | svg:svg | xsl:fo)*"> und so weiter.
        Und dann würdest du DTDs für SVG, XSL-FO etc. brauchen.

        Was meinst du mit "so einer xml datei"? Aus einer wo XML und XSLT in wildem Miteinander mit HTML föhlich eine Regen des Willkürs und der Unübersichtlichkeit tanzen?

        man würde halt nach jedem einleitenden Tag für ein element auch noch das xsl stylesheet mitgeben
        so vielleicht ;-)

        Daten:basis
        <xsl:template match="?">
        </xsl:template>

        Daten:node
        <xsl:templa...
          </ xsl:templ...

        </ inhalt:basis>

        Wäähhh! Iggit! ;-)

        allerdings wenn man in php die xml-dateien zusammensetzten würde, müßt eman natürlich auch auf einen editor verzichten. Vielleicht gibt es da ja bewährte Techniken.

        DOM z.B. Du kannst ja mit DOM Objekte erzeugen und diese dann manipulieren etc. und auch letzten als XML serialisieren (sprich als echtes XML ausliefern)

        Allgemein könnte ich mir z.B. auch gut ein PHP - object vorstellen, das so eine xml_datei wieder in 2 getrennte schreiben könnte und diese dann als xhtml ausgibt.

        Ich denke hier liegt noch immer ein Missverständnis deinersets vor. Verabschiede dich erstmal von dem Gedanken, dass XML ein "Object" sei.
        Nimm XML zunächst als das was es meistens ist: eine Datei.
        Wenn du aus dieser Datei erst ein DOM-Objekt erstellt hast, kann man von Objekt sprechen.

        <?php
        $domxml = domxml_open_file('test.xml',DOMXML_LOAD_VALIDATING,$error);
        ?>

        Oder domxml_open_mem() — erstellt ein DOM-Objekt eines XML-Dokuments.

        Dann kannst du mit diesen/m DOM-Objekt(en) arbeiten, ob du jetzt Knoten hinzufügst, sie entfernst oder anderwertig manipulierst.

        Natürlich kannst du dann in PHP Funktionen schreiben, die dir aus dem einen DOM-Objekt zwei erstellt und dann jeden für sich mit XSLT zu jeweils andere XHTML-Datei transformiert. Aber da muss du dir auch überlegen, dass z.B. an den Browser immer nur eine Datei zur selben Zeit gesendet werden kann, also wirs du die Ergebnisse der Transformationen auf die Platte schreiben müssen. etc. Oder eben umgekehrt, aus zwei DOM-Objekten eines erstellt und nur dieses transformiert.

        Da ist halt immer die Frage was und wozu du es brauchst.

        Grüße
        Thomas

        1. Hi

          also ersteinmal danke für die sehr Ausführliche Antwort!!

          habe etwas gebraucht um alles verarbeiten ;-)

          Der mächtigste Teil von XSLT sind die XPath-Ausrücke. Ein guter XSLT-Editor hat auch einen XPath-Parser. Das erleichter die Arbeit ungemein und hilft sehr viele Fehler von vornherein zu vermeiden.
          Bei einem Ausdruck wie z.B.
          match="subpage[not(@cmsused = 'no') and (publish = 'yes') and (number(concat(substring(/data/dateandtime/date,1,4),substring(/data/dateandtime/date,6,2),substring(/data/dateandtime/date,9,2))) &gt;= number(concat(substring(startdate,1,4),substring(startdate,6,2),substring(startdate,9,2))))]"

          oder

          href="Walker?source={sdml:getPathFromIndex($pagenode/id(@idref)/preceding-sibling::document[last()], $pagenode/id(@idref)/preceding-sibling::document[last()], '')}&amp;style={sdml:getXSLPage($pagenode/id(@idref)/preceding-sibling::document[last()]/@id)}"

          kann man schnell einen Fehler machen, nicht nur wenn man sich vertippt, sondern auch was den korrekten Inhaltstyp des Ausdrucks angeht.
          Hier hilft Eclipse gar nicht. Macht man einen Fehler wird das erst sichbar wenn man dein XML dann transformiert (und dann darf man in den serverlogs nachsehen, ob da eine gute Fehlermeldung steht)
          Ein Editor mit einem XPath-Parser zeigt aber schon hier Tippfehler und mögliche Typ-Unverträglichkeiten an.

          gibt es da auch nur XPath editoren, in die man so einen pfad einfach reinkopieren könnte.?

          Du kannst ja in die XSLT-DTD die HTML-DTD integrieren:

          <!ENTITY % html.dtd SYSTEM "html.dtd">
          %html.dtd;

          und dann die in der XSL-DTD bereist definierte Entities verwenden:

          <!ENTITY % result-elements "html">
          <!ENTITY % non-xsl-instructions "html">

          Aber wenn du dann z.B. nicht HTML sondern (XSL-)FO als ausgabe haben willst, muss du das austauschen. Und wenn du auch SVG erzeugen willst, auch. Und wenn du [setze was ein] erzeugen willst, auch.
          Oder es so machen:
          <!ENTITY % result-elements "(html | svg:svg | xsl:fo)*"> und so weiter.
          Und dann würdest du DTDs für SVG, XSL-FO etc. brauchen.

          Habe ich ausprobiert, aber es gab das Problem, dass man ja von jedem neuen Knoten aus wieder alle xsl-elemente  aufrufen können muß.

          habe aber in der datei den template-knoten als Vorbild genommen und muß nun alle elemente doch direkt in die dtd einfügen.  ich denke das ist eine gute übung. immer wenn ich ein Element brauche, werde ich es einfügen.

          Was meinst du mit "so einer xml datei"? Aus einer wo XML und XSLT in wildem Miteinander mit HTML föhlich eine Regen des Willkürs und der Unübersichtlichkeit tanzen?

          man würde halt nach jedem einleitenden Tag für ein element auch noch das xsl stylesheet mitgeben
          so vielleicht ;-)

          Daten:basis
          <xsl:template match="?">
          </xsl:template>

          Daten:node
          <xsl:templa...
            </ xsl:templ...

          </ inhalt:basis>

          Wäähhh! Iggit! ;-)

          findest du?  ;-)  zumindest wären die xml  -  xsl  Beziehungen ganz übersichtlich.
          ..habe da ja auch noch keine Erfahrung..
          vielleicht ,wenn das Layout sowieso aus einem rahmen-Layout besteht, in das dann weitere xml-xsl-dateien als Inhalt eingefügt werden,..vielleicht benötigt man diese übersichtlichkeit gar nicht so.

          wie ist das eigentlich wenn man apply-templates aufruft und es gibt kein weiters template ? : -> ist das ein Problem??  naja ich werde es ja herausfinden, wenn ich es ausprobiere.

          Natürlich kannst du dann in PHP Funktionen schreiben, die dir aus dem einen DOM-Objekt zwei erstellt und dann jeden für sich mit XSLT zu jeweils andere XHTML-Datei transformiert. Aber da muss du dir auch überlegen, dass z.B. an den Browser immer nur eine Datei zur selben Zeit gesendet werden kann, also wirs du die Ergebnisse der Transformationen auf die Platte schreiben müssen. etc. Oder eben umgekehrt, aus zwei DOM-Objekten eines erstellt und nur dieses transformiert.

          werde  wohl ersteinaml den xslt parser in php benutzen und der gibt ja nur eine xhtml datei aus .

          mal sehen ob ich dann jetzt meine erste xml xsl seite hinbekomme.;-)

          danke nocheinmal für die Tips

          grüße .. & ;_)

          carsten