2011-08-23 11 views
0

私のアプリケーションを書くフレームワークでは、ノード名が本当に重要ではない多くのXMLファイルがあります。すべての貴重な情報は属性に置かれます。ノードタイプは、属性の1つを使用して定義されます。属性のみを定義するXSDスキーマ

私はこのファイルに簡単なスキーマを書いてみたいと思います。すべての要素は、の要素のシーケンスを持つことができます

  • ([はるかがあるだろう!]例えば、名前、値、タイプ)すべての要素が定義されたリストから属性を持つことができます

    • :私は、それは二つの主要な条件を満たすべきだと思います厳密な定義

    与えられた(例えばタイプ)引数に依存する属性リストを作成する可能性がある場合は、非常に便利です。

    XSDファイルはこれらのxmlファイルを処理できますか?そのようなスキーマを書くことは可能ですか?任意のノードの属性リストを定義する方法。

  • 答えて

    0

    xmlインスタンスでサポートしたい要素と属性の可能な組み合わせごとに、XSDタイプを定義する必要があります。たとえば、

    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
        <xs:element name="root"> 
        <xs:complexType> 
         <xs:all> 
         <!-- declarations of any of the types you can use --> 
         <xs:element name="MyType1" type="MyType1Type" /> 
         <!-- etc.. --> 
         </xs:all> 
        </xs:complexType> 
        </xs:element> 
        <!-- Type definitions --> 
        <xs:complexType name="MyType1> 
        <xs:sequence> 
         <xs:element name="MyElement1" type="xs:string" /> 
         <xs:element name="MyElement2" type="xs:date" /> 
         <!-- etc.. --> 
        </xs:sequence> 
        <xs:attribute name="MyAttribute1" type="xs:string" /> 
        <!-- etc.. --> 
        </xs:complexType> 
        <xs:complexType name="MyType2> 
        <xs:sequence> 
         <xs:element name="MyElement3" type="xs:string" /> 
         <xs:element name="MyElement4" type="xs:date" /> 
         <!-- etc.. --> 
        </xs:sequence> 
        <xs:attribute name="MyAttribute3" type="xs:string" /> 
        <!-- etc.. --> 
        </xs:complexType> 
        <!-- etc.. --> 
    </xs:schema> 
    

    すべてのタイプを定義したら、任意のxmlファイルをサポートできます。またはxsを使用します:anyTypeをタイプ

    希望これは

    編集に役立ちます。

    +0

    残念ながら(とあなたが捨てることができ、多くの出力を生成します。)私はノード名は何の情報も提供していないと言っています。開発者は、要素の名前リストを定義することが不可能なので、ここに絶対にすべてを挿入できます。 –

    +0

    次に、xs:anyTypeタイプを使用する必要があります。 –

    +0

    私が言及した条件の例を挙げることができますか? –

    0

    すべての属性を持つcomplexTypeのみを定義するスキーマを持つことができます。あなたの課題は、そのAPIが指定された入力要素の検証をその名前付き型に対して要求できるようにするスキーマプロセッサを見つけることです。これを行う1つの方法は、スキーマ対応のXSLTプロセッサである:

    <xsl:template match="*"> 
        <xsl:copy-of select="." type="my-complex-type"/> 
        <xsl:apply-templates/> 
    </xsl:template> 
    

    は、あなたの型宣言に対して、文書内のすべての要素を検証します

    +0

    私の可能性は限られているので、現在はxsdだけを扱う既存のクラスを拡張しています。残念な:( –

    関連する問題