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;
}

此外,如果我的分类不是一棵严格的树,而是一个图表,其中可能有多个父关系,这样 Spaghetti 就属于 Pasta 和 Noodles

<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 回答