Elementinhalt und Attribute in XML-Schema definieren
tom_
- xml
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
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
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
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
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
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
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