2016-03-18 4 views
1

Я хочу, чтобы определить элемент, как это:XSD: определить сложный элемент с атрибутом и других дочерних элементов

<A id='1'> 
    <name>jack</name> 
</A> 

С этим ниже я мог определить атрибут id элемента А:

<xs:complexType name="A"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute type="xs:int" name="id"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 

На самом деле это неверно, XSD выше определяет элемент <A id="1">hi</A>. Я не знаю, как отменить базовый атрибут элемента <xs:extension>.

И с XSD ниже я мог бы определить внутри элемента <name>:

<xs:element name = "A"> 
    <xs:complexType> 
     <xs:sequence> 

      <xs:element name = "name" type="xs:string"/> 

     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Могу ли я объединить это два вместе, как это ниже? Я не смог правильно получить синтаксис.

<xs:element name = "A"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name = "name" type="xs:string"/>      
      </xs:sequence> 
     </xs:complexType> 
     <xs:simpleContent> 
      <xs:extension> 
      <xs:attribute type="xs:int" name="id"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:element> 

ответ

2

Ничто в вашем XML или указанных ограничений не указывает xs:extension требуется здесь.

Следующий простой XSD,

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="A"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="name" type="xs:string"/> 
     </xs:sequence> 
     <xs:attribute name="id" type="xs:int"/> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

проверит ваш XML,

<A id='1'> 
    <name>jack</name> 
</A> 

по запросу.