2009-06-09 2 views
0

У меня есть ComplexType как:XSD: ComplexType

<xsd:complexType name="NightlyRate"> 
    <xsd:complexContent> 
     <xsd:extension base="com:Money"> 
      <xsd:attribute name="night" type="com:Number" use="required"/> 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 

Теперь я хочу, чтобы добавить дочерний элемент "NightlyRate", которая сама по себе имеет ComplexType. Я попытался добавить:

<xsd:element name="xxx" type"com:Money"/> 

после элемента complexContent, но он выдает ошибку, что элемент не ожидается, также является частью этой проблемы является тип этого сложного-элемента такой же, как тип расширения базы. Я использую JAXB. Есть ли другой способ достичь этого?

Спасибо!

+0

Добавлял бы mixed = "true" в помощь ComplexContent? – Ankush

+0

Добавление mixed = true помогает, если ваш NightlyRate содержит текстовое содержимое вместе с элементами, которые вы хотите определить. –

ответ

1
<xsd:complexType name="NightlyRate"> 
    <xsd:complexContent> 
     <xsd:extension base="com:Money"> 
      <xsd:sequence> 
       <xsd:element name="xxx" type"com:Money"> 
        <xsd:complexType> 
         <xsd:complexContent> 
          /// Attributes here 
         </xsd:complexContent> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 

      <xsd:attribute name="night" type="com:Number" use="required"/> 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 
+2

Некоторые объяснения здесь, вероятно, будут полезны. – Brabster

+0

Он выдает следующую ошибку: «Тип содержимого производного типа и его базы должен быть смешанным или оба должны быть только для элементов. Тип« NightlyRate »- это только элемент, но его базовый тип не является». – Ankush

+0

Ankush, эта ошибка означает, что ваш элемент «xxx» также должен быть complexType. Я предполагаю, что это так, и что у вас будут атрибуты для этого. Если это не так, и это просто прямая ссылка на другой тип элемента, определенный в другом месте, измените его на , где xxx - это имя элемента. – womp

2

Чтобы получить вложенные элементы в xsd:complexType, вы должны поместить в него xsd:sequence (первый уровень, наряду с аннотациями и атрибутов), которым состояний, которые вы хотите хорошо ... суб-элементов. В этой последовательности вы можете включать элементы других определенных типов или определять новые типы.

См. XSD complex elements at W3Schools, а также пример womp.

В некоторых случаях вы можете использовать элемент xsd:any, чтобы разрешить неопределенные расширения (свободные).