Значення xs:ID позначає один об’єкт документа, а xs:IDREF посилається на такий ідентифікатор. Xerces застосовує cvc-id.1 до відсутньої цілі та cvc-id.2 до повторного ID. Перевірка залежить від зв’язків у цілому документі, а не лише від форми окремих значень.
Що повідомлення означає буквально
Перший зразок містить A1, але посилається на відсутній A2. Заміна посилання на A1 відновлює зв’язок. У другому два записи мають A1; призначення другому A2 повертає унікальність. Під час зміни справжнього ID також оновіть усі посилання, які мають позначати саме цей об’єкт.
Три поширені причини для перевірки
Цільовий запис відфільтровано, перенесено до іншого документа або перейменовано без оновлення посилань. IDREF перевіряє поточний XML, а не віддалену базу.
Генератор призначив однакові ID різним записам. Об’єднання фрагментів може утворити колізії, хоча кожен початковий фрагмент окремо був правильним.
Поля не типізовано як xs:ID і xs:IDREF. Звичайний рядковий атрибут на ім’я id автоматично не отримує семантики схемної ідентичності.
Виправлення та повторна перевірка
Зберіть усі типізовані ID та посилання повного документа, потім окремо перевірте унікальність і відсутні цілі. Простежте початкові записи кожної колізії перед повторною генерацією значень. Запускайте перевірку після додавання всіх цілей: посилання вперед допустиме, тож поява посилання раніше за ціль сама по собі не доводить порушення.
Коли причина у просторі імен
Значення ID тут є ідентифікаторами, а не кваліфікованими назвами елементів. Зміна xmlns не створює A2 і не робить два A1 різними. Простори імен важливі, якщо кваліфікація заважає атрибуту отримати задуманий тип. Переконайтеся, що оголошення ідентичності справді застосоване до потрібного поля.
Як зіставляти звіти рушіїв
Виміряний libxml2/WASM пропускає відсутню ціль, тоді як Xerces, .NET і другий рушій XSDHub її відхиляють. Кнопки IDREF вибирають другий рушій із непозначеним дозволом надсилання. Завантаження нічого не відправляє: для запуску позначте згоду та натисніть Validate XML. Повторний ID локальна перевірка виявляє, як показано окремо.
Повні перевірені пари XML та XSD
Відкрийте потрібний варіант у редакторі й натисніть Validate XML. Завантаження прикладу не запускає перевірку та не надсилає документи; серверний режим потребує окремої згоди.
cvc-id.1: There is no ID/IDREF binding for IDREF 'A2'.
PASS
.NET 8.0.33 · System.Xml.Schema Validation
Reference to undeclared ID is 'A2'.
PASS (no warnings)
XSDHub libxml2/WASM 0.7.2 Validation
PASS: no validation diagnostic.
PASS
XSDHub xmlschema 4.3.1 · XSD 1.0 Validation
IDREF 'A2' not found in XML document
PASS
Saxon
Зіставлення з EE: cvc-id.1 позначає відповідне обмеження XSD. Запуск Saxon-EE та буквальне формулювання не заявлено: ліцензія EE недоступна. Saxon-HE не виконує XSD-валідацію.
cvc-id.2: There are multiple occurrences of ID value 'A1'.
cvc-attribute.3: The value 'A1' of attribute 'id' on element 'item' is not valid with respect to its type, 'ID'.
PASS
.NET 8.0.33 · System.Xml.Schema Validation
'A1' is already used as an ID.
PASS (no warnings)
XSDHub libxml2/WASM 0.7.2 Validation
Element 'item', attribute 'id': 'A1' is not a valid value of the atomic type 'xs:ID'.
PASS
XSDHub xmlschema 4.3.1 · XSD 1.0 Validation
attribute id='A1': duplicated xs:ID value 'A1'
PASS
Saxon
Зіставлення з EE: cvc-id.2 позначає відповідне обмеження XSD. Запуск Saxon-EE та буквальне формулювання не заявлено: ліцензія EE недоступна. Saxon-HE не виконує XSD-валідацію.