Sabrina21: XSLT Roter Faden gesucht

Hallo zusammen,
ich habe eine für mich etwas knifflige Aufgabe, bei der ich auf Eure Hilfe angewiesen bin.

Aufgabe: Mein Ziel ist es ein XML-Modell (u.a.SVG-Grafik) mithilfe eines XSLT Transformationscodes in X3D zu transformieren. Ich habe dazu schon reichlich Tutorials gewälzt und habe auch schon einen Ansatz, bzw.
Hier ist der Code, den ich in XSLT erstellt habe:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output media-type="model/x3d=xml" doctype-system="http://www.web3d.org/specifications/x3d-3.2.dtd" method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
</xsl:stylesheet>

<xsl:template match="/">

</xsl:template>

</xsl:stylesheet>

Dieser Code ist natürlich unvollständig, er soll nur veranschauhlichen, wie ich mir die Lösung vorstelle, aber irgendwie will der Groschen nicht fallen, also ich verfüge über ein XML-Modell (eine SVG-Grafik), eine zu diesem Modell gehörende DTD, sowie über die obige XSLT-Stylesheetdatei, aber wie gelingt mir jetzt die eigentliche Transformation?
Was muss ich von der Logik her im Templatebereich, bzw. zwischen:

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

einfügen, bzw. was habe ich evtl. komplett übersehen? Ich kenne zahlreiche Beispiele für die Transformation von XML in HTML usw. aber ich habe nirgends Fälle finden können, in denen via XSLT in X3D transformiert wird, daher wäre ich für jeden Impuls sehr dankbar.

Für Eure Mühe im voraus vielen Dank Sabrina.

  1. @@Sabrina21:

    ich habe eine für mich etwas knifflige Aufgabe, bei der ich auf Eure Hilfe angewiesen bin.

    Aber unsere Aufgabe kann es nicht sein, herauszufinden, wie du eine 2D-Grafik in ein 3D-Modell umsetzen willst.

    Wie sieht deine SVG-Quelle aus, wie soll das X3D aussehen?

    <xsl:output media-type="model/x3d=xml"


    Da sollte wohl ein '+' stehen.

    Live long and prosper,
    Gunnar

    --
    Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
    1. Hallo Gunnar,
      auch Dir nochmal lieben Dank für Deine Mühe,
      meine Eingangsfrage war tatsächlich etwas läpsch gestellt, es ging nicht darum, euch um eine Lösung zu bitten für die Transformation einer SVG-Grafik in ein X3D-Dokument, tatsächlich war es mehr eine konzeptuelle Frage, bzw. ob dieser Ansatz überhaupt korrekt ist.

      Nun habe ich ja eine XSL-Stylesheetdatei (siehe Antwort an Thomas) die also das XML Dokument in ein X3D Dokument umwandeln soll, das war übrigens das eigentliche Problem, das mit der SVG-Grafik war nur ein zugegebener Maßen zu spontaner Ansatz.

      Greetz
      Sabrina

      @@Sabrina21:

      ich habe eine für mich etwas knifflige Aufgabe, bei der ich auf Eure Hilfe angewiesen bin.

      Aber unsere Aufgabe kann es nicht sein, herauszufinden, wie du eine 2D-Grafik in ein 3D-Modell umsetzen willst.

      Wie sieht deine SVG-Quelle aus, wie soll das X3D aussehen?

      <xsl:output media-type="model/x3d=xml"
                                          ▲
      Da sollte wohl ein '+' stehen.

      Live long and prosper,
      Gunnar

  2. Hallo Sabrina,

    Was muss ich von der Logik her im Templatebereich, bzw. zwischen:

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

    einfügen,

    Formal etwas in dieser Art:

    <xsl:template match="/">  
      <X3D profile="..." version="...">  
        <head>...</head>  
        <Scene>  
          <xsl:apply-templates/>  
        </Scene>  
      </X3D>  
    </xsl:template>  
      
    <!-- weitere Templates für die konkreten Umformungen: -->  
    <xsl:template match="...">  
      <!-- ... -->  
    </xsl:template>
    

    bzw. was habe ich evtl. komplett übersehen?

    Dass SVG ein 2D-Format und X3D ein 3D-Format ist? Perspektivische Darstellungen sind natürlich auch in SVG durchaus möglich, z. B. dieses Balkenkonstrukt:

    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" baseProfile="full">  
      <g fill="#36F">  
        <polygon points="10,245 10,30 50, 30 50,245" opacity="0.6"/>  
        <polygon points="50, 30 70,10 70,225 50,245" opacity="0.4"/>  
        <polygon points="10, 30 30,10 70, 10 50, 30" opacity="0.8"/>  
      </g>  
    </svg>
    

    Du kannst ja mal die Umformung in ein 3D-Modell angehen ...

    BTW: Die DOCTYPE-Deklaration der X3D-Ausgabe sollte noch um den Public-Identifier ergänzt werden, bei xsl:output also auch doctype-public="ISO//Web3D//DTD X3D 3.2//EN" angeben.

    Grüße,
    Thomas

    1. Hallo Thomas,
      Danke für Deine großartige Hilfe, ich kann das Problem langsam besser erkennen, wegen einer zwei dimensionalen SVG - Grafik, die ich ein 3 D Format umwandeln wollte.
      Ich bin inzwischen bei einem Code dieser Art angelangt:

      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output media-type="model/x3d+xml" doctype-system="http://www.web3d.org/specifications/x3d-3.2.dtd" method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
      </xsl:stylesheet>
      <xsl:template match="/">

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <!--<!DOCTYPE X3D SYSTEM "x3d-3.0.dtd">-->
      <X3D profile="Immersive" version="3.0">
          <Scene>
              <Transform center="-0.913745 0.142591 0.420655" rotation="-0.832917 0.501173 0.23468 1.724975" translation="-0.728961 0.171638 -1.006337">
                  <Shape>
                      <Appearance>
                          <Material emissiveColor="1.0 0.882353 0.168627" specularColor="1.0 0.109804 0.207843"/>
                      </Appearance>
                      <Sphere/>
                  </Shape>
              </Transform>
              <Transform center="-0.212942 0.388116 0.04933354" rotation="-0.629448 0.307066 -0.713797 1.615957" translation="0.05186084 -0.30135 -3.053438">

      ...............

      <Transform rotation="-0.598908 0.79399 0.104353 2.84766" scale="0.007418046 1.0 1.0" translation="-2.290511 1.126671 0.210507">
                  <Shape>
                      <Appearance>
                          <Material/>
                      </Appearance>
                      <Cone/>
                  </Shape>
              </Transform>
          </Scene>
      </X3D>

      </xsl:template>

      </xsl:stylesheet>

      Eigentlich sollte dieses XSL-Stylsheet nun die Umwandlung des XML-Dokumentes in ein X3D Dokument vornehmen, dennoch schlägt die Validierung Fehl. hast Du evtl. noch einen Tipp, wo der syntaktische Fehler zu suchen ist?
      Ich selber arbeite übrigens mit diversen Onlinetutorials und 2 Büchern und habe doch arbe Probleme damit Kapitel zu finden, die sich mit dieser Art der Umformung beschäftigen, hast Du evtl. noch einen Verweis zu einem Tutorial in das sich ein Blick lohnt?

      Hallo Sabrina,

      Was muss ich von der Logik her im Templatebereich, bzw. zwischen:

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

      einfügen,

      Formal etwas in dieser Art:

      <xsl:template match="/">

      <X3D profile="..." version="...">
          <head>...</head>
          <Scene>
            xsl:apply-templates/
          </Scene>
        </X3D>
      </xsl:template>

      <!-- weitere Templates für die konkreten Umformungen: -->
      <xsl:template match="...">
        <!-- ... -->
      </xsl:template>

      
      >   
      > > bzw. was habe ich evtl. komplett übersehen?  
      >   
      > Dass SVG ein 2D-Format und X3D ein 3D-Format ist? Perspektivische Darstellungen sind natürlich auch in SVG durchaus möglich, z. B. dieses Balkenkonstrukt:  
      >   
      > ~~~xml
      
      <svg xmlns="http://www.w3.org/2000/svg" version="1.1" baseProfile="full">  
      
      >   <g fill="#36F">  
      >     <polygon points="10,245 10,30 50, 30 50,245" opacity="0.6"/>  
      >     <polygon points="50, 30 70,10 70,225 50,245" opacity="0.4"/>  
      >     <polygon points="10, 30 30,10 70, 10 50, 30" opacity="0.8"/>  
      >   </g>  
      > </svg>
      
      

      Du kannst ja mal die Umformung in ein 3D-Modell angehen ...

      BTW: Die DOCTYPE-Deklaration der X3D-Ausgabe sollte noch um den Public-Identifier ergänzt werden, bei xsl:output also auch doctype-public="ISO//Web3D//DTD X3D 3.2//EN" angeben.

      Grüße,
      Thomas

      1. Hallo Sabrina,

        Eigentlich sollte dieses XSL-Stylsheet nun die Umwandlung des XML-Dokumentes in ein X3D Dokument vornehmen, dennoch schlägt die Validierung Fehl. hast Du evtl. noch einen Tipp, wo der syntaktische Fehler zu suchen ist?

        Entferne das vor dem eigentlichen Template stehende </xsl:stylesheet>.

        Grüße,
        Thomas