2009-11-12 6 views
5

I Hava do dokumentu XML (i skomplikowany element), który jest podobny do tego przykładu:Czy to możliwe, aby mieć complexType i elementy wewnątrz, ale bez części sekwencji

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

Ale w moim xml to nie powinno mieć znaczenia jeśli najpierw dodaję imię lub nazwisko. Chciałbym więc usunąć część "xs: sequence", ale nie jestem pewien, co powinienem zastąpić.

Jeśli nie jest to możliwe - dlaczego nie jest to możliwe?

Aktualizacja: Jeśli zmienię go < cx: Wszystkie> otrzymuję ten błąd: "The {max} wystąpi ze wszystkich stron {} z grupy wszystkich musi być 0 lub 1".

+2

tak, to znane ograniczenie system - maxOccurs może być tylko 0 lub 1. Nie wspomina nic innego w swoim przykładzie, albo ..... –

+0

Czy istnieje inna opcja niż gdzie I don” t uzyskać to ograniczenie? – Imageree

+0

Pracownik może mieć więcej niż jedno imię lub więcej niż jedno nazwisko? – jason

Odpowiedz

8

Zastosowanie <xs:all> zamiast <xs:sequence>:

<xs:element name="employee"> 
<xs:complexType> 
    <xs:all> 
    <xs:element name="firstname" type="xs:string"/> 
    <xs:element name="lastname" type="xs:string"/> 
    </xs:all> 
</xs:complexType> 
</xs:element> 

Zobacz W3Schools page na wskaźnikach schematu:

All Indicator

The <all> indicator specifies that the child elements can appear in any order, and that each child element must occur only once:

+0

Jeśli zmienię go na , pojawia się ten błąd:" {max wystąpi} wszystkich {stron} z całej grupy musi być 0 lub 1 ". – Imageree

+0

tak, to ograniczenie '' - maxOccurs może być tylko 0 lub 1. Nie wspominałeś o niczym innym w swoim przykładzie, albo ..... –

0

Chcesz All indicator (<xs:all>).

<xs:element name="employee"> 
    <xs:complexType> 
    <xs:all> 
     <xs:element name="firstname" type="xs:string"/> 
     <xs:element name="lastname" type="xs:string"/> 
    </xs:all> 
</xs:complexType> 
</xs:element> 

XML Schema Tutorial na W3Schools jest bardzo pomocne.

+0

Jeśli zmienię to na pojawia się ten błąd: " {maks. występuje} wszystkich {stron} z całej grupy musi wynosić 0 lub 1 ". – Imageree

2
<xs:element name="employee"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="firstname" type="xs:string" /> 
      <xs:element name="lastname" type="xs:string" /> 
     </xs:choice> 
    </xs:complexType> 
</xs:element> 

To pozwoli ci mieć elementy w dowolnej kolejności i ilości.

+1

Niestety, nie jest to prawdą. '' zezwala tylko na jeden z określonych elementów. Tak więc w twoim przykładzie dozwolone będzie tylko imię * XOR * nazwisko (ale może wtedy zawierać dowolną liczbę wystąpień tego elementu). – user2846469