Почему мой элемент схемы XML не принимает число?

В XMLSpy существует ошибка проверки: "Значение" 18 "недопустимо для атрибута" имя ". Подсказка: допустимым значением будет" NCName ". Расположение ошибки: xs: схема / xs: элемент / xs:complexType / xs:choice / xs:element / xs:complexType / xs:choice / xs:element / @name"здесь:

<xs:element name="Age">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="18" type="xs:int"/>

Если я ввожу буквы, это подтверждает, но мне нужны цифры в этом поле.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.urent.com/Elmhurst" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.urent.com/Elmhurst" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="URent">
        <xs:annotation>

        </xs:annotation>
        <xs:complexType>
            <xs:choice>
                <xs:element name="RentalPeriod">
                    <xs:complexType>
                        <xs:all>
                            <xs:element name="StartDate" type="xs:date"/>
                            <xs:element name="EndDate" type="xs:date"/>
                        </xs:all>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Age">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="18" type="xs:int"/>
                        <xs:element name="19" type="xs:int"/>
                        <xs:element name="20" type="xs:int"/>
                        <xs:element name="21" type="xs:int"/>
                        <xs:element name="22" type="xs:int"/>
                        <xs:element name="23" type="xs:int"/>
                        <xs:element name="24" type="xs:int"/>
                        <xs:element name="25+" type="xs:int"/>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="RateCode">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="Corporate" type="xs:string"/>
                        <xs:element name="Leisure" type="xs:string"/>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="TypeOfVehicle">
                <xs:complexType>
                    <xs:all>
                        <xs:element name="Subcompact" type="xs:string"/>
                        <xs:element name="Compact" type="xs:string"/>
                        <xs:element name="Intermediate" type="xs:string"/>
                        <xs:element name="Standard" type="xs:string"/>
                        <xs:element name="Full Size" type="xs:string"/>
                        <xs:element name="Premium" type="xs:string"/>
                        <xs:element name="Luxury" type="xs:string"/>
                        <xs:element name="Standard Elite SUV" type="xs:string"/>
                        <xs:element name="Intermediate SUV" type="xs:string"/>
                        <xs:element name="Minivan" type="xs:string"/>
                        <xs:element name="Full Size SUV" type="xs:string"/>
                        <xs:element name="Standard SUV" type="xs:string"/>
                        <xs:element name="Premium SUV" type="xs:string"/>
                    </xs:all>
                </xs:complexType>
            </xs:element>
            <xs:element name="Residence">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="US" type="xs:string"/>
                        <xs:element name="OutsideUS" type="xs:string"/>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="SpecialEquipment">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="GPS Navigation" type="xs:string"/>
                        <xs:element name="XM Radio" type="xs:string"/>
                        <xs:element name="Fuel Service" type="xs:string"/>
                        <xs:element name="Child Safety Seats" type="xs:string"/>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="Customer Info">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="FirstName" type="xs:string"/>
                        <xs:element name="LastName" type="xs:string"/>
                        <xs:element name="EmailAddress" type="xs:string"/>
                        <xs:element name="PhoneNumber" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:choice>
    </xs:complexType>
</xs:element>

1 ответ

Решение

В буквальном смысле ваша декларация гласит, что набор допустимых элементов Age включает <Age><18>45</18></Age> а также <Age><25+>33</25+></Age>, хотя и не <Age><45>18</45></Age>,

Но "18" и "25+" не допускаются XML как имена типов элементов; Как и имена переменных в большинстве языков программирования, имена типов элементов в XML должны начинаться с буквы. (Они также не могут содержать пробелы, поэтому имена элементов "Full Size" и "Standard Elite SUV" также будут вызывать ошибки.) Таким образом, примеры, приведенные в предыдущем абзаце, не являются XML, и вы не можете определить схему XSD для которые они будут действительны.

Неясно, нужно ли вам пересматривать основы XML или основы XSD, но ваша работа по разработке схемы будет более приятной и продуктивной, если вы лучше разберетесь в технологиях, которые вы пытаетесь использовать; это помогает вам работать с зерном технологии, а не против нее.

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