使用XJC编译具有多个模式的XSD

时间:2013-04-22 10:08:14

标签: xsd xjc

我有一个XSD格式:

<?xml version="1.0" encoding="utf-16"?>
<root>

    <xs:schema --->
      ..
      ..
      </xs:schema>

       <xs:schema -->
      ..
      ..
      </xs:schema -->

       <xs:schema -->
      ..
      ..
      </xs:schema -->


</root> 

在第1行使用XJC编译器编译时出现错误“prolog中不允许使用内容”。 如果我将编码更改为“ISO-8859-1”

它给出了跟随错误:

[ERROR] Unexpected <root> appears at line 2 column 10
  line 2 of ****.xsd Failed to parse a schema.

如果我从XSD中删除“root”标记,它会开始出现以下错误:

  [ERROR] The markup in the document following the root element must be well-formed.
  line 44 of file:****.xsd

无法解析架构。

我的问题是我们是否可以使用XJC编译具有多个架构标记的XSD。我曾尝试使用以下文件格式:

  <?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="abc" type="xs:string"/>
      <xs:element name="cdf">
      /xs:element>

    </xs:sequence>
    <xs:attribute name="orderid" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>

</xs:schema>

它完全适合上述,适当地创建类。

是否与命名空间声明有关?

1 个答案:

答案 0 :(得分:0)

原则上,XSD规范允许多个xs:schema元素包含在同一个XML文档中,因此您尝试执行的操作并非不合理。实际上,许多XSD软件(可能是大多数XSD软件)都没有为模式文档做好准备,其中xs:schema元素不是XML文档中最外层的元素,即使软件确实支持其他情况,不同的程序也不会我总是同意如何表现。

请参阅this Stack Overflow question进一步讨论,包括来自被误导的一方的充满激情的论点,即根本没有支持您所描述类型的输入的XSD软件。

使用XJC,您最好的选择似乎是将每个xs:schema元素放在一个单独的XML文档中,并使用(a)单个驱动程序文件来导入或依次包含它们,或者(b)将它们放入所有在同一目录下并手XJC目录的名称;它将扫描目录中的模式文件并进行编译。您也可以使用-wsdl选项执行某些操作。