Nikitaras: XML-Schema restriction

hallo leute, i need some help pls!

<?xml version="1.0"?>
<liste
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="4.xsd">
	<steuerid>DE9283749039</steuerid>
	<steuerid>DE6548975642</steuerid>
	<steuerid>DE7547896521</steuerid>
	<steuerid>DE4548971320</steuerid>
</liste>

Zu diesem Code will ich ein XSL-Schema-File schreiben, dass steuerid so einschränkt, dass man nur werte im format DExxxxxxxxxx (für alle x gilt: element aus den nichtnegativen ganzen zahlen und kleiner als 10) eingeben darf!

mein ansatz sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="liste">
		<xsd:complexType>
			<xsd:element ref="steuerid" maxOccurs="unbounded"/>	
		</xsd:complexType>
	</xsd:element>
	<xsd:simpleType name="steuerid">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[D]{1}[E]{1}\d{10}"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>

das funktioniert allerdings nicht!

es hakt an der stelle, wie ich den typ steuerid im typ liste einbauen kann!

vielen dank!

akzeptierte Antworten

  1. Hallo Nikitaras,

    es hakt an der stelle, wie ich den typ steuerid im typ liste einbauen kann!

    ref verweist auf ein steuerid-Element, welches aber im Schema nicht existiert. Dieses Element erhält die type-Zuweisung. Natürlich muss auch noch die Elementsequenz vorhanden sein. So validiert das XML-Dokument:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
      <xsd:element name="liste">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element ref="steuerid" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    
      <xsd:element name="steuerid" type="steuerid"/>
    
      <xsd:simpleType name="steuerid">
        <xsd:restriction base="xsd:string">
          <xsd:pattern value="[D]{1}[E]{1}\d{10}"/>
        </xsd:restriction>
      </xsd:simpleType>
    
    </xsd:schema>
    

    Beim RegEx reicht <xsd:pattern value="DE\d{10}"/>.

    Grüße,
    Thomas

    1. Hi, könnt mans dann nicht auch so schreiben; also dass man keine referenz auf ein element erstellt, sondern den type direkt im element angibt?

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      
      	<xsd:element name="steuerliste">
      		<xsd:complexType>
      			<xsd:sequence>
      				<xsd:element name="steuerid" type="steuerid" maxOccurs="unbounded"/>
      			</xsd:sequence>
      		</xsd:complexType>
      	</xsd:element>
      
      	<xsd:simpleType name="steuerid">
      		<xsd:restriction base="xsd:string">
      			<xsd:pattern value="DE\d{10}"/>
      		</xsd:restriction>
      	</xsd:simpleType>
      
      </xsd:schema>
      

      Vielen Dank Nikitaras

      1. Hallo Nikitaras,

        Hi, könnt mans dann nicht auch so schreiben; also dass man keine referenz auf ein element erstellt, sondern den type direkt im element angibt?

        Ja, aber ich bin vom vorhandenen Code ausgegangen. Referenzen sind vor allem sinnvoll, wenn Elemente / Attribute mehrfach zum Einsatz kommen sollen bzw. man eine bessere Übersicht bei umfangreichen Strukturen haben möchte (Salami-Slice- vs. Russian-Doll-Ansatz).

        Grüße,
        Thomas

        1. Cool! Vielen Dank für die Informationen! :)