2011-07-12 21 views
5

XMLスキーマのドキュメントを生成します。XSDをJavaのツリー構造に変換する

私の目標は、xsdファイルを分析し、ツリー構造(すべての複合/匿名タイプが解決されている)として表示することです。さらに、そのツリーのすべてのアイテムにカーディナリティ(スキーマによって定義されたもの)を付ける必要があります。

次の小さな例は、私の問題を明確にするのに役立ちます。

a)にXSDファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="client" type="clientType" /> 
    <xs:complexType name="clientType"> 
     <xs:sequence minOccurs="1" maxOccurs="1"> 
      <xs:element name="first_name"/> 
      <xs:element name="last_name"/> 
      <xs:element name="address" type="addressType" 
         minOccurs="1" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="addressType"> 
     <xs:sequence> 
      <xs:element name="street"/> 
      <xs:element name="number" minOccurs="0" maxOccurs="1"/> 
      <xs:element name="city"/> 
      <xs:element name="zipcode"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

b)の出力私が見てみたい:

client [1] 
    first_name [1] 
    last_name [1] 
    address [1..n] 
    street [1] 
    number [0..1] 
    city [1] 
    zipcode [1] 

誰がこの問題のためのJavaベースのソリューションを知っていますか?好ましくはEclipse Schema Infosetに基づいていますが、私は他のライブラリも使用しています。

答えて

0

XSDスキーマもXMLであることを考えれば、これをXMLとして処理して、これを行うための多くのオプションを与えることができます。

私の好みは、要素と複合型要素を一致させるテンプレートを持つXSLTスタイルシートと、出力リストを取得するための複合型要素を使用し、minOccurs属性とmaxOccurs属性を一致させてカーディナリティを取得することです。

これを行うためのスタイルシートの例は、おそらくオンラインですでに利用可能です。

+0

XSLTを使用して匿名/複合型の内容を解決するにはどうすればよいですか?あなたはこれのための例がありますか? –

1

XSOMは、XSDをループオーバーして印刷できる包括的なデータ構造に正規化できます。

0

適切な解決策がないのに、私は次のように提案します。XSDに基づいてサンプルXMLインスタンスを生成できるツールを使用します。 eclipse IDE(オープンソースのため、関連コードを抽出してスタンドアロンソリューション内で使用することが可能でなければなりません)。このXMLは、必要なツリー構造に非常に近いはずです。次に、XSDを解析し、生成されたXML構造内の要素にカーディナリティを注釈付けします。

関連する問題