Thomas J.S.: war: Zwei-Phasen-Transformation 2. Versuch -->die Antwort

Hallo,
jemand hat schon in zwei threads nachgefragt:

http://forum.de.selfhtml.org/archiv/2002/5/11560/ und
http://forum.de.selfhtml.org/archiv/2002/5/11589/

nachdem ich einen halben roman schon geschriben habe, meinte mein win98 sich (und den pc) einfach neu booten zu müssen. und jetzt hat auch noch der Archivscript zugeschlagen
ich werde jetzt nicht alles wiederholen was ich vorher geschrieben habe.

danke für die vielen Antworten, aber ich meine,

dass es besser gewesen wäre den thread unten fortzusetzen, damit alles zusammenbleibt um im archiv dann auch so von anderen gefunden werden kann?
ja, 'wir' lesen bis ganz nach unten im forum.

Ich möchte per XML Schnittstellen beschreiben und zwar sehr viele Schnittstellen. Jede Schnittstelle hat einen input und einen output, input und output wiederum besitzen felder.

was ist für dich eine schnittstelle? eine XML datei?

welche die Schnittstelle nutzen, die Schnittstellenbeschreibung in einem schön aufgemotzten HTML file mit jedem Browser abfragen können. (Irgendwann möchte ich die Transformation dann am Webserver machen)

wie machst du denn jetzt die transformation? klientseitig? dann kannst nicht mir jeden browser das machen und wenn du keine serverseitige transformation hast sind deine möglichkeiten auch etwas begrenzt.

Nun kommt dieses Feld "returncode" praktisch in jeder Schnittstelle vor

was ist für dich eine schnittstelle? eine XML datei?

und hat immer die gleichen Daten. Nun will ich diese Daten aber nicht bei jeder Schnittstelle angeben müssen. Denn sollte sich bei diesem Feld was ändern, müssten ich ja wieder alle Schnittstellen-XML-files angreifen.

schreibst du deine xml dateien selbst, oder werden sie automatisch erzeugt.

Mein erster Gedanke war, für dieses Feld einfach ein template zu erstellen, genau so, wie ihr mir es empfohlen habt:
Was mir dabei aber nicht gefällt ist, dass die HTML-Formatierung eines Feldes an mehreren Stellen im XSL file existiert (geht mal davon aus, dass es mehr solche "allgemeinen" Felder gibt)

es sind zwei versch. dinge eine html-formatierung an mehreren stellen zu haben: dazu kannst du versch. modi verwenden (das habe ich schon weiter unten gepostet), oder viele versch returncodes zu haben.

Daher würd ich gerne diese "allgemeinen Felder" vor der HTML-Transformation in die entspr. XML-Definition wandeln, also
<field name="returncode" />
soll zu
<field name="returncode" format="String(8)">
  <description>Ein 8stelliger Returncode</description>
</field>
werden.

wenn du viele solche returncodes hat: wocher soll dein xsl sheet wissen wann er format="String(8)" und wann er format="numeric" erzuegen soll?

hmmm ... bin ich eigentlich schon an die "zu spezifisch"-Grenze gestoßen? :)

nein, aber du gibst nach wie vor zu wenig informationen um zu nachvollziehen was du eigentlich machst (machen möchtest)

Also meine Frage, muss ich das selber programmieren (weil im Prinzip kommt das ja nur einem Suchen&Ersetzen-Algorithmus gleich), oder weiss jemand eine Möglichkeit, dass mit XSL zu realisieren?

xslt ist kein suchalgorhytmus und auch mit einem solchen kanns du nicht ein und das selbe ding (dein returncode) durch unterschiedliche dinge ersetzen.

möglichkeiten sind:
du lagerst deine returncode in eine eigene xml datei aus und grifst dann mit der document() funktion vom xslt auf die daten darin zu.
dann brauchst du dein komplettes xml nur einmal schreiben.

du kannst auch eine xml-->xslt-->xml-->xslt-->html weiterleitung machen aber das hängt sehr davon ab was du am server für die verarbeitung verwendest.

du kannst wie folgt versuchen:
------- die xml datei ---
<?xml version="1.0"?>
<?xml-stylesheet href="brunft.xsl" type="text/xsl"?>
<interface name="phytagoras">
  <input>
    <field name="a" format="numeric" mandatory="true">
      <description>Kathete</description>
    </field>
    <field name="b" format="numeric" mandatory="true">
      <description>Kathete</description>
    </field>
  </input>
    <output>
    <field name="c" format="numeric">
      <description>Hypotenuse</description>
    </field>
  </output>
</interface>
-----------
------ die xsl datei ----------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dings="dings.uri"
exclude-result-prefixes="dings">

<xsl:template match="/interface">
  <html><body>
  <xsl:apply-templates />

</body></html>
</xsl:template>
<xsl:template match="text()"></xsl:template>
<xsl:template match="input">
 <xsl:for-each select="field">
  <div style="border:solid 1px blue">
  <xsl:for-each select="@*"><p><xsl:value-of select="." /></p></xsl:for-each>
  <p><xsl:value-of select="description" /></p>
  </div>
 </xsl:for-each>
</xsl:template>

<xsl:template match="output">
 <xsl:for-each select="field">
  <div style="border:solid 1px red">
  <xsl:for-each select="@*"><p><xsl:value-of select="." /></p></xsl:for-each>
  <p><xsl:value-of select="description" /></p>
  </div>
 </xsl:for-each>
 <div style="border:solid 1px green">
  <p><xsl:value-of select="document('')/*/dings:field/@name"/></p>
  <p><xsl:value-of select="document('')/*/dings:field/@format"/></p>
  <p><xsl:value-of select="document('')/*/dings:field/dings:description"/></p>
 </div>
</xsl:template>

<dings:field name="returncode" format="dingsda">
      dings:descriptionwas auch immer</dings:description>
    </dings:field>

</xsl:stylesheet>

-------------
----- html von saxon -------
<html>
   <body>
      <div style="border:solid 1px blue">
         <p>a</p>
         <p>numeric</p>
         <p>true</p>
         <p>Kathete</p>
      </div>
      <div style="border:solid 1px blue">
         <p>b</p>
         <p>numeric</p>
         <p>true</p>
         <p>Kathete</p>
      </div>
      <div style="border:solid 1px red">
         <p>c</p>
         <p>numeric</p>
         <p>Hypotenuse</p>
      </div>
      <div style="border:solid 1px green">
         <p>returncode</p>
         <p>dingsda</p>
         <p>was auch immer</p>
      </div>
   </body>
</html>
-----------------

grüße
thomas

  1. hallo Thomas,

    also, ich würde wohl jeden Roman von dir lesen ...

    jemand hat schon in zwei threads nachgefragt:
    http://forum.de.selfhtml.org/archiv/2002/5/11560/

    der "existiert nicht"

    und http://forum.de.selfhtml.org/archiv/2002/5/11589/

    der existiert, aber da scheint mal was als Antwort vorhanden gewesen zu sein, worauf du jetzt Bezug nimmst. Vielleicht ist es noch zu frisch und wird nach Erledigung des nächsten Cronjobs auf dem Server doch wieder sichtbar sein.

    Schade, weil sich momentan ein Gesamtzusammenhang des Threads nicht mehr erschließt.

    Was du letzten Endes gemacht hast, war: du hast drei Dateien geschrieben, die das Zusammenspiel von XML, XSL und HTML verdeutlichen. Man müßte Stefan (bzw. dem Entwicklerteam) mal auf die Füße treten, damit  -  wie bereits seit längerem angekündigt  -  solche Beispiele in einer "Scriptsammlung" landen können und für vergleichbare Fragestellungen zitierbar werden bzw. von Leuten, die genau für solche Fragen Lösungen suchen, gefunden werden können, so daß man sich weitere Threads zu "diesem speziellen" Thema im Forum selbst sparen könnte.

    Grüße aus Berlin

    Christoph S.

    1. Man müßte Stefan (bzw. dem Entwicklerteam) mal auf die Füße treten,

      http://aktuell.de.selfhtml.org/people/devs.htm

    2. hallo Christoph,

      also, ich würde wohl jeden Roman von dir lesen ...

      no comment :-))

      jemand hat schon in zwei threads nachgefragt:
      http://forum.de.selfhtml.org/archiv/2002/5/11560/
      der "existiert nicht"

      noch nicht, aber ich habe auf das posting eigentlich geantwortet.

      und http://forum.de.selfhtml.org/archiv/2002/5/11589/
      der existiert, aber da scheint mal was als Antwort vorhanden gewesen zu sein,

      was ihm nicht geholfen hat, da er nochmal nachfragte.

      Schade, weil sich momentan ein Gesamtzusammenhang des Threads nicht mehr erschließt.

      tja... _das_ habe ich auch gesagt *g*

      Was du letzten Endes gemacht hast, war: du hast drei Dateien geschrieben, die das Zusammenspiel von XML, XSL und HTML verdeutlichen.

      na ja... wenn der frager diesen thread noch liest, wird er damit was anfangen können (hoffentlich).

      Man müßte Stefan (bzw. dem Entwicklerteam) mal auf die Füße treten,

      ... ich fühle mich als ob man mir auf die füße getreten wäre. ;-)

      grüße von der erde =:)
      thomas

      1. naja, Thomas,

        wenn der frager diesen thread noch liest, wird er damit was anfangen können (hoffentlich).

        Das Schöne am Forum hier ist ja, daß in der regel nicht nur der "Fragesteller" von einer Antwort was haben kann, sondern auch jemand andres. In diesem speziellen Fall: ich knabbere an Fragestellungen ähnlicher Art schon ne Weile herum, nur hat sich das bisher nicht zu einem posting auswachsen können, und siehe da: ich kreige eine Antwort geliefert, obwohl ich noch gar nicht gefragt hab

        ... ich fühle mich als ob man mir auf die füße getreten wäre. ;-)

        ich tu jetzt mal so, als ob ich ganz erstaunt bin, daß du dich so fühlst *g*

        grüße von der erde =:)

        och ...

        Grüße aus userland

        Christoph S.