# XML-Schema-Fehler (cvc-…) im XRechnung-Validator

- 2026-09-30

Schema-Fehler bedeuten, dass die XML-Struktur nicht zum XSD von UBL oder CII passt. Beheben Sie sie zuerst: Der Validator prüft die Geschäftsregeln erst, wenn die Schemaprüfung bestanden ist.

> Ein cvc-Code ist ein XML-Schema-Fehler: Ein Element steht in falscher Reihenfolge, fehlt, ist unbekannt, hat den falschen Namensraum oder einen Wert im falschen Format. Der KoSIT-Validator prüft die Geschäftsregeln (BR-…) erst, wenn die Datei die Schemaprüfung besteht.

## Schema-Fehler und Geschäftsregeln

Der KoSIT-Validator prüft eine XRechnung in drei Schritten: wohlgeformtes XML, XML-Schema (XSD), dann Geschäftsregeln (Schematron).

Das XML-Schema von UBL 2.1 oder CII D16B legt fest, welche Elemente es gibt, in welcher Reihenfolge sie stehen, welche Pflicht sind und welchen Datentyp ein Wert hat. Die Geschäftsregeln von EN 16931 und XRechnung (BR-…, BR-DE-…) prüfen den Inhalt, zum Beispiel Summen, Umsatzsteuer und Pflichtangaben.

Schlägt die Schemaprüfung fehl, führt der Validator die Geschäftsregeln nicht aus. Nachdem Sie die Schema-Fehler behoben haben, können deshalb neue Fehler in den Geschäftsregeln erscheinen. Das ist zu erwarten.

> **Woher die Codes kommen**: Die Codes verweisen auf Validierungsregeln der W3C-Spezifikation XML Schema, zum Beispiel cvc-complex-type für den Inhalt eines Elements. Der XML-Parser, den KoSIT verwendet, meldet sie mit Zeile und Spalte in Ihrer Datei.

## Häufige Meldungen und ihre Korrektur

| Code | Bedeutung | Typische Korrektur |
| --- | --- | --- |
| cvc-complex-type.2.4.a | Ein Element steht an einer Stelle, an der das Schema es nicht akzeptiert: falsche Reihenfolge, ein Element, das dort nicht hingehört, oder davor fehlt ein Pflichtelement. | Vergleichen Sie die Reihenfolge mit der Liste „One of … is expected“. Verschieben Sie das Element, oder ergänzen Sie das fehlende Element davor. |
| cvc-complex-type.2.4.b | Ein Element endet vor einem Pflicht-Kindelement. | Ergänzen Sie das fehlende Element. Das Pflichtelement ist meist das letzte der genannten Elemente. |
| cvc-complex-type.2.4.d | Ein Element folgt auf das letzte Kindelement, das das Schema erlaubt. | Entfernen Sie das Element, oder verschieben Sie es in das richtige Elternelement. |
| cvc-datatype-valid.1.2.1 mit cvc-complex-type.2.2 oder cvc-type.3.1.3 | Ein Wert passt nicht zu seinem Datentyp, zum Beispiel ein Datum oder eine Dezimalzahl. | Datumsangaben als JJJJ-MM-TT, Beträge mit Punkt als Dezimaltrennzeichen, true oder false für Kennzeichen. |
| cvc-complex-type.4 | Ein Pflichtattribut fehlt, zum Beispiel currencyID an einem Betrag. | Ergänzen Sie das Attribut, zum Beispiel currencyID="EUR". |
| cvc-complex-type.3.2.2 | Ein Element hat ein Attribut, das das Schema für dieses Element nicht definiert. | Entfernen Sie das Attribut, oder korrigieren Sie seine Schreibweise (Groß- und Kleinschreibung zählt). |
| cvc-complex-type.2.3 | Ein Element, das andere Elemente zusammenfasst, enthält Text. | Tragen Sie den Text in das richtige Kindelement ein. |
| cvc-minLength-valid, cvc-maxLength-valid mit cvc-attribute.3 | Ein Wert ist zu kurz oder zu lang, zum Beispiel ein leerer unitCode an einer CII-Mengenangabe. | Tragen Sie einen Wert mit der erlaubten Zeichenzahl ein. |
| cvc-pattern-valid, cvc-enumeration-valid | Ein Wert passt nicht zu einem Muster oder einer festen Liste. Die UBL- und CII-Schemas der XRechnung 3.0.2 definieren solche Einschränkungen für Rechnungsdaten nicht; Geschäftsregeln (BR-CL-…) prüfen die Codelisten. | Verwenden Sie das Format oder den Wert, den die Meldung nennt. |
| Content is not allowed in prolog, must be terminated by the matching end-tag, … | Die Datei ist kein wohlgeformtes XML. Keine Regel wurde geprüft. | Korrigieren Sie die XML-Syntax: Text vor der XML-Deklaration, nicht geschlossene Elemente, & statt &amp;. |

## Beispiele

Platzhalterwerte. Die Reihenfolge folgt den festgelegten Schemas UBL 2.1 und CII D16B.

### UBL, falsche Reihenfolge: cvc-complex-type.2.4.a an cbc:DueDate
```
<cbc:ID>INV-1001</cbc:ID>
<cbc:DueDate>2026-02-14</cbc:DueDate>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
```

### UBL, richtig: cbc:IssueDate vor cbc:DueDate
```
<cbc:ID>INV-1001</cbc:ID>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:DueDate>2026-02-14</cbc:DueDate>
```

### Falsche Datentypen: cvc-datatype-valid.1.2.1
```
<cbc:IssueDate>15.01.2026</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119,00</cbc:PayableAmount>
```

### Richtig: ISO-Datum und Punkt als Dezimaltrennzeichen
```
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119.00</cbc:PayableAmount>
```

### CII, falsche Reihenfolge: cvc-complex-type.2.4.a an ram:TypeCode
```
<rsm:ExchangedDocument>
  <ram:TypeCode>380</ram:TypeCode>
  <ram:ID>INV-1001</ram:ID>
</rsm:ExchangedDocument>
```

### CII, richtig: ram:ID vor ram:TypeCode
```
<rsm:ExchangedDocument>
  <ram:ID>INV-1001</ram:ID>
  <ram:TypeCode>380</ram:TypeCode>
</rsm:ExchangedDocument>
```

## So beheben Sie Schema-Fehler

1. Beheben Sie zuerst Fehler in der Wohlgeformtheit. Solange das XML nicht wohlgeformt ist, läuft keine andere Prüfung.
2. Beginnen Sie mit dem ersten Schema-Fehler und nutzen Sie Zeile und Spalte. Ein Strukturfehler kann weitere Fehler im selben Element verdecken.
3. Lesen Sie „One of … is expected“: Das sind die Elemente, die das Schema an dieser Stelle akzeptiert, in der Reihenfolge des Schemas.
4. Korrigieren Sie den Export in Ihrem ERP- oder Rechnungsprogramm, statt das XML von Hand zu ändern. Dann ist auch die nächste Rechnung richtig.
5. Validieren Sie erneut. Rechnen Sie nach den Schema-Fehlern mit Fehlern in den Geschäftsregeln.

## Häufige Fragen

### Warum meldet der Validator ein Element, das in meiner Datei vorhanden ist?
Meist steht das Element in der falschen Reihenfolge. UBL verlangt zum Beispiel cbc:IssueDate vor cbc:DueDate. Steht cbc:DueDate zuerst, meldet der Validator cbc:DueDate mit cvc-complex-type.2.4.a und nennt cbc:IssueDate als erwartet.

### Warum sehe ich neue BR-Fehler, nachdem ich die Schema-Fehler behoben habe?
Der Validator prüft die Geschäftsregeln erst, wenn die Datei die Schemaprüfung besteht. Vorher wurden sie nicht geprüft.

### Beziehen sich Zeile und Spalte auf meine Datei?
Ja, auf die Datei genau so, wie Sie sie hochgeladen haben. Wenn Sie die Datei neu formatieren oder umwandeln, ändern sich die Positionen.

## Nächste Schritte

- [Korrigierte Datei mit dem XRechnung-Validator prüfen](/xrechnung-validator)
- [Fehler in den Geschäftsregeln: KoSIT-Fehlerkatalog](/resources/kosit-validator-errors)
