6

XSD で型の拡張と制限を定義するための形式のニュアンスを理解するのに苦労しています。W3Schools リファレンスによると:

  • simpleContent「テキストのみの複合型またはコンテンツとしての単純型の拡張または制限」を定義し、要素を含まない
  • complexContent混合コンテンツまたは要素のみを含む複合型の「拡張または制限」を定義します

XSD が拡張機能と制限をこれらのコンテナーの 1 つに含める必要がある理由、さらに、拡張機能と制限のみがそれを必要とする理由は明らかではありません。すべての「コンテンツ」をコンテナーで定義する必要がある場合は、もう少し理にかなっていますが、そうではありません。基本型では、コンテンツ (sequenceなど) はcomplexTypeコンテナーの直接の子として定義されます。

この例を見てみましょう。これは私には冗長すぎるように思えます:

<xs:complexType name="fullpersoninfo">
  <xs:complexContent>
    <xs:extension base="personinfo">
      <xs:sequence>
        <xs:element name="address" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
        <xs:element name="country" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

代わりにこのように書くことができないのはなぜですか?

<xs:complexType name="fullpersoninfo">
  <xs:extension base="personinfo">
    <xs:sequence>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
    </xs:sequence>
  </xs:extension>
</xs:complexType>

それともこのように?

<xs:complexType name="fullpersoninfo" extends="personinfo">
  <xs:sequence>
    <xs:element name="address" type="xs:string"/>
    <xs:element name="city" type="xs:string"/>
    <xs:element name="country" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

このように定義されたのには何らかの理由があるに違いないと思いますが、その理由についての手がかりは見つかりません。

4

2 に答える 2

1

CM Sperberg-McQueenの答えに基づいて構築するには、言語の制限に関係している(それ以上ではないにしても)一部が必要だと思います(「技術的な問題」の参照だと思います)。ほとんどの文法は、自分自身を定義するのに十分であることを証明しようとするため、バージョン 1.0 で今日も「楽しんでいる」制限を考えると、「スキーマのスキーマ」で実際にできることはほとんどないことを想像してみてください。

多くの人は、XSD である XML をXMLSchema.xsdに対して検証することで、XSD を真に検証できると信じていますが、そうではありません。

多くの XML スキーマ設計では、あなたと同じ疑問が生じます。答えは通常、作成者が言語の制限を回避することで、スキーマ仕様の制限機能を最大限に活用したかったというものです。

1.0 の機能が 1.1 と似ていれば、構文は異なっていたと思います。仕様を理解するのは簡単ではなかったでしょう...

これをより充実させるために、RelaxNG や Schematron などの他のスキーマ言語仕様も調査します。おそらくいくつかの論争的な議論... 良い読み物は、おそらくRick JelriffeがXSDに取り組むことです。

于 2013-05-30T04:25:07.903 に答える