4.7 Абстрактные элементы и типы

XML Schema обеспечивает механизм усиливающий замену для отдельных элементов или типов. Когда элемент или тип объявлен как " abstract ", он не может использоваться в экземпляре документа. Когда элемент объявлен как абстрактный, член той группы замены элемента должен представляться в экземпляре документа. Когда соответствующее определение типа элемента объявлено как абстрактное, все образцы этого элемента должны использовать xsi:type, для того, чтобы указать производный тип, который является не абстрактным.

В примере группы замены, описанной нами в Разделе 4.6, могло бы быть полезным запретить использование элемента comment, чтобы обязать использовать только элементы customerComment и shipComment. Для того чтобы объявить comment как абстрактный элемент, мы изменим его первоначальное объявление в схеме международного счета на покупку, ipo.xsd, следующим образом:

<element name=”comment” type=”string” abstract=”true”/>

При объявлении comment абстрактным, примеры международных счетов на покупки теперь только тогда правильные, когда они содержат элементы customerComment и shipComment.

Объявление элемента абстрактным  требует использования группы замены. Объявление типа абстрактным просто требует использования типа, полученного от него в экземпляре документа (и идентифицируется атрибутом xsi:type). Рассмотрим следующее определение схемы:

Схема для перевозок

<schema xmlns=”http://w3.org.ru/2001/XMLSchema"
		targetNamespace=”http://cars.example.com/schema"
		xmlns=”href="http://cars.example.com/schema"> 

 <complexType name=”Vehicle” abstract=”true”/>

 <complexType name=”Car”>
  <complexContent>
   <extension base=”target:Vehicle”/>
  </complexContent>
 </complexType>

 <complexType name=”Plane”>
  <complexContent>
   <extension base=”target:Vehicle”/>
  </complexContent>
 </complexType>

 <element name=”transport” type=”target:Vehicle”/>
</schema>

Элемент transport не абстрактый, поэтому он может появиться в экземплярах документов. Однако, поскольку его тип определен как абстрактный, он никогда не сможет появляться в экземпляре документа без атрибута xsi:type, который ссылается к производному типу. Это означает, что следующая схема не правильная:

<transport xmlns=”http://cars.example.com/schema”/>

поскольку тип элемента transport абстрактный. Однако, следующая схема правильная:

<transport xmlns=”href="http://cars.example.com/schema"
		xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance">
		xsi:type=”Car”/>

поскольку она использует не абстрактный тип, который является заменяемым для Vehicle.

 

Сайт создан в системе uCoz