2014-10-08 4 views
2

У меня есть этот XML-схемы:Добавить любой в ComplexType

<xs:element name="lineinfo"> 
     <xs:complexType> 
     <xs:all> 
      <xs:element name="done" type="xs:unsignedInt" /> 
     </xs:all> 
     <xs:attribute name="id" type="xs:long" /> 
     <xs:anyAttribute processContents="skip" /> 
     </xs:complexType> 
    </xs:element> 

, но я хочу, чтобы любой другой дополнительный элемент в lineinfo тег:

<lineinfo state="assigned" id="175"> 
     <done>4</done> 
     <todo>6</todo> 
    </lineinfo> 

Я пытался добавить <xs:any /> внутри <xs:all>, но, похоже, это не разрешено.

ответ

1

Родительский тег <xs:any> только choice, sequence. w3cschools #el_any

Использовать <xs:any> положить <xs:sequence> вместо <xs:all>. w3cschools #any

еще можно использовать хз: anyType

хз: anyType тип, как хз: целое число (хотя хз: anyType в том, что он может выступать в качестве простого или сложного типа специального , и он помещает , по существу, никаких ограничений на дерево, которое он проверяет, - подумайте об , это свободно, как аналог языка java.lang.Object языка схемы).

Применение образца будет:

<xsd:element name="value" type="xs:anyType"/> 

В любом случае, если вы хотите использовать ниже пример взят из w3cschools #anyattribute

SCHEMA

<xs:element name="person"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="firstname" type="xs:string"/> 
     <xs:element name="lastname" type="xs:string"/> 
    </xs:sequence> 
    <xs:anyAttribute/> 
    </xs:complexType> 
</xs:element> 

<xs:attribute name="gender"> 
    <xs:simpleType> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="male|female"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:attribute> 

XML

<person gender="female"> 
    <firstname>Hege</firstname> 
    <lastname>Refsnes</lastname> 
</person> 
+0

я получил, но 'sequence' будет описывать порядок элементов. Я хочу, чтобы заказ был бесплатным. –

+0

Да, вы правы. Вы пытались использовать xs: anyType для своего решения, чтобы удалить xs: sequence. – Xstian

+0

Мне все равно нужно имя тегов. Я просто хочу, чтобы схема проверяла, что 'done' находится внутри' lineinfo' и игнорирует любые другие теги внутри него. –

2

Я не мог найти способ, чтобы сделать то, что я хотел, так что я в конечном итоге добавив все «ненужные» метки в моем списке, с minOccurs набор в 0:

<xs:element name="lineinfo"> 
     <xs:complexType> 
     <xs:all> 
      <xs:element name="done" type="xs:unsignedInt" /> 
      <xs:element name="todo" minOccurs="0" /> 
      <xs:element name="error" minOccurs="0" /> 
     </xs:all> 
     <xs:attribute name="id" type="xs:long" /> 
     <xs:anyAttribute processContents="skip" /> 
     </xs:complexType> 
    </xs:element>