2016-04-26 12 views
1

Ich habe diesen XML-Code:Wie schränkt man ein Attribut eines Elements in XSD ein?

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

Was ich tun möchte, ist eine Beschränkung auf das sex Attribut hinzuzufügen. sex Attribut sollte nur männlich und weiblich als ihren Wert nehmen. Ich habe Grundkenntnisse in diesem XML-Schema. Bisher was ich getan habe, ist dies:

<?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> 

Antwort

0

Sie Beschränkung auf den Wert des Attributs hinzufügen kann, wie unten dargestellt:

<?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

Verwenden xs:restriction ein Attribut zu einem festen Satz von Aufzählungen zu begrenzen über 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> 

Zwei weitere Beobachtungen:

  1. Sie können leere Elemente über die Notation <el/> verkürzen.
  2. Neben einem student Wurzelelement zu erlauben, würde Ihr XSD name, fname und lname Elemente root ermöglichen. Das sieht nicht richtig aus. Vielleicht sollten Sie alle oder einige dieser lokal eher als global definieren.

Hier ist Ihre XSD mit allen oben genannten Anpassungen:

<?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

Vielen Dank @kjhughes! Danke für die Anregungen. –

+0

Gern geschehen. Bitte [** accept **] (http://meta.stackoverflow.com/q/5234/234215) diese Antwort, wenn es geholfen hat. Vielen Dank. – kjhughes

Verwandte Themen