100% в браузъра · файлът никога не напуска компютъра ви · безплатно, без регистрация

Речник на грешките · пълно ръководство

„This element is not expected“ (cvc-complex-type.2.4)

Най-честата схемна грешка в SAF-T. Валидаторът е стигнал до елемент, който според схемата няма право да стои на това място — защото друг липсва или защото редът е разбъркан.

КатегорияСхемна грешка (XSD)

Кога се хващаПри XSD валидация — файлът е синтактично валиден XML, но нарушава схемата

Типичен сигналcvc-complex-type.2.4.a / cvc-complex-type.2.4.b

Какво значи

SAF-T схемата описва всеки съставен елемент чрез xs:sequenceстрога последователност: кои деца се допускат, в какъв ред и колко пъти. Когато валидаторът срещне елемент, който не пасва на очакваното място в последователността, той докладва „this element is not expected“. Кодът на грешката подсказва варианта:

Примерно съобщение от валидатор (Xerces)cvc-complex-type.2.4.a: Invalid content was found starting with element 'Description'. One of '{AccountID}' is expected.

Съобщението винаги носи двете ключови парчета информация: кой елемент е срещнат (тук Description) и кой е очакван (списъкът в къдравите скоби — тук AccountID). Практически това значи едно от две:

  • Липсва задължителен елемент. Схемата чака AccountID, а той го няма — затова валидаторът се „спъва“ в следващия елемент и докладва него. Виновникът не е споменатият елемент, а липсващият преди него.
  • Елементите са в грешен ред. Всички данни са налице, но софтуерът ги е записал в друга последователност. За xs:sequence разместването е също толкова невалидно, колкото и липсата.

Защо се случва

  • Софтуерът пропуска елемент при празна стойност. Ако дадено поле е без съдържание за конкретния запис, някои експорти просто не го записват. За незадължителните елементи това е коректно; за задължителните — генерира тази грешка при всяко срещане.
  • Експортът е строен по друга версия на схемата. Ред и състав на елементите се променят между версиите. Файл, генериран по стара версия, се сблъсква с новата последователност.
  • Ръчно съставен или „закърпен“ XML. При ръчна намеса е лесно елемент да попадне на грешно ниво — например поле на реда да се озове на нивото на документа.
  • Разместване при сглобяване от няколко източника. Когато секциите идват от различни системи, редът на елементите в общия файл зависи от реда на сглобяване, а не от схемата.

Как се поправя

  1. Прочетете съобщението докрай: елементът в къдравите скоби е това, което схемата очаква. Съседният ред във файла ще ви покаже дали той липсва, или просто стои по-надолу.
  2. Проверете в справочника на елементите дали очакваният елемент е задължителен и какво е мястото му в родителя.
  3. Не поправяйте грешките една по една в XML-а. Обикновено една системна причина генерира десетки еднакви грешки — един пропуснат елемент на ниво запис се повтаря за всеки запис. Открийте защо софтуерът го пропуска или размества и поправете на едно място — в настройките или мапинга на експорта.
  4. Регенерирайте файла и валидирайте отново. Броят на грешките трябва да падне драстично, ако сте хванали системната причина.

Пример

Опростен пример: схемата изисква в описанието на сметка първо AccountID, после AccountDescription:

Грешно (разместен ред)
<Account>
  <AccountDescription>Клиенти</AccountDescription>
  <AccountID>411</AccountID>
</Account>
<!-- cvc-complex-type.2.4.a: Invalid
     content was found starting with
     element 'AccountDescription'.
     One of '{AccountID}' is expected. -->
Вярно (по реда на схемата)
<Account>
  <AccountID>411</AccountID>
  <AccountDescription>Клиенти</AccountDescription>
</Account>
Ако съобщението е cvc-complex-type.2.4.b и говори за „not complete“ — елементът е останал без задължителното си съдържание. Това е близък, но различен случай: вижте „Missing child element(s)“.
Не гадайте — проверете

Пуснете файла през безплатната проверка: всяка грешка идва с ред, обяснение и съвет. Проверете файла — безплатно, в браузъра.

Провери файла