2013-04-19 32 views
47

Używam xsd:all w złożonym typie. Kiedy przegapię jakiekolwiek obowiązkowe elementy podczas sprawdzania poprawności, pokaże wszystkie elementy. Nie wyświetli dokładnie pominiętego elementu.Różnica między <xsd:all> i <xsd: sequence> w definicji schematu?

Ale jeśli używam xsd:sequence, mogę uzyskać dokładnie pominięty element.

Czy jest jakaś różnica między tymi dwoma?

xsd:sequence: Element XML musi być w tej samej kolejności.

Ale xsd:all: Element XML może być dowolnej kolejności.

+0

Zasadniczo różnica między tymi dwoma jest już wskazana w pytaniu. Jednak ograniczenia związane z użyciem tych dwóch kompilatorów i implikacje tych w tworzeniu XSD zależą od specyfikacji, do której się odnosisz: XSD 1.0 lub XSD 1.1? –

+1

Wygląda na to, że pytanie o to, dlaczego sekwencja i cały błąd zapisu w inny sposób, gdy znajdzie brakujący element. Myślę, że chodzi o logikę parsera. – Nasir

+0

Czy istnieje już odpowiedź na to pytanie? Chciałbym również wiedzieć, czy zawsze muszę używać , aby uzyskać dokładnie pominięty obiekt. – GertV

Odpowiedz

86

< xsd:all> określa, że ​​elementy dziecko może pojawić się w dowolnej kolejności.

< xsd:sequence> określa elementy podrzędne mogą pojawiać się tylko w podanej kolejności.

Przykład kolejności:

<xs:element name="compElement"> 
<xs:complexType> 
<xs:sequence> 
    <xs:element name="ele1" type="xs:string"/> 
    <xs:element name="ele2" type="xs:string"/> 
    <xs:element name="ele3" type="xs:string"/> 
    <xs:element name="ele4" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 

Jeśli utworzyć XML z tym XSD wtedy, to będzie coś takiego:

<compElement> 
    <ele1>First</ele1> 
    <ele2>Second</ele2> 
    <ele3>Third</ele3> 
    <ele4>Fourth</ele4> 
</compElement> 

Przykład dla wszystkich:

<xs:element name="compElement"> 
<xs:complexType> 
<xs:all> 
    <xs:element name="ele1" type="xs:string"/> 
    <xs:element name="ele2" type="xs:string"/> 
    <xs:element name="ele3" type="xs:string"/> 
    <xs:element name="ele4" type="xs:string"/> 
</xs:all> 
</xs:complexType> 
</xs:element> 

Jeśli możesz utworzyć plik XML z tego xsd, to będzie coś takiego:

<compElement>  
    <ele2>Second</ele2> 
    <ele1>First</ele1> 
    <ele4>Fourth</ele4> 
    <ele3>Third</ele3> 
</compElement> 

More info na xsd: all More Info na xsd: sekwencja

nadzieję, że odpowiedział na to quetion.

+0

Cześć Joshi .. Dziękuję za komentarze. Ale moje pytanie brzmi, gdy sprawdzam poprawność xml przed xsd podczas używania xsd: wszystko to nie będzie pokazywać dokładnie pominiętego elementu. Na przykład element1 oczekiwany ... W zamian pokaże wszystkie elementy element1, element2 , element3, OCZEKIWANY, ale dałem minOccurs = 0 dla elementu2 i element3 – user1679378

+1

Możesz określić atrybut "minOccurs" elementu "all" jako zero. Aby uzyskać więcej informacji, zapoznaj się z http://www.w3schools.com/schema/el_all.asp – Joshi

16

Różnica:

  • xsd: wszystkie - "elementy podrzędne mogą występować w dowolnej kolejności, a każdy element dziecko może wystąpić zero lub jeden raz" (tzn maxOccurs może wynosić 0 lub 1)
  • xsd: sekwencja - „elementy podrzędne muszą pojawić się w sekwencji Każdy element dziecko może wystąpić od 0 do dowolną liczbę razy.” (tzn maxOccurs może być 0 lub liczba lub „nieograniczony”)

z samouczki W3Schools: here i

+3

Powinieneś zakwalifikować ograniczenia liczności cząstek jako specyficzne dla XSD 1.0 - w przeciwnym razie jest to nieprawidłowe dla XSD 1.1. –

+6

w3schools nie jest powiązany z W3C, więc ich strony nie są dokumentami W3C. –

+0

@kamituel Czy możesz zacytować, gdzie '' ogranicza liczbę razy, kiedy element potomny może wystąpić? Nie mogę znaleźć dowodów na to w specyfikacji W3C. –

2

Wszystko Wskaźnik

Wskaźnik <all> określa, że ​​elementy dziecko może pojawić się w dowolnej kolejności, i że każdy element dziecko musi pojawić się tylko raz:

Wskaźnik kolejności

Oznaczenie <sequence> ator określa, że ​​elementy podrzędne muszą pojawić się w określonej kolejności:

reference link

+2

Powinieneś zakwalifikować ograniczenia liczności cząstek jako specyficzne dla XSD 1.0 - w przeciwnym razie jest to nieprawidłowe dla XSD 1.1. –

0

kiedy używamy pod tagiem, oznacza to, że wszystkie elementy zadeklarowane w tym complexType MUSZĄ pojawiać się w tej samej kolejności w dokumencie XML. w przeciwnym razie pojawi się błąd. ponieważ nie ma potrzeby określania elementów we właściwej kolejności.

0

Schemat określa jedynie, co stanowi zgodny dokument.

Sposób zgłaszania niezgodności należy wyłącznie do weryfikatora. Nic nie stoi na przeszkodzie, aby walidator dokładnie zgłaszał brakujące pola, ale najwyraźniej ten, którego używasz, nie jest w tym przypadku.

Niezależnie od tego, czy jest to błąd, czy projekt, musiałbyś porozmawiać z dostawcą walidatora.