cvc-complex-type.4: chybí povinný atribut (XSD)

cvc-complex-type.4: Attribute 'id' must appear on element 'kniha' hlásí Java (Xerces), když elementu chybí atribut, který schéma deklaruje s use="required". libxml2 (PHP, xmllint) píše The attribute 'id' is required but missing, .NET The required attribute 'id' is missing. Dokument je dobře utvořený, chyba vzniká až při validaci proti XSD.

Autor: Aktualizováno

Znění hlášky v jednotlivých validátorech

Parser Hláška
libxml2 2.13 a novější PHP (DOM, SimpleXML), xmllint, Python lxml, validátor na XML.cz Element 'kniha': The attribute 'id' is required but missing.
Java (Xerces) DocumentBuilder, SAXParser, JAXB, Spring, Maven cvc-complex-type.4: Attribute 'id' must appear on element 'kniha'.
.NET XmlDocument, XDocument, XmlReader The required attribute 'id' is missing.

Číslo cvc-complex-type.4 odkazuje na pravidlo „Element Locally Valid (Complex Type)“ ve specifikaci XML Schema 1.0, část 1. Hláška vždy jmenuje element, kde atribut chybí, a atribut, který schéma vyžaduje.

Příčina a oprava

XSD pro reprodukci
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="kniha">
    <xs:complexType>
      <xs:attribute name="id" type="xs:NCName" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Chybí atribut s use="required"

Chybně
<kniha/>
Opraveno
<kniha id="k1"/>

Přidej atribut s hodnotou odpovídající jeho datovému typu. Prázdný atribut nemusí být platný: id="" nevyhoví typu xs:NCName.

Jak najít příčinu

Ověř, že validuješ správnou verzí XSD: atribut mohl přibýt v nové verzi formátu. Zkontroluj také jmenný prostor atributu. Atribut s prefixem (x:id) je jiný atribut než id, i když se jmenuje stejně.

Jak chybu opravit

Pokud je atribut podle požadavků příjemce volitelný, uprav schéma i odběratele dat. Neměň use na optional pouze proto, aby vadná data prošla. Atributy a jejich deklarace vysvětluje kapitola XML Schema (XSD).