前処理を行い、検証機能にそれを与える前data-*
属性をドロップするXML:私は... XMLの
例を、関連する何かを見つけることができません。そうしないと、RelaxNGやその他の文法ベースのスキーマ言語で検証する方法がわかりません。
限りXMLを前処理として、既存のXMLツールチェーンであることを行うための一つの方法は、次のようになります。data-*
属性をドロップしますがそのままである他のすべてに合格XSLT変換を通してそれを実行します。
<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>
<xsl:template match="@*[starts-with(name(), 'data-')]"/>
はそこで重要な部分です。その結果、data-*
属性が床に落とされるだけです。残りのXSLスタイルシートは、ソースXMLからのすべてのものをそのまま渡す基本的な「識別変換」です。
W3C Nu Html Checker(HTML5バリデータ)バックエンドは、機能的にはXSLT変換と同じですが、Javaで書かれたdata-*
属性のものを実行します。あなたは好奇心旺盛であれば、そのためのコードはthe GitHub repo for the W3C Nu Html Checker sources内にある、ここに:
https://github.com/validator/validator/tree/master/src/nu/validator/xml/dataattributes
the filterAttributes
code in DataAttributeDroppingContentHandlerWrapper.java
を参照してください。それは本質的に前に検証関数への解析時に解析イベントをオフに働くSAXフィルターです。
そして、あなたもより興味があれば、同様のことをやって、他の前処理フィルタのためのコードがある:the accompanying RelaxNG grammarはから要素を可能にすることを特別な名前空間にそれらを置くことによって
でそれらtemplate
サブツリーにチェックしない持っている必要はありません、あなたは一般的なアイデアを得る:あなたは検証ロジックを表現することはできませんあなたのソースのマークアップ構文のいずれかの例がある場合RelaxNGまたはXSDの場合、基本的にソースをフィルタリング(前処理)して、検証機能からそのマークアップを非表示にします。
xmlの例を挙げることはできますか? –
@RaymondNijlandはい、もちろん、私は私の質問を編集しました。 – Pavel