tutorial - xsd validator



Element-obligatorische Attributdeklaration im XSD-Schema: (3)

Ich möchte ein Element deklarieren, das in einer Deklaration eines komplexen Typs enthalten sein soll, und das Element hat ein obligatorisches Attribut: "option = MyOption", aber der Wert des Attributs "option" kann alles sein, abhängig vom Kontext.

Das heißt: Das Attribut "option" mit einem unbekannten Wert sollte in jedem Dokument obligatorisch sein, das den komplexen Typ verwendet, der dieses Element enthält.

Beispiel:

    <xs:element name="SpecialOption" type="xs:string"/>

    <xs:complexType name="SpecialOptions">
        <xs:sequence>
            <xs:element ref="SpecialOption" minOccurs="1" maxOccurs="100"/>
            <xs:element ref="XXX"/>     
        </xs:sequence>
    </xs:complexType>   

In diesem Fall sollte das Element "SpecialOption" im komplexen Typ "SpecialOptions" dieses obligatorische Attribut haben.

Ich weiß nicht, wie ein obligatorisches Attribut für ein Element in XSD deklariert wird oder wie angegeben wird, dass das Attribut einen Wert haben muss, der noch nicht bekannt ist.

https://code.i-harness.com


Sie müssen die Definition des Elements "SpecialOption" so ändern, dass sie das erforderliche Attribut enthält. Aktualisiere diesen Code:

<xs:element name="SpecialOption" type="xs:string"/>

zu diesem:

<xs:element name="SpecialOption">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Option" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

Mit dieser Änderung enthält Ihr komplexer Typ das erforderliche Attribut "Option" für alle Instanzen des Elements "SpecialOption" im komplexen Typ "SpecialOptions". Wenn das Attribut "Option" auf den Typ xs:string wird, kann jeder Wert in diesem Feld übergeben werden.


Um ein Attribut als obligatorisch zu kennzeichnen, verwenden Sie <xs:attribute use="required" /> .

Was den Typ <xs:simpleType /> , haben Sie die Wahl zwischen den eingebauten XSD-Typen (xs: string usw.) oder Sie können Ihren eigenen <xs:simpleType /> und diesen verwenden.

AKTUALISIEREN

Ich bin nicht sicher, was Sie mit dem Attribut meinen , muss einen Wert haben, der noch nicht bekannt ist . Bedeutet dies, dass der Wert eine Zeichenfolge ist, aber eine beliebige Zeichenfolge sein kann? Oder eine Dezimalzahl?

Da es sich um einen Attributwert handelt, über den Sie sprechen, sind Sie darauf beschränkt, die integrierten XSD-Typen zu verwenden oder Ihren eigenen Typ xs:simpleType basierend auf einem der integrierten Typen zu definieren. Hier können Sie stringentere Regeln auf den zulässigen Wert anwenden, indem Sie beispielsweise xs:string und eine Einschränkung für reguläre Ausdrücke zu zulässigen Werten hinzufügen.

<xsd:simpleType name="UKDate">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)\d\d"/>
    </xsd:restriction>
</xsd:simpleType>

Wenn es jedoch absolut keine Möglichkeit gibt zu wissen, welcher Wert verwendet wird, dann haben Sie das wohlbekannte zeitliche Paradoxon, bei dem Sie etwas zur Entwurfszeit nicht auf einen Wert beschränken können, den Sie nur zur Laufzeit kennen. In diesem Fall ist es sicherlich nur notwendig zu spezifizieren, dass das Attribut mindestens vorhanden sein muss?

<xs:attribute use="required" />

Hoffe das beantwortet deine Frage ein wenig deutlicher.


Sie können es einfach wie folgt tun

<xs:element name="SpecialOption">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:whiteSpace value="replace"/>
          <xs:minLength value="1"></xs:minLength>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>

Mit diesem Code erzwingen Sie, dass ein Wert in das xml-Tag eingefügt wird. Außerdem wird die Leerraumbeschränkung verwendet, um den Leerraum vom xml-Tag zu entfernen.