Проблема здесь в строке:
xmlns="http://tempuri.org/XMLSchema1.xsd"
Эта строка говорит, что любые QNames, которые не имеют префикса пространства имен, должны обрабатываться так, как если бы пространство имен было http://tempuri.org/XMLSchema1.xsd
. Это называется пространством имен по умолчанию.
Атрибут refer
в элементе xs:keyref
является одним из этих QNames, и для него установлено значение ChildNamePK
, которое не имеет префикса пространства имен. Поскольку префикса пространства имен нет, и поскольку вы определили пространство имен по умолчанию, схема XML эффективно обрабатывает это, как если бы оно было
refer="{http://tempuri.org/XMLSchema1.xsd}ChildNamePK"
т.е. как если бы он ссылался на элемент ChildNamePK в пространстве имен http://tempuri.org/XMLSchema1.xsd
.
Однако, удаляя targetNamespace
, вы говорите, что ваши элементы, включая ключ ChildNamePK, не находятся в пространстве имен. То, что атрибуты refer
не существуют на самом деле. Вот что пытается сказать вторая ошибка - она ищет http://tempuri.org/XMLSchema1.xsd:ChildNamePK'
, но ее не существует.
Правильное решение здесь, вероятно, состоит в том, чтобы просто удалить строку xmlns="..."
, чтобы не было пространства имен по умолчанию. Таким образом, атрибут reference будет ссылаться на QName, который не находится в пространстве имен, что в точности соответствует ChildNamePK при удалении строки targetNamespace.