1

分類法を表すデータ モデルがあります。分類法は、次のようなカテゴリの階層です。

Food
 +- Pasta
     +- Spaghetti

これを次のように表現したい。

<taxonomy>
  <category id="cat001" name="Food"/>

  <category id="cat002" name="Pasta">
    <parentCategory>
      <category ref="cat001"/>
    </parentCategory>
  </category>

  <category id="cat003" name="Spaghetti">
    <parentCategory>
      <category ref="cat002"/>
    </parentCategory>
  </category>
</taxonomy>

これを XML スキーマ (XSD) で表現する最良の方法は何ですか?

また、JAXB を使用するときに次のようなものを取得できるようにするにはどうすればよいですか

class Category {
  String name;
  Category parentCategory;
}

さらに、私の分類法が厳密なツリーではなく、スパゲッティがパスタとヌードルの下に来るように、複数の親関係が存在する可能性があるグラフである場合はどうなるでしょうか。

<taxonomy>
  <category id="cat001" name="Food"/>

  <category id="cat002" name="Pasta">
    <parentCategories>
      <category ref="cat001"/>
    </parentCategories>
  </category>

  <category id="cat003" name="Noodles">
    <parentCategories>
      <category ref="cat001"/>
    </parentCategories>
  </category>

  <category id="cat004" name="Spaghetti">
    <parentCategories>
      <category ref="cat002"/> <!-- Pasta -->
      <category ref="cat003"/> <!-- Noodles -->
    </parentCategory>
  </category>
</taxonomy>

JAXBを使用すると、次のようなものを生成したいと思います

class Category {
  String name;
  List<Category> parentCategories;
}

Java コードは、説明のために簡略化されていることに注意してください。JAXB コード生成では、カテゴリ プロパティを持つparentCategory などのコンテナー オブジェクトを使用してもかまいません

4

1 に答える 1

0

推奨 - Java オブジェクトから始める

あなたのユースケースでは、必要なオブジェクトモデルから始めて、JAXB アノテーションを適用して目的の XML 表現にマップすることをお勧めします。次の例が役立ちます。

XML スキーマ

XML スキーマが必要な場合は、JAXB モデルから生成できます。

import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(SpThread.class);

        jc.generateSchema(new SchemaOutputResolver() {

            @Override
            public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException {
                StreamResult result = new StreamResult(System.out);
                result.setSystemId(suggestedFileName);
                return result;
            }

        });
    }

}

共有参照

とを使用@XmlID@XmlIDREFて、XML ドキュメント内でキー ベースの参照を作成できます。

于 2012-09-21T15:47:13.637 に答える