2016-12-12 2 views
1

я столкнулся с определением элемента XSD с пустым выбором:XSD проверка элемента определяется как пустой выбор

<xs:element name="Data"> 
    <xs:complexType> 
    <xs:choice> 
    </xs:choice> 
    </xs:complexType> 
    </xs:element> 

Когда я получить экземпляр элемента:

<Data/> 

в документе XML , некоторые из парсеров (SoapUI, Oracle SOA 12c) оценивают его как ошибку: Ожидаемый элемент (ы) в элементе Data @http://www.namespace.com/ensc).

В то время как другие (инструменты Eclipse) оценивают XML как схему действительной.

Интересно, какой результат оценки правильный.

ответ

2

Пустой xs:choice является allowed in XSD:

<choice 
    id = ID 
    maxOccurs = (nonNegativeInteger | unbounded) : 1 
    minOccurs = nonNegativeInteger : 1 
    {any attributes with non-schema namespace . . .}> 
    Content: (annotation?, (element | group | choice | sequence | any)*) 
</choice> 

Обратите внимание, что Content: может состоять из дополнительногоannotation с последующим нулевой или более (element | group | choice | sequence | any). Таким образом, ваш XSD прекрасен, и XML-документ, состоящий только из Data, будет действовать против него.

Ваш XSD может быть упрощена просто

<xs:element name="Data"> 
    <xs:complexType/> 
</xs:element> 

Заметим, однако, что это не могло быть еще более упрощен до

<xs:element name="Data"/> 

Как что будет на самом деле позволяют Data иметь любые атрибуты и модель контента.

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