0

次の形式の XSD があります。

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

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

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

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


</root> 

XJC コンパイラを使用してコンパイルすると、1 行目の「コンテンツはプロローグでは許可されていません」というエラーが発生します。エンコーディングを「ISO-8859-1」に変更すると

次のエラーが発生します。

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

XSD から「ルート」タグを削除すると、次のエラーが発生し始めます。

  [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>

上記の場合は完全に機能し、クラスを適切に作成しました。

名前空間宣言と何か関係がありますか?

4

1 に答える 1

0

原則として、XSD 仕様では、複数の xs:schema 要素を同じ XML ドキュメントに含めることが許可されているため、あなたがやろうとしていることは不合理ではありません。実際には、多くの XSD ソフトウェア (おそらくほとんどの XSD ソフトウェア) は、xs:schema 要素が XML ドキュメントの最も外側の要素ではないスキーマ ドキュメントに対して準備されておらず、ソフトウェアが他のケースをサポートしていても、別のプログラムはサポートしていません。どのように振る舞うべきかについて常に同意しない。

あなたが説明した種類の入力をサポートするXSDソフトウェアはまったくないという誤解された当事者からの情熱的な議論を含む、詳細な議論については、このスタックオーバーフローの質問を参照してください。

XJC では、各 xs:schema 要素を個別の XML ドキュメントに配置し、(a) 単一のドライバー ファイルを使用してそれぞれを順番にインポートまたはインクルードするか、(b) それらすべてを同じディレクトリを指定し、ディレクトリの名前を XJC に渡します。ディレクトリをスキャンしてスキーマ ファイルを探し、コンパイルします。オプションで何かできることもあり-wsdlます。

于 2013-04-24T16:18:03.697 に答える