2016-04-26 16 views
1

私はこのXMLコードを持っている:私は何をしたいかXSDで要素の属性を制限する方法は?

<student> 
    <name sex="male"> 
     <fname></fname> 
     <lname></lname> 
    </name> 
</student> 

sex属性に制約を追加することです。 sex属性は、の男性のの女性の値にする必要があります。 私はこのXMLスキーマの作成に関する基本知識を持っています。これまでのところ、私がやったこのです:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="name" type="nameType"/> 
    <xs:element name="fname" type="xs:string"/> 
    <xs:element name="lname" type="xs:string"/> 
    <xs:element name="student" type="studentType"/> 

    <xs:complexType name="nameType"> 
     <xs:sequence> 
      <xs:element ref="fname"></xs:element> 
      <xs:element ref="lname"></xs:element> 
     </xs:sequence> 
     <xs:attribute name="sex"></xs:attribute> 
    </xs:complexType> 

    <xs:complexType name="studentType"> 
     <xs:sequence> 
      <xs:element ref="name"></xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

答えて

0

下図のようにあなたは、属性の値に制限を追加することができます。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="name" type="nameType"/> 
    <xs:element name="fname" type="xs:string"/> 
    <xs:element name="lname" type="xs:string"/> 
    <xs:element name="student" type="studentType"/> 

    <xs:complexType name="nameType"> 
     <xs:sequence> 
      <xs:element ref="fname"></xs:element> 
      <xs:element ref="lname"></xs:element> 
     </xs:sequence> 
     <xs:attribute name="sex"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="ar"></xs:enumeration> 
        <xs:enumeration value="en"></xs:enumeration> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 

    <xs:complexType name="studentType"> 
     <xs:sequence> 
      <xs:element ref="name"></xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
0

使用xs:restrictionが列挙の固定セットに属性を制限しますxs:enumeration経由:

<xs:attribute name="sex"> 
    <xs:simpleType> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="male"/> 
     <xs:enumeration value="female"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:attribute> 

他の二つの観測:

  1. <el/>の表記で空の要素を短くすることができます。 studentルート要素を可能にすることに加えて
  2. 、あなたのXSDは namefname、およびlnameルート要素を可能にします。これは右に表示されません 。おそらく、グローバルにではなく、ローカルで のすべてまたは一部を定義する必要があります。ここで

上記の調整のすべてのあなたのXSDです:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="student" type="studentType"/> 

    <xs:complexType name="studentType"> 
    <xs:sequence> 
     <xs:element name="name" type="nameType"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="nameType"> 
    <xs:sequence> 
     <xs:element name="fname" type="xs:string"/> 
     <xs:element name="lname" type="xs:string"/> 
    </xs:sequence> 
    <xs:attribute name="sex"> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="male"/> 
      <xs:enumeration value="female"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    </xs:complexType> 

</xs:schema> 
+0

はあなたに非常に多くの@kjhughesをありがとうございました!提案ありがとう.. –

+0

よろしくお願いします。それが助けられたら、この回答を[**承認**](http://meta.stackoverflow.com/q/5234/234215)してください。ありがとう。 – kjhughes

関連する問題