2011-02-07 14 views
1

私は次のXML持っている:1は、次のXMLスキーマを使用することになり、このようなXMLを検証するために、通常XML:属性で拡張された基本単純要素に制限を設定するにはどうすればよいですか?

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <Child name="MyType" compareMode="EQ">Child1</Child> 
</Root> 

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Child"> 
      <xs:complexType> 
      <xs:attribute name="name" type="xs:string" use="required" /> 
      <xs:attribute name="compareMode" type="xs:string" use="required" /> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

を私は要素の値を制限したいと以下のもののみを許可してください:子供1子供2および子供3

は、私は通常制限は、次のスキーマを指定することができることを知っている:

<xs:restriction base="xs:string"> 
    <xs:enumeration value="Child1"/> 
    <xs:enumeration value="Child2"/> 
    <xs:enumeration value="Child3"/> 
</xs:restriction>      

どの制限が最初のケースで正しいでしょうか?

答えて

1

私は私の答えをテストしていないので、私は、間違っていました。私はそれを編集した:グーグルと一緒に過ごした時間後

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="Child"> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="name" type="xs:string" use="required" /> 
       <xs:attribute name="compareMode" type="xs:string" use="required" /> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
    <xs:element name="Root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Child"> 
        <xs:complexType> 
         <xs:simpleContent> 
          <xs:restriction base="Child"> 
           <xs:enumeration value="Child1"/> 
           <xs:enumeration value="Child2"/> 
           <xs:enumeration value="Child3"/> 
          </xs:restriction>  
         </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="ChildContent"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Child1"/> 
      <xs:enumeration value="Child2"/> 
      <xs:enumeration value="Child3"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:complexType name="Child"> 
     <xs:simpleContent> 
      <xs:extension base="ChildContent"> 
       <xs:attribute name="name" type="xs:string" use="required" /> 
       <xs:attribute name="compareMode" type="xs:string" use="required" /> 
      </xs:extension>  
     </xs:simpleContent> 
    </xs:complexType> 
    <xs:element name="Root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Child" type="Child" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

または制限して名前付きの型なしでこれを行うことはできません。

+0

@ inf3mo答えに感謝!残念ながら、設定を適用すると、次のエラーが表示されます。* s4s-elt-invalid-content.1: '#AnonType_MetaInfoRootChild'の内容が無効です。要素 'simpleContent'が無効、間違っている、または頻繁に発生する*。 XMLスキーマを構築するためにどの情報源を使用しましたか?リンクを削除してもらえますか? – Tim

+0

http://bytes.com/topic/net/answers/730974-schema-error-restriction-simplecontent – inf3rno

+0

+1これは正しいと思われます。実際、私はTomaszによって提案されたのと同じ解決策を使用しました。とにかくありがとうございました。 – Tim

関連する問題