In diesem Thema möchte ich viel mehr Gehirnzellen als ich allein anbieten können. Ich möchte meine XSD (v1.0) abhängig von den verwendeten/nicht verwendeten Elementen in realen XML-Instanzen (nur einzelne Namespaces) umgestalten. Lassen Sie uns bauen ein kleines Szenario:Bericht alle nicht verwendeten Elemente (+ Attribute) des entsprechenden Schemas
ich nur gültige XML-Dokumente gegen ein entsprechendes Schema haben:
<body>
<h1>Heading 1</h1>
<p>paragraph</p>
<p><bold>bold</bold>paragraph<italic>italic</italic></p>
</body>
XSD zu validieren gegen:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="body">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="h1"/>
<xs:element ref="h2"/>
<xs:element ref="p"/>
<xs:element ref="span"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="h1" type="xs:string"/>
<xs:element name="h2" type="xs:string"/>
<xs:element name="p">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="bold"/>
<xs:element ref="italic"/>
<xs:element ref="underline"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="span">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="bold"/>
<xs:element ref="italic"/>
<xs:element ref="underline"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="bold" type="xs:NCName"/>
<xs:element name="italic" type="xs:NCName"/>
<xs:element name="underline" type="xs:NCName"/>
</xs:schema>
Auf dieser Basis würde ich gerne einen Bericht erstellen (via XSLT [2.0, 3.0 über SAXON EE 9.6.0.5 verfügbar]) über welche Elemente (Tags + Attribute) NICHT in meinen XML-Instanzen verwendet werden b ut sind in meinem XSD möglich.
vereinfachte Pseudo todos/Ausgehend von Grund auf neu:
- Suche für alle
//xs:element[@name]
in meine XSD (Attribute in Bericht v2.0 folgen). - Suche für all
*
in meinem XML - "Vergleichen" es
Fragen:
Gibt es etwas über meinen Horizont zu diesem Thema in der schönen XSLT-Community schon?
Wie man es gut speichert und vergleicht?
Verwendung xsl:map
über XSLT 3.0? Pfade speichern [/body/h1
, /body/p
] und diese Pfade vergleichen? (trickreich: die richtigen Pfade aus dem Schema holen, alle Möglichkeiten der Definitionen behandeln, wie xs:group ref="..."
oder über complexTypes
etc.)
[AddOn: Vielleicht muss ich es auf den Kontext von Vorgängerelementen in meinem XML erweitern. Im Beispielfall möchte ich könnte unterscheiden zwischen //p/underline
und //span/underline
.]
<xsl:message>please write your thoughts open minded. I don't request for fully functional code!</xsl:message>
Danke bis jetzt, fügte das Tag für mächtigen Dr. Kay hinzu. – uL1