Почему мой элемент схемы 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, но ваша работа по разработке схемы будет более приятной и продуктивной, если вы лучше разберетесь в технологиях, которые вы пытаетесь использовать; это помогает вам работать с зерном технологии, а не против нее.