Preprocess die XML die data-*
Attribute zu löschen, bevor es auf die Validierungsfunktion zu geben. Ansonsten kann ich es nicht mit RelaxNG oder anderen grammatikbasierten Schemasprachen validieren.
Soweit die XML-Vorverarbeitung, eine Möglichkeit, das zu tun, mit einem vorhandenen XML-Toolchain wäre: es durch eine XSLT-Transformation ausführen, die die data-*
Attribute fällt aber auf alles andere geht, wie sie ist:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
<xsl:output method="xml" indent="no"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*[starts-with(name(), 'data-')]"/>
</xsl:stylesheet>
Die <xsl:template match="@*[starts-with(name(), 'data-')]"/>
ist der wichtige Teil dort. Das bewirkt, dass alle data-*
Attribute einfach auf den Boden fallen gelassen werden. Der Rest dieses XSL-Stylesheets ist nur eine grundlegende "identify-Transformation", die alles andere aus dem XML-Quelltext unverändert weitergibt.
Der W3C Nu Html Checker (HTML5 Validator) Backend tut etwas für data-*
Attribute, die funktionell das gleiche wie die XSLT-Transformation ist, aber in Java geschrieben. Wenn Sie neugierig sind, ist der Code für sie innerhalb the GitHub repo for the W3C Nu Html Checker sources, hier:
https://github.com/validator/validator/tree/master/src/nu/validator/xml/dataattributes
Siehe the filterAttributes
code in DataAttributeDroppingContentHandlerWrapper.java
Es ist im Wesentlichen ein SAX-Filter, der vor der Validierungsfunktion zur Analysezeit off Parse-Ereignisse arbeitet.
Und wenn Sie noch mehr neugierig, gibt es Code für andere Vorverarbeitung Filter, die ähnliche Dinge:
Wie auch immer, erhalten Sie die allgemeine Idee: Wenn es irgendwelche Fälle von Markup-Konstrukte in Ihrer Quelle sind, dass Sie nicht Validierungslogik ausdrücken In RelaxNG oder XSD filtern Sie die Quelle im Wesentlichen (vorverarbeiten), um das Markup von der Validierungsfunktion auszublenden.
Können Sie ein Beispiel aus diesem XML geben? –
@RaymondNijland Ja, natürlich habe ich meine Frage bearbeitet. – Pavel