11 Stimmen

XML-Schema: Festlegen eines Standardwerts für einen complexType?

Nehmen wir an, ich möchte einen generischen complexType wie folgt einrichten:

<xs:complexType name="button">
    <xs:sequence>
        <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="href" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

Und ich möchte diesen complexType an verschiedenen Stellen in meiner Schemadatei referenzieren, etwa so:

<xs:element name="someButton" type="button" />

Ist es möglich für mich, Standardwerte für die Schaltfläche Unterelemente durch das someButton-Element festlegen? (z.B. wenn ich möchte, dass someButton eine Standardbeschriftung von "Go" oder eine Standard-Href von "index.html" hat)

Im Grunde... habe ich im Moment etwas wie

<Field Name="State" DataSourceField="State" />

und ich versuche, die Redundanz so einfach wie möglich zu beseitigen.

23voto

13ren Punkte 11339

Nein, nur für einfache Werte. Aber vielleicht können Sie sie verwenden, um das zu tun, was Sie wollen, indem Sie Standardwerte für alle einfachen Teile Ihres komplexen Typs angeben. Allerdings funktioniert dies besser für Attribute als für die Elemente, die Sie haben (denn "Standardwerte für Attribute gelten, wenn Attribute fehlen, und Standardwerte für Elemente gelten, wenn Elemente leer sind" - siehe unten). Attribute selbst sind standardmäßig optional:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="button" type="button"/>
  <xs:complexType name="button">
    <xs:attribute name="id" type="xs:string"/>
    <xs:attribute name="href" type="xs:string" default="index.html"/>
    <xs:attribute name="label" type="xs:string" default="Go"/>
  </xs:complexType>
</xs:schema>

<button id="1"/>

Standardwerte sowohl für Attribute als auch für Elemente werden mit dem Attribut default deklariert, wobei dieses Attribut in jedem Fall eine etwas andere Bedeutung hat. Wenn ein Attribut mit einem Standardwert deklariert wird, ist der Wert des Attributs derjenige Wert, der als Wert des Attributs in einem Instanzdokument erscheint; wenn das Attribut nicht im Instanzdokument erscheint, gibt der Schemaprozessor dem Attribut einen Wert, der dem des Standardattributs entspricht. Beachten Sie, dass Standardwerte für Attribute nur dann sinnvoll sind, wenn die Attribute selbst optional sind. Es ist daher ein Fehler, sowohl einen Standardwert als auch einen anderen Wert als optional für die Verwendung anzugeben.

Der Schemaprozessor behandelt voreingestellte Elemente etwas anders. Wenn ein Element mit einem Standardwert deklariert wird, ist der Wert des Elements der Wert, der als Inhalt des Elements im Instanzdokument erscheint; wenn das Element ohne Inhalt erscheint, gibt der Schemaprozessor dem Element einen Wert, der dem des Standardattributs entspricht. Wenn das Element jedoch nicht im Instanzdokument vorkommt, stellt der Schemaprozessor das Element überhaupt nicht bereit. Zusammenfassend lassen sich die Unterschiede zwischen Element- und Attribut-Standardwerten wie folgt beschreiben: Standardwerte für Attribute gelten, wenn Attribute fehlen, und Standardwerte für Elemente gelten, wenn Elemente leer sind. [Hervorhebung hinzugefügt]

http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X