Thomas J.S.: Zulässige Attribute auslesen für ein Element

Beitrag lesen

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