XSD Схема Уникальное ограничение не работает для числовых значений?

Рассмотрим эту схему XSD, в результате чего на следующем графике

<?xml version="1.0" encoding="UTF-8"?>
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" 
    xmlns:target="http://www.url.com/validation" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
    elementFormDefault="qualified" attributeFormDefault="unqualified">

    <s:element name="myObjects" type="typeObjects">
        <s:unique name="uniqueObjectId">
            <s:selector xpath="myObject"/>
            <s:field xpath="id"/>
        </s:unique>
    </s:element>
    <s:complexType name="typeObjects">
        <s:sequence maxOccurs="unbounded">
            <s:element name="myObject">
                <s:complexType>
                    <s:complexContent>
                        <s:extension base="typeObject"/>
                    </s:complexContent>
                </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
    <s:complexType name="typeObject">
        <s:sequence>
            <s:element name="id" type="s:int"/>
        </s:sequence>
    </s:complexType>
</s:schema>

все еще проходит проверку

Обратите внимание на уникальное ограничение, установленное для элемента "id", типизированный как s:int.

Следующий экземпляр XML все еще проверяет, даже имея тот же <id>1</id> дважды!

<?xml version="1.0" encoding="utf-8"?>
<myObjects 
    xmlns:target="http://www.url.ch/validation" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="unique.xsd">

    <myObject>
        <id>1</id>
    </myObject>

    <myObject>
        <id>1</id>
    </myObject>
</myObjects>

Я могу принудительно выполнить условие сбоя, если я изменю тип элемента на s:string

Это больше не будет проверять экземпляр XML, как и ожидалось: не проходит проверку, как ожидалось

Я пробовал валидацию в oXygen XML и ALtova XML Spy с одинаковым результатом соответственно.

Вопрос, очевидно, является ли это ошибкой или известным ограничением в реализации XSD с уникальными ограничениями?

2 ответа

Ваш XSD выглядит хорошо, и я подтвердил это с кислородом. Я получил ожидаемую ошибку:

cvc-identity-constraint.4.1: Duplicate unique value [1] declared for identity 
constraint "uniqueObjectId" of element "myObjects".

Я вижу, что проверка правильности работает для SAXON-EE 9.6.0.7

Non-unique value found for constraint uniqueObjectId: 1

и для других двигателей.

Попробуйте проверить свои сценарии проверки, кэширование и имена файлов.

Я думаю, что обнаружил, в чем проблема. При использовании механизма проверки Xerces в oXygen проверка проходит, если элемент имеет тип int. При использовании саксонского движка для разбора он работает в любом случае!

Поэтому я уверен, что это ошибка в Xerces.

введите описание изображения здесь

Другие вопросы по тегам