Значение xs:ID обозначает один объект документа, а xs:IDREF ссылается на такой идентификатор. Xerces использует cvc-id.1 для отсутствующей цели и cvc-id.2 для повторного ID. Проверка зависит от отношений во всём XML, а не только от формы отдельных значений.
Что сообщение означает буквально
В первом примере существует A1, но ссылка указывает на отсутствующий A2. Замена ссылки на A1 восстанавливает связь. Во втором две записи получают A1; назначение второй записи A2 возвращает уникальность. При изменении настоящего ID необходимо также обновить все ссылки, которые должны обозначать именно эту запись.
Три частые причины для проверки
Целевая запись отфильтрована, перенесена в другой документ или переименована без обновления ссылок. IDREF проверяет текущий XML, а не удалённую базу приложения.
Генератор выдал одинаковые ID разным объектам. При объединении фрагментов могут появиться коллизии, хотя каждый исходный фрагмент был корректен отдельно.
Поля не типизированы как xs:ID и xs:IDREF. Строковый атрибут с названием id не получает свойства схемной идентичности автоматически.
Исправление и повторная проверка
Соберите все типизированные ID и ссылки из полного документа, затем проверьте уникальность и отсутствующие цели отдельно. Установите исходные записи каждой коллизии перед повторной генерацией значений. Запускайте проверку после добавления всех целей: ссылка вперёд допустима, поэтому её появление раньше целевого элемента само по себе не является ошибкой.
Когда причина в пространстве имён
Значения ID здесь являются идентификаторами, а не квалифицированными именами элементов. Изменение xmlns не создаёт A2 и не делает два A1 различными. Namespace важен, когда из-за квалификации атрибут не получает задуманный тип; сначала убедитесь, что объявление идентичности действительно применяется.
Как сопоставлять отчёты движков
Измеренный 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-валидацию.
Успешные исправления относятся к этим самодостаточным образцам XSD 1.0. Они не подтверждают выполнение бизнес-правил для другого документа или выпуска схемы.