2014-12-05 3 views
0
<xs:element name="EmpVisionPlanExist" minOccurs ="0"> 
<xs:simpleType> 
<xs:union memberTypes="INT EmptyStrings "/> 
</xs:simpleType> 
</xs:element> 

<xs:simpleType name="Int"> 
<xs:restriction base="xs:integer"> 
<xs:pattern value="[01]"/> 
</xs:restriction> 
</xs:simpleType> 

<xs:simpleType name="EmptyStrings"> 
<xs:restriction base="xs:token"> 
<xs:enumeration value=""/> 
</xs:restriction> 
</xs:simpleType> 

если я даю XML, какXML пустое значение INT Тип

<EmpVisionPlanExist></EmpVisionPlanExist> 

он Cought в проверке XSD. Но я хочу, чтобы это разрешалось.

+0

Есть ли \ n в элементе i.e являются начальными и конечными тегами на разных строках – Ironluca

+0

нет в одной строке –

ответ

0

Он должен работать, если вы определяете EmptyStrings типа как это:

<xs:simpleType name="EmptyStrings"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="0" /> 
    </xs:restriction> 
    </xs:simpleType> 

Однако ортодоксальный способ разрешить нестроковой простой тип элемента, чтобы быть пустым, чтобы сделать элемент nillable:

<xs:element name="EmpVisionPlanExist" type="INT" nillable="true" /> 

Если вы идете по этому пути, вам необходимо включить атрибут nillable элементов, которые являются пустыми xsi:nil:

<EmpVisionPlanExist xsi:nil="true"></EmpVisionPlanExist> <!-- valid --> 
<EmpVisionPlanExist></EmpVisionPlanExist>     <!-- not valid --> 

xsi здесь относится к пространству имен http://www.w3.org/2001/XMLSchema-instance.

Наконец, если вы собираетесь определить тип, который может иметь только значения 0 или 1, я думаю, что «бит» - лучшее имя для него, чем «Int». Я также задаюсь вопросом, почему вы не просто используете тип Boolean, который является стандартным типом и допускает значения true, false, 0 и 1.

+0

Лично я не вижу смысла xsi: nil. Мои собственные предпочтения при определении элемента, который содержит целое число или ничего, это определить его как список из целого с maxLength = "1". Но я ненавижу ограничение целых чисел с фасеткой, особенно когда диапазон значений будет выполнять задание. –

0

Если я исправлю вашу схему с помощью/INT/Int/и удалив minOccurs = "0", то ваш экземпляр действителен (как подтверждено Saxon). Какое сообщение об ошибке вы получали, и какой процессор схемы вы использовали?

Смежные вопросы