Атрибут 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>

1 ответов


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

<Child code="">

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

<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>

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