2011-06-16 8 views
1

私は他の要素、属性、テキストも含むXML要素を持っています。サンプルXMLデータは次のとおりです。他の要素や属性、テキスト(すべて)を含む複合要素のXSDスキーマを記述できますか?

<property readonly="0" eraseable="1" > 
    <property readonly="0" eraseable="1" > 
     <property readonly="0" eraseable="1" >windows XP unknown SP unknown (Build unknown)</property> 
     <property readonly="0" eraseable="1" >Windows 5.1</property> 
    </property> 
</property> 

要素のXSDスキーマを定義します。 SimpleContentをComplexTypeに追加しようとしましたが、検証時にエラーが発生します。ここで私がしようとしているスキーマは次のとおりです。

<xs:element name="property"> 
    <xs:complexType > 
     <xs:simpleContent> 
      <xs:extension base="xs:string"/> 
     </xs:simpleContent> 
     <xs:sequence> 
      <xs:element ref="property" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
     <xs:attribute name="id" use="optional" type="xs:integer"/> 
     <xs:attribute name="readonly" use="required" type="xs:boolean"/> 
     <xs:attribute name="eraseable" use="required" type="xs:boolean"/> 
    </xs:complexType> 
</xs:element> 

私は、検証に乗るエラーは次のとおりです。

*「#AnonType_property」の内容が無効です。要素「配列」は無効な見当違いの、またはあまりにも頻繁に発生している*

私は、スキーマ定義から<xs:simpleContent>を削除すると、私はエラーが出るよう:要素「プロパティが」文字[子供]を持つことができない

、なぜなら型のコンテンツタイプは要素のみです。

このような要素のスキーマはどのように記述しますか?

答えて

1

これはあなたのために機能しますか?

<xs:element name="property"> 
    <xs:complexType mixed="true"> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/> 
     </xs:sequence> 
     <xs:attribute name="eraseable" use="required" type="xs:integer"/> 
     <xs:attribute name="readonly" use="required" type="xs:integer"/> 
    </xs:complexType> 
</xs:element> 
+0

「混合」属性は、要素にいくつかのクレイジーな文章をオンに:)私は知っています。しかし問題は、テキストを要素の開始タグの間に制限しないことです。しかし、提案に感謝します。 – Shreerang

0

あなたがXMLからスキーマを生成するためのVisual Studioを使用している場合は、あなたがこれを取得するスニペット:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="property"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="property"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element maxOccurs="unbounded" name="property"> 
       <xs:complexType> 
        <xs:simpleContent> 
        <xs:extension base="xs:string"> 
         <xs:attribute name="readonly" type="xs:unsignedByte" use="required" /> 
         <xs:attribute name="eraseable" type="xs:unsignedByte" use="required" /> 
        </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:attribute name="readonly" type="xs:unsignedByte" use="required" /> 
      <xs:attribute name="eraseable" type="xs:unsignedByte" use="required" /> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:attribute name="readonly" type="xs:unsignedByte" use="required" /> 
     <xs:attribute name="eraseable" type="xs:unsignedByte" use="required" /> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

ええ、それはその一例の事例だけを考えているからです。 要素は何回でも入れ子にすることができますので、ハードコーディングする必要はありません。また、ネストレベルでは、要素にテキストを含めることができます。基本的に、要素はどのレベルでも同じで、テキストはオプションです。 – Shreerang

+0

OKあなたは今何をしたいのか分かります。愚かな投稿をして申し訳ありません。 –

+0

ただし、単純なコンテンツと複雑なコンテンツを1つの要素に混在させることはできません。だから、おそらくあなたは、最も可能性の高いインスタンス文書をハードコーディングすることを考えるべきです。 –

関連する問題