tom_: Elementinhalt und Attribute in XML-Schema definieren

Hi,

kennt jemand eine Möglichkeit mit XML-Schema folgendes zu definieren:

<tool major="1" minor="0">COPY</tool>

Ich möchte, dass der Inhalt eine Enumeration ist, ich schätze mal so:

<xsd:restriction base="xsd:string">
 <xsd:enumeration value="COPY"/>
        <xsd:enumeration value="MOVE"/>
 <xsd:enumeration value="DELE"/>
</xsd:restriction>

und die Attribute (major, minor) Pflicht sind.
Leider bekomme ich beides nicht kombiniert hin.

Danke im voraus,
Tom

  1. Hi,

    <xsd:restriction base="xsd:string">
    <xsd:enumeration value="COPY"/>
            <xsd:enumeration value="MOVE"/>
    <xsd:enumeration value="DELE"/>
    </xsd:restriction>

    Der Teil stimmt soweit. Außen herum steht ja jetzt noch das Element-Tag. Offenbar ist in einem simpleType kein Attribut erlaubt, darum würde ich vorschlagen auf simpleContent zu wechseln:
    <xs:element name="test">
       xs:complexType
          xs:simpleContent
             xs:restriction
                <xs:enumeration value="COPY"></xs:enumeration>
                <xs:enumeration value="MOVE"></xs:enumeration>
                <xs:enumeration value="DELE"></xs:enumeration>
      </xs:restriction>
          </xs:simpleContent>
          <xs:attribute name="major" type="xs:integer" use="required"></xs:attribute>
          <xs:attribute name="minor" type="xs:integer" use="required"></xs:attribute>
       </xs:complexType>
    </xs:element>

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi Rouven,
      danke für die rasche Antwort, kann ich auch einen Typ definieren, der Deiner Definition entspricht und den ich für unterschiedliche Elemente nutzen kann?

      Danke,
      Tom

      1. Hi,

        das müsste ohne Probleme gehen, es ist ja erstmal ein complexType wie jeder andere auch, gib dem Kind einen Namen und verwende ihn...

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
        1. Danke Rouven,

          ich habe nun erstmal folgenden Vorschlag von Dir integriert:

          <xs:element name="test">
             xs:complexType
                xs:simpleContent
                   xs:restriction
                      <xs:enumeration value="COPY"></xs:enumeration>
                      <xs:enumeration value="MOVE"></xs:enumeration>
                      <xs:enumeration value="DELE"></xs:enumeration>
            </xs:restriction>
                </xs:simpleContent>
                <xs:attribute name="major" type="xs:integer" use="required"></xs:attribute>
                <xs:attribute name="minor" type="xs:integer" use="required"></xs:attribute>
             </xs:complexType>
          </xs:element>

          Beim Validieren bekomme ich folgende Fehlermeldung:
          The BASE attribute must be specified for the RESTRICTION or EXTENSION element

          Dies bezieht sich auf die 4.Zeile xs:restriction
          setze ich nun einen Base Type:
          <xsd:restriction base="xsd:string">

          bekomme ich die Fehlermeldung:
          The type 'xsd:string' is a simple type. It cannot be used in a derivation by RESTRICTION for a complexType

          Hast Du da vielleicht noch eine Idee?
          P.S. Ich muss immer xsd statt xs verwenden.

          Danke und Gruß,
          Tom

          Hi,

          das müsste ohne Probleme gehen, es ist ja erstmal ein complexType wie jeder andere auch, gib dem Kind einen Namen und verwende ihn...

          MfG
          Rouven

          1. Hi,

            ich lerne gerade mit dir zusammen... Schau mal hier: http://www.edition-w3c.de/TR/2001/REC-xmlschema-0-20010502/#K2.5.1

            MfG
            Rouven

            --
            -------------------
            ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
            1. Guter Tipp,
              bin auch schon auf der Seite gewesen.
              Ich habe eine Lösung erarbeitet und zwar muss man erst
              einen simpleType erstellen, in dem eine restriction
              base="xsd:string" steht. Darin nun die Enumerations
              aufzählen und den ganzen Block in einem complexType
              -> simpletContent als extension base="..." verwenden.

              Beispielsweise so:

              <xsd:element name="Tool">
                  xsd:complexType
                      xsd:simpleContent
                          <xsd:extension base="_ToolType">
                              <xsd:attribute name="Major" use="required" type="xsd:integer"/>
                              <xsd:attribute name="Minor" use="required" type="xsd:integer"/>
                          </xsd:extension>
                      </xsd:simpleContent>
                  </xsd:complexType>
              </xsd:element>

              <xsd:simpleType name="_ToolType">
                  <xsd:restriction base="xsd:string">
                      <xsd:enumeration value="COPY"/>
                <xsd:enumeration value="MOVE"/>
                <xsd:enumeration value="DELE"/>
                  </xsd:restriction>
              </xsd:simpleType>

              Zusammen lernen macht Spass :-)

              Hi,

              ich lerne gerade mit dir zusammen... Schau mal hier: http://www.edition-w3c.de/TR/2001/REC-xmlschema-0-20010502/#K2.5.1

              MfG
              Rouven