2016-06-29 6 views
-3

У меня есть complextype-'A ', который использует базу расширений -Base, а затем последовательность элементов. Теперь база расширения - «База» - это сам сложный тип и имеет несколько ссылок на элементы в последовательности ex (Элемент 1,2,3). Проблема заключается в том, что при попытке проверить XML я получаю ошибку: элемент A имеет неверный дочерний элемент '1', и он перечисляет другие возможные элементы XML. я могу вносить изменения в схему, а не XML, так как im работает в группе. Sry если я объяснил это странно пример будет нижеУстранение неполадок с Complextype

Это схема

<xsd:complexType name="A"> 
     <xsd:complexContent> 
      <xsd:extension base="Base" > 
       <xsd:sequence minOccurs="0" maxOccurs="unbounded"> 
        <xsd:element name="B" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="BData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
        <xsd:element name="C" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="CData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
        <xsd:element name="D" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="DData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 

XML-

<A> 
    <D/> 
    <B/> 
    <C/> 
    <T>  <---- This is the element from the base'Base' that gives me the error> 
    <......> 
    </T> 
</A> 

ИТАК после просмотра комментариев я собираюсь разработать немного больше на мой вопрос. Это мой первый вопрос, и вопрос, с которым я столкнулся, связан с моей работой, поэтому я не могу указать конкретные данные. Поэтому основная проблема заключается в «A». Итак, у меня есть схема, которую я редактирую, чтобы предполагать проверку нескольких XML. Поэтому целью является найти способ для Complextype A иметь каждый элемент в действии, но в то же время, если элемент вызывается из расширения, независимо от порядка или количества раз, когда ошибка не будет всплывать. Я исследовал элемент «все», но проблема в том, что он может произойти только один раз. Вывод: Последовательность неограниченное количество Occur, но порядок ограничен, Все ограничения не ограничены, но ограничены 1 Появление. Это похоже на кроличью нору проблем, которые приветствуют любые решения.

+1

Имена элементов XML не могут начинаться с числа. – kjhughes

+0

Вам не хватает закрывающего элемента 'xsd: sequence'. – kjhughes

+0

Вы не указали ссылочную декларацию 'Base'. – kjhughes

ответ

0

В XSD 1.0 все расширения сложного типа создают последовательность, первый член которой является сложным типом, определенным в базовом типе, а вторым членом является модель контента, указанная в расширении. Гарантией потребителей базового типа является то, что если они прочитают начало элемента, они найдут там то, что им нужно, и когда они начнут видеть детей, к которым они не готовы, они могут перестать читать. (Или более формально: в любом действительном экземпляре I расширенного типа E имеется префикс последовательности детей из I, который действителен в отношении базового типа E.)

В XSD 1.1 это также возможно расширить группу с другой группой и получить результат (как многие люди сказали, что они хотят) большую группу; последовательности и выбор, однако, работают так же, как в XSD 1.0.

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

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