2012-01-05 8 views
3

私は、スキーマに次き:他の人がいない間complexTypeを拡張すると、混合継承されますか?

<xs:element name="td"> 
    <xs:complexType> 
    <xs:complexContent> 
     <xs:extension base="cell.type"/> 
    </xs:complexContent> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="cell.type" mixed="true"> 
    <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
    <xs:element ref="p"/> 
    </xs:sequence> 
</xs:complexType> 

は、いくつかのパーサーは、要素に直接PCDATAを可能にします。複雑な型が複雑なコンテンツを持ち、どちらも混在した属性を持っていない場合、有効な混在型はfalseであるというXSD勧告(3.4.2)には何かがあります。つまり、混合コンテンツが有効になる唯一の方法は、cell.typeの拡張によってmixed = "true"が継承される場合です。

正しい解釈についてスキーマをよく知っている人がコメントできますか?

(ところで:私は、スキーマの制御を持っていた場合、私は要素の定義に混合=「true」を動かすだろうが、それは私の呼び出しではありません。)

+1

質問はW3Cメーリングリストで質問されています:http://lists.w3.org/Archives/Public/xmlschema-dev/2005Sep/0018.html – Damien

答えて

4

私の質問を読んで誰もがまたthisスレッドを読みたいと思うかもしれません(by Damien)。私の答えはまったく正しいとは思われないようです:パーザ/バリデータは、同じ方法での属性宣言をベース/派生要素で処理しません。 W3CのXML Schema仕様のpart 1に延び複合型、section 3.4.6のサブセクション1.4.3.2.2.1に関する


は言う

両方【由来と基地] {コンテンツ・タイプ} Sなければならないこと混合されるか、両方とも要素のみでなければなりません。

はい、継承されています(上書きすることはできません)。

基本的に、あなたが説明したことは、最も論理的な動作であることが望ましい(と私が心配している限り)ことです。

シンプルなスキーマを作成して、EclipseのXMLツールで少しテストを実行しました。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="c"> 
    <xs:complexType> 
     <xs:complexContent mixed="false"> 
     <xs:extension base="a"/> 
     </xs:complexContent> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="a" mixed="true"> 
    <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="b"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

上記のスキーマは、のEclipseのもW3Cの「公式」XML Schemaのバリデータはそれで問題に気づいていないという意味で、有効です。

次のXMLは、上記のスキーマに対して検証を行います。

<?xml version="1.0" encoding="UTF-8"?> 
<c xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd"> 
    x 
    <b/> 
    y 
</c> 

だから、基本的には、複雑な基本型の混合度を上書きすることはできません。この声明をさらに支持するために、基本的なタイプと控えめなタイプの混合性を交換してみてください。その場合、XMLは検証されません。派生型は混在しないため、ベースの混在を上書きできないためです。

はまた、他の人がそれはパーサは、あなたが話している明確にするために傷つけることができませんでしたではない

を行いながら

一部のパーサは、要素に直接PCDATAが許可されていることを言いました。 良いパーサーは混在したコンテンツに遭遇したときに失敗しません。適切なスキーマが与えられていると、検証中のパーサーは、スキーマがそれを許可していないときに混合コンテンツを検出すると失敗します。

関連する問題