# XRechnung doğrulayıcısında XML şema hataları (cvc-…)

- 2026-09-30

Şema hataları, XML yapısının UBL veya CII XSD şemasına uymadığı anlamına gelir. Önce bunları düzeltin: doğrulayıcı iş kurallarını ancak şema denetimi geçildikten sonra denetler.

> cvc- kodu bir XML şema hatasıdır: bir öğe yanlış sırada, eksik, bilinmiyor, yanlış ad alanında ya da değeri yanlış biçimde. KoSIT doğrulayıcısı iş kurallarını (BR-…) ancak dosya şema denetimini geçtikten sonra denetler.

## Şema hataları ve iş kuralları

KoSIT doğrulayıcısı bir XRechnung’u üç adımda denetler: iyi biçimlendirilmiş XML, XML şeması (XSD), ardından iş kuralları (Schematron).

UBL 2.1 veya CII D16B XML şeması hangi öğelerin var olduğunu, hangi sırada geldiklerini, hangilerinin zorunlu olduğunu ve bir değerin veri türünü tanımlar. EN 16931 ve XRechnung iş kuralları (BR-…, BR-DE-…) içeriği denetler, örneğin toplamları, KDV’yi ve zorunlu fatura bilgilerini.

Şema denetimi başarısız olursa doğrulayıcı iş kurallarını çalıştırmaz. Bu nedenle şema hatalarını düzelttikten sonra yeni iş kuralı hataları görünebilir. Bu beklenen bir durumdur.

> **Kodlar nereden gelir**: Kodlar, W3C XML Schema spesifikasyonundaki doğrulama kurallarını gösterir, örneğin bir öğenin içeriği için cvc-complex-type. KoSIT’in kullandığı XML ayrıştırıcısı bunları dosyanızdaki satır ve sütunla birlikte bildirir.

## Sık görülen mesajlar ve düzeltmeleri

| Kod | Anlamı | Tipik düzeltme |
| --- | --- | --- |
| cvc-complex-type.2.4.a | Bir öğe, şemanın kabul etmediği bir konumda: yanlış sıra, oraya ait olmayan bir öğe ya da önünde eksik zorunlu bir öğe. | Sırayı "One of … is expected" listesiyle karşılaştırın. Öğeyi taşıyın ya da önüne eksik öğeyi ekleyin. |
| cvc-complex-type.2.4.b | Bir öğe, zorunlu bir alt öğeden önce bitiyor. | Eksik öğeyi ekleyin. Zorunlu olan genellikle listelenen öğelerin sonuncusudur. |
| cvc-complex-type.2.4.d | Bir öğe, şemanın izin verdiği son alt öğeden sonra geliyor. | Öğeyi kaldırın ya da doğru üst öğeye taşıyın. |
| cvc-datatype-valid.1.2.1 ile cvc-complex-type.2.2 veya cvc-type.3.1.3 | Bir değer veri türüne uymuyor, örneğin tarih veya ondalık sayı. | Tarihler YYYY-AA-GG biçiminde, tutarlar ondalık ayırıcı olarak noktayla, göstergeler için true veya false. |
| cvc-complex-type.4 | Zorunlu bir nitelik eksik, örneğin bir tutardaki currencyID. | Niteliği ekleyin, örneğin currencyID="EUR". |
| cvc-complex-type.3.2.2 | Bir öğede, şemanın bu öğe için tanımlamadığı bir nitelik var. | Niteliği kaldırın veya yazımını düzeltin (büyük ve küçük harf fark eder). |
| cvc-complex-type.2.3 | Başka öğeleri gruplayan bir öğe metin içeriyor. | Metni doğru alt öğeye yazın. |
| cvc-minLength-valid, cvc-maxLength-valid ile cvc-attribute.3 | Bir değer çok kısa veya çok uzun, örneğin bir CII ölçüsünde boş unitCode. | İzin verilen karakter sayısında bir değer girin. |
| cvc-pattern-valid, cvc-enumeration-valid | Bir değer bir desene veya sabit bir listeye uymuyor. XRechnung 3.0.2’nin UBL ve CII şemaları fatura verileri için böyle kısıtlamalar tanımlamaz; kod listelerini iş kuralları (BR-CL-…) denetler. | Mesajın belirttiği biçimi veya değeri kullanın. |
| Content is not allowed in prolog, must be terminated by the matching end-tag, … | Dosya iyi biçimlendirilmiş bir XML değil. Hiçbir kural denetlenmedi. | XML söz dizimini düzeltin: XML bildiriminden önceki metin, kapanmamış öğeler, &amp; yerine &. |

## Örnekler

Yer tutucu değerler. Sıra, sabitlenmiş UBL 2.1 ve CII D16B şemalarına uyar.

### UBL, yanlış sıra: cbc:DueDate öğesinde cvc-complex-type.2.4.a
```
<cbc:ID>INV-1001</cbc:ID>
<cbc:DueDate>2026-02-14</cbc:DueDate>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
```

### UBL, doğru: cbc:IssueDate, cbc:DueDate öğesinden önce
```
<cbc:ID>INV-1001</cbc:ID>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:DueDate>2026-02-14</cbc:DueDate>
```

### Yanlış veri türleri: cvc-datatype-valid.1.2.1
```
<cbc:IssueDate>15.01.2026</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119,00</cbc:PayableAmount>
```

### Doğru: ISO tarihi ve ondalık ayırıcı olarak nokta
```
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:PayableAmount currencyID="EUR">119.00</cbc:PayableAmount>
```

### CII, yanlış sıra: ram:TypeCode öğesinde cvc-complex-type.2.4.a
```
<rsm:ExchangedDocument>
  <ram:TypeCode>380</ram:TypeCode>
  <ram:ID>INV-1001</ram:ID>
</rsm:ExchangedDocument>
```

### CII, doğru: ram:ID, ram:TypeCode öğesinden önce
```
<rsm:ExchangedDocument>
  <ram:ID>INV-1001</ram:ID>
  <ram:TypeCode>380</ram:TypeCode>
</rsm:ExchangedDocument>
```

## Şema hataları nasıl düzeltilir

1. Önce iyi biçimlendirilmemiş dosyayı düzeltin. XML iyi biçimlendirilmeden başka hiçbir denetim çalışmaz.
2. İlk şema hatasıyla başlayın ve satır ile sütununu kullanın. Bir yapı hatası aynı öğedeki başka hataları gizleyebilir.
3. "One of … is expected" ifadesini okuyun: bunlar şemanın bu konumda kabul ettiği öğelerdir, şema sırasıyla.
4. XML’i elle düzenlemek yerine ERP veya faturalama yazılımınızdaki dışa aktarmayı düzeltin; böylece sonraki fatura da doğru olur.
5. Yeniden doğrulayın. Şema hataları düzeltildikten sonra iş kuralı hataları bekleyin.

## Sık sorulan sorular

### Doğrulayıcı neden dosyamda bulunan bir öğeyi bildiriyor?
Genellikle öğe yanlış sıradadır. Örneğin UBL, cbc:IssueDate öğesini cbc:DueDate öğesinden önce ister. cbc:DueDate önce gelirse doğrulayıcı cbc:DueDate için cvc-complex-type.2.4.a bildirir ve beklenen olarak cbc:IssueDate öğesini gösterir.

### Şema hatalarını düzelttikten sonra neden yeni BR hataları görüyorum?
Doğrulayıcı iş kurallarını ancak dosya şema denetimini geçtikten sonra denetler. Daha önce bunlar denetlenmemişti.

### Satır ve sütun benim dosyamı mı gösterir?
Evet, dosyayı tam olarak yüklediğiniz haliyle. Dosyayı yeniden biçimlendirir veya dönüştürürseniz konumlar değişir.

## Sonraki adımlar

- [Düzeltilmiş dosyayı XRechnung doğrulayıcısıyla denetleyin](/xrechnung-validator)
- [İş kuralı hataları: KoSIT hata kataloğu](/resources/kosit-validator-errors)
