Fred: XML-Schema: Attribute + Typen

Hejo,

ich komme da bei einer Aufgabenstellung nicht weiter:
<name id="12">Gerhard Schröder</name>

Nun versuche ich mittels

<xs:element name="name" type="xs:string">
    xs:complexType
        <xs:attribute name="id" type="xs:integer"/>
    </xs:complexType>
</xs:element>

das ganze in xml-schema festzulegen, aber ich bekomme vom parser einen fehler, dass einem anonymen typen kein typ zugewiesen werden kann. Kann mir das einer erklären? Was kann man degegen tun?

  1. Hi,

    du erklärst für dein Element "name" ja bereits einen SimpleType,
    nämlich xs:string.

    Du solltest stattdessen die type Angabe oben weglassen und innerhalb
    von xs:complexType einen xs:simpleContent mit Erweiterung (Extension)
    des Basistyps xs:string verwenden

    Also:

    <xs:element name="name">
        xs:complexType
            xs:simpleContent
                <xs:extension base="xs:string">
                    <xs:attribute name="id" type="xs:integer" />
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

    HTH, Ciao, Frank

    1. Hejo ;-)

      <xs:element name="name">
          xs:complexType
              xs:simpleContent
                  <xs:extension base="xs:string">
                      <xs:attribute name="id" type="xs:integer" />
                  </xs:extension>
              </xs:simpleContent>
          </xs:complexType>
      </xs:element>

      HTH, Ciao, Frank

      Thanx für die Hilfe!!!!!
      Jetzt habe ich nur noch das Problem, dass für das Element name nur bestimmte Namen vorgesehen sein sollen, also, Name1; Name2, Name3...
      Ich dachte ich mache das einfach mit
      xs:restriction
      xs:enumerationName1</xs:enumeration>
      ...
      </xs:restriction>
      Aber ich kriege das leider nicht in das obige Stück eingebaut?!!? Kann mit ds noch einer helfen??

      Ach und, da wäre noch was: Wie kann ich solche 'enumerations' für >Attributwerte machen?

      1. Hi,

        indem du das entsprechend schachtelst, vgl.

          
         <xs:simpleType name="CategoryType">  
          <xs:restriction base="xs:string">  
           <xs:enumeration value="A" />  
           <xs:enumeration value="B" />  
           <xs:enumeration value="D" />  
           <xs:enumeration value="P" />  
           <xs:enumeration value="E" />  
           <xs:enumeration value="N" />  
          </xs:restriction>  
         </xs:simpleType>  
         <xs:simpleType name="EnumStringType">  
          <xs:restriction base="xs:string">  
           <xs:enumeration value="Albert" />  
           <xs:enumeration value="Berta" />  
           <xs:enumeration value="Detlef" />  
           <xs:enumeration value="Paula" />  
           <xs:enumeration value="Emily" />  
           <xs:enumeration value="Norbert" />  
          </xs:restriction>  
         </xs:simpleType>  
         <xs:complexType name="MyElement">  
          <xs:simpleContent>  
           <xs:extension base="EnumStringType">  
            <xs:attribute name="type" type="CategoryType" />  
           </xs:extension>  
          </xs:simpleContent>  
         </xs:complexType>  
         <xs:element name="root">  
          <xs:complexType>  
           <xs:sequence minOccurs="0" maxOccurs="unbounded">  
            <xs:element name="name" type="MyElement" />  
           </xs:sequence>  
          </xs:complexType>  
         </xs:element>  
        
        

        sollte genau das ergeben, was du willst.

          
        <root>  
            <name type="A">Berta</name>  
            <!-- weitere folgen hier -->  
        </root>  
        
        

        Grüße, Frank