Атрибут XSD (не элемент) не должен быть пустой строкой

Какие изменения мне нужно внести в схему, определенную ниже, чтобы атрибут с именем code не был пустой строкой/валидацией, если код пуст?

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:attribute name="code" type="xsd:string"/>
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Child" nillable="false">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="childAge">
                                <xsd:simpleType>
                                    <xsd:restriction base="xsd:integer"/>
                                </xsd:simpleType>
                            </xsd:element>
                        </xsd:sequence>
                        <xsd:attribute ref="code" use="required"></xsd:attribute>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
</xsd:element>


person Param Bhat    schedule 09.03.2014    source источник
comment
Для элемента мы можем проверить, является ли это пустой строкой или нет, проверив минимальную длину. Для атрибута возможно не уверен??. Поправьте меня, если я ошибаюсь   -  person Param Bhat    schedule 09.03.2014


Ответы (1)


Тип xsd:string type включает пустую строку, поэтому использование

<Child code="">

Является действительным в соответствии с вашей схемой. Есть несколько способов ограничить тип. Если вы просто хотите ограничить длину, которую вы можете использовать:

<xsd:attribute name="code">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:attribute>

Или вы можете использовать тип, который не включает пустую строку как допустимую, например:

<xsd:attribute name="code" type="xsd:NMTOKEN" />

что также не позволит использовать специальные символы или пробелы. Если ваш код требует определенного шаблона, вы можете указать его в регулярном выражении, например:

<xsd:restriction base="xsd:string">
    <xsd:pattern value="[A-Z][0-9]{4}"/>
</xsd:restriction>

который также не будет проверять пустые строки.

person helderdarocha    schedule 09.03.2014
comment
Спасибо...работает..... - person Param Bhat; 09.03.2014