Tim Bersch: Zulässige Attribute auslesen für ein Element

Hallo,

Gibt es irgendwo eine Infoseite bzw. direkt einen Ratschlag, wie ich mit XSLT zulässige Attribute für ein Element aus einem Schema lesen kann? Also ich habe eine XML Datei und ein xml Schema. Nun habe ich in dem Schema für die einzelnen Elemente  verschiedene Attribute vorgeschrieben, die entweder Pflicht oder Wahlweise angehangen vorkommen muessen.

Jetzt wollte ich ein HTML Seite zu Erklärung erstellen, wobei automatisch die zulässigen Attribute für das jeweilige Element aufgelistet werden. Wie geht man da am besten vor? Weiss nicht so recht , wo ich dabei anfangen soll.

Gruß, Tim

  1. Hallo,

    Gibt es irgendwo eine Infoseite bzw. direkt einen Ratschlag, wie ich mit XSLT zulässige Attribute für ein Element aus einem Schema lesen kann?

    Nur wenn du XSLT 2.0 mit einem "schema-aware" XML-Parser verwendest. Aber auch dort eher kompliziert.

    Über einen Umweg könntest du zwar das Schema-Dokument auch mit XSLT 1.0 auslesen, aber das wäre sehr viel Arbeit für sehr wenig Nutzen.

    Jetzt wollte ich ein HTML Seite zu Erklärung erstellen, wobei automatisch die zulässigen Attribute für das jeweilige Element aufgelistet werden. Wie geht man da am besten vor? Weiss nicht so recht , wo ich dabei anfangen soll.

    Du kannst dein Schema entsprechend aufbereiten (d.h. reichlich mit Annotationen versehen) und (z.B. mit einem guten Editor) eine Dokumentation daraus erzeugen.

    Das wäre noch die einfachste Möglichkeit.

    Grüße
    Thomas

    1. Hallo Thomas,

      danke dir für den Hinweis. Gibt es einen frei verfügbaren schema-aware Parser? Der von Saxon ist ja nur ohne sa frei. Und wie wäre die Alternative über XSLT1.0 bzw. mit 2.0 ohne sa? Ich hatte deshalb meine Frage auch so gestellt, weil ich schon denke, dass es mit einigem Aufwand verbudnen ist, aber vielleicht hat ja einer mal ein gute Dokumentation über den Ansatz gemacht. Die Mühe ist es mir wert, da ich mit diesen Daten dann auch noch weiter arbeiten moechte. Danke dir trotzdem fuer die schnelle Antwort.

      Gruß, Tim

      1. Hallo,

        danke dir für den Hinweis. Gibt es einen frei verfügbaren schema-aware Parser?

        Der einzige den ich kenne: AltovaXML

        Der von Saxon ist ja nur ohne sa frei. Und wie wäre die Alternative über XSLT1.0 bzw. mit 2.0 ohne sa?

        Mit document() und dann durch die Schemadatei navigieren.
        Mit XSLT 1.0 etwas mühsamer, mit XSLT 2.0 etwas leichter.
        Du kannst mit XSLKT 2.0 bzw. darin mit XPath 2.0 und einem SA-XSLT-Prozessor auf die Datentypen (aus deinem Schema) in deinem XML zugreifen.
        Der XSLT-Proz. nutzt dabei die PSVI des XML-Parsers (Post Schema Validation Infoset, das u.a. auch eine Typen-Kommentierung (type annotation) enthält).
        Du könntest dann z.B. so etwas in deinem XSLT schreiben:
        <xsl:template match="element(*, xs:positiveInteger)"> ... </xsl:template>
        würde auf jedes Element zutreffen dessen Typ "xs:positiveInteger" ist.
        Analog geht das auch für Attribute: attribute(*, xs:positiveInteger).
        Auch so etwas geht: element(Preis, xs:decimal), trifft alle Preis-Elemente dessen Typ xs:decimal ist.

        Mit eingien kombinationen könntest du so aus dem XML die Elemente und/oder Attribute "extrahiren". (Aber nicht wenn sie Optional sind und im XML gerade nicht vorkommen. Dann bleibt nur der weg über die Schema-Datei selbst mit document() (oder mit doc() aus XPath 2.0).

        Ich hatte deshalb meine Frage auch so gestellt, weil ich schon denke, dass es mit einigem Aufwand verbudnen ist, aber vielleicht hat ja einer mal ein gute Dokumentation über den Ansatz gemacht. Die Mühe ist es mir wert, da ich mit diesen Daten dann auch noch weiter arbeiten moechte. Danke dir trotzdem fuer die schnelle Antwort.

        Ich empfehle dir eher einen Editor, der dir die Dokumentation direkt aus/von deinem Schema erstellt, wie z.B. oXygen: http://www.oxygenxml.com/ oder StylusStudio oder ein Tool wie "xnsdoc": http://www.buldocs.com/xnsdoc/ (oder XS3P, allerdings weiss ich nicht wo du den herbekommt, der Link in der W3C-Seite dazu ist tot) für denselben Zweck.

        Grüße
        Thomas

        1. Hallo Thomas,

          danke fuer die Tipps, denke ich werde es mal versuchen. Ich nutze Oxygen, nur weiss ich nicht ganz genau, wie du dass hier gemeint hast:

          Ich empfehle dir eher einen Editor, der dir die Dokumentation direkt aus/von deinem Schema erstellt, wie z.B. oXygen: http://www.oxygenxml.com/

          Wo muss ich da auf was "klicken"?

          Gruß, Tim

          1. Hallo,

            danke fuer die Tipps, denke ich werde es mal versuchen. Ich nutze Oxygen, nur weiss ich nicht ganz genau, wie du dass hier gemeint hast:

            Ich empfehle dir eher einen Editor, der dir die Dokumentation direkt aus/von deinem Schema erstellt, wie z.B. oXygen: http://www.oxygenxml.com/

            Wo muss ich da auf was "klicken"?

            Im oXygen dein Schema-Datei öffnen, im Menü dann auf: Dokument --> Werkzeuge --> Generiere Dokumentation

            Es öffnet sich ein Fenster, darin kannst du dann mit den Optionen etwas experiementieren und so eine Dokumentation deines Schemas erstellen.

            Grüße
            Thomas

            1. Hm, danke für den Tipp,

              aber Oxygen geht da in die Knie ;-( Obwohl ich nicht gerade den langsamsten PC haben.

              1. Hallo,

                Hm, danke für den Tipp,

                aber Oxygen geht da in die Knie ;-( Obwohl ich nicht gerade den langsamsten PC haben.

                hmm .... ich habe hier ein Schema mit knapp 900 Zeilen, das auch noch zwei andere Schemas importiert, aber wenn ich die Dokumentation generiere erzeugt sie oXygen in 30-40 Sekunden.

                Grüße
                Thomas