2016-03-11 3 views
1

Я не могу узнать, как добавить обязательный атрибут для моего элемента shop-offer. Я попытался поместитьКак определить необходимые атрибуты для корневого элемента?

<xs:attribute name="id" type="xs:integer" use="required"/> 

в корне схемы, а также в <xs:complexType> элемента, но он не работает. Я всегда получаю ошибку, которая здесь не допускается.

Так как я могу это сделать?

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="shop-offer"> 

    <xs:complexType mixed="true"> 

     <xs:sequence> 
     <xs:choice maxOccurs="unbounded"> 
      <xs:element name="tool"> 
      <xs:complexType> 
       <xs:attribute name="id" type="xs:integer" use="required"/>  
      </xs:complexType>  
      </xs:element>  
      <xs:element name="widget"> 
      <xs:complexType> 
       <xs:attribute name="id" type="xs:integer" use="required"/>  
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:sequence> 
    </xs:complexType> 

    </xs:element> 
</xs:schema> 

ответ

0

Ваши xs:attribute декларации в порядке, но их места размещения требуют присутствия id атрибутов на tool и widget элементов.

Если вы хотите, чтобы id требуется на shop-offer корневого элемента, вы должны поместить другой только внутри xs:complexType (после xs:sequence) для shop-offer:

Это XSD,

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="shop-offer"> 
    <xs:complexType mixed="true"> 
     <xs:sequence> 
     <xs:choice maxOccurs="unbounded"> 
      <xs:element name="tool"> 
      <xs:complexType> 
       <xs:attribute name="id" type="xs:integer" use="required"/> 
      </xs:complexType>       
      </xs:element>     
      <xs:element name="widget"> 
      <xs:complexType> 
       <xs:attribute name="id" type="xs:integer" use="required"/> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:sequence> 

     <!-- This @id is for the shop-offer root element --> 
     <xs:attribute name="id" type="xs:integer" use="required"/> 

    </xs:complexType> 
    </xs:element> 
</xs:schema> 

будет успешно проверять этот XML,

<shop-offer id="1"> 
    <tool id="2"/> 
</shop-offer> 

в соответствии с просьбой.


Примечание: Вы уверены, что вы хотите mixed="true", который позволит это XML быть действительным,

<shop-offer id="1"> 
    Text here. 
    <tool id="2"/> 
    And more text here. 
</shop-offer> 

, возможно, не по своему желанию.

+0

+ лицоpalm + .. это правильно. спасибо ^^ – displayname

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