1

XSD のネストに問題があります。同じHEADerを持つ文書構造を持つMAINファイルがあり(私はそれを分けておきたい-うまく機能します)、その内容に応じていくつかの本文が必要です。私の質問は、適切な方法で接続する方法ですか?

メイン.XSD:

<xs:schema id="MAIN" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns=""> 
  <xs:include schemaLocation="HEAD.xsd"/>

  <xs:element name="MAIN">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="1">
        <xs:element name="HEAD" type="HEADType"/>
        <xs:element name="BODY" type="BODYType"/>
      </xs:sequence> 
    </xs:complexType> 
  </xs:element>
</xs:schema>

HEAD.XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="HEAD" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" >
  <xs:complexType name="HEADType">
    <xs:all minOccurs="1" maxOccurs="1">
      <xs:element name="USER"> 
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z_]+"></xs:pattern>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:schema>

私が持っているアイデアは次のとおりです。

  1. MAINTYPE の型として MAIN.xsd の「MAIN」要素を作成し、BODYType を定義した BODY_CUSTOMER に MAIN.XSD をインクルードします。
  2. MAIN.xsd と BODY_CUSTOMER.xsd を別々に読み込むと、BODYType の定義が見つかります。

しかし、それが「適切な」方法だとは思いません。

4

1 に答える 1

2

あなたの説明に基づいて、あなたが実装しようとしているものは、口語的に「ぶら下がり定義」と呼ばれます。

このアプローチの最も一般的な問題は、Main.xsdを編集しようとすると、一般的なXSDスキーマエディターが欠陥の欠落について不平を言うことです。

あなたの最初のアイデアはちょっと紛らわしいです。それでも、2番目のものが本当にあなたがする必要があるすべてであるという理由だけでそれは必要ではないと思います。私はseparately、ファイルが別個であることを参照しながら、同時にそれらをロードしなければならないことを認めます。それをどのように行うかは、XSDを使用する必要のあるツールによって異なるため、私はそこであなたを本当に助けることはできません。

.NETを想定すると、 XmlSchemaSetオブジェクトに一度に3つのXSDファイル(Main、Head、Body_Customer)をロードすると、希望どおりに機能します。

「適切な」ということに関しては、それはすべて、組織でXSDプラクティスとして受け入れられているかどうかによって異なります。私に関する限り、ぶら下がりタイプは完全に有効なXSDデザインパターンです。

于 2013-01-07T21:11:25.010 に答える