2013-11-25 3 views
1

У меня есть XSD, который содержит следующее:Определение значения по умолчанию для сложного типа в XSD схеме

<xs:complexType name="MyDataType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:boolean"> 
      <xs:attribute name="id" type="xs:int" fixed="9999" /> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

<xs:complexType name="MessageType"> 
    <xs:all> 
     <xs:element name="Data" type="MyDataType"/> 
    </xs:all> 
</xs:complexType> 

Так что этот фрагмент является действительным:

<Message> 
    <Data>true</Data> 
</Message> 

Где Сообщение определяется как тип MessageType , Но то, что я хотел бы сделать, это дать клиентам возможность опустить элемент данных:

<Message></Message> 

(или эквивалентный автономный замкнутый элемент)

семантически, вроде как:

<xs:complexType name="MyDataType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:boolean" default="true"> 
      <xs:attribute name="id" type="xs:int" fixed="9999" /> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

По умолчанию добавлено расширение. Не работает, хотя ....

+0

Возможный дубликат [XML Schema: установка значения по умолчанию для complexType?] (Http://stackoverflow.com/questions/1060190/xml-schema-setting-a-default-value-for-a-complextype) – Tony

ответ

0

Вы не можете достичь того, чего хотите.

Более того, предполагая, что вы переместите значение по умолчанию = "true" в объявление элемента данных и сделайте Data опциональным (добавив minOccurs = "0") ... существует разница между тем, как он работает для элементов и атрибутов ... цитирование из Primer: «Значения атрибута по умолчанию применяются, когда отсутствуют атрибуты, а значения элементов по умолчанию применяются, когда элементы пусты».

Таким образом, ближе всего вы можете указать <Message><Data/></Message>, и в этом случае значение по умолчанию «true» станет доступным через PSVI.

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