1

1.

<xsd:element name="tuple">
<xsd:complexType>
    <xsd:sequence>
        <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip" />
    </xsd:sequence>
</xsd:complexType>

2.

<xsd:element name="tuple"/>

上記の両方のスキーマは同等ですか?

助けてください

4

1 に答える 1

0

いいえ!彼らは同じではありません!

最初のスキーマでは、要素はその下<tuple>に任意の名前の/の0以上の要素を持つ<any>ことができます.minOccurs="0"maxOccurs="Unbounded"complexTypetuple
processContents="skip"<any>

例:

<tuple>
  <foo>data</foo>
  <bar foobarattribute="foobardata">data</bar>
</tuple>

ご覧のとおり、fooandbarとその属性foobarattributeは XSD で定義されていませんが、この XML を有効なものとして許可します。しかし、それは下の属性を許可しません <tuple>

編集:

2 番目のスキーマ: 型を次のように宣言するのと同じです。anyType

<xsd:element name="tuple" type="xs:anyType"/>

つまり、タプルの下に任意の要素と属性を許可します。サンプル XML は次のようになります。

<tuple foo="bar">
   <foobar attrb="value">data</foobar>
</tuple>

最初のサンプル XML とは異なり、これにも属性 under があることがわかります<tuple>

2 つのサンプル XSD コードのもう 1 つの重要な違いは次のとおりです。最初のコードでは、processContents を「skip」として指定しています。そのため、XML プロセッサは指定された名前空間の要素を検証しようとしません。

2 番目のコードでは、anyType の場合、processContents は「lax」になります。これにより、XML プロセッサは必要な名前空間のスキーマを取得し、要素を検証しようとします。

それが役に立てば幸い..

于 2013-03-15T11:36:25.243 に答える