it-swarm.dev

Rozdíl mezi <xsd: all> a <xsd: sequence> v definici schématu?

Používám xsd:all ve složitém typu. Když při ověřování chybím všechny povinné prvky, zobrazí se všechny prvky. Nezobrazí přesný prvek.

Ale pokud používám xsd:sequence můžu dostat přesný prvek.

Existuje nějaký rozdíl mezi těmito dvěma?

xsd:sequence: Element XML musí být ve stejném pořadí.

xsd:all: XML element může být libovolný příkaz.

57
user1679378

<xsd:all> určuje, že podřízené prvky se mohou zobrazit v libovolném pořadí.

<xsd:sequence> určuje podřízené prvky, které se mohou zobrazit pouze v uvedeném pořadí.

Příklad pro sekvenci:

<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>

Pokud vytvoříte XML z tohoto xsd, bude to vypadat takto:

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

Příklad pro všechny:

<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>

Pokud z tohoto souboru xsd vytvoříte soubor XML, může to vypadat takto:

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

Více informací na xsd: vše
Více informací na xsd: sekvence

Doufám, že jsem odpověděl na vaši otázku.

100
Madhusudan Joshi

Rozdíl:

  • xsd: všechny podřízené elementy - "se mohou objevit v libovolném pořadí a každý podřízený prvek se může objevit nula nebo jednou" (tj. maxOccurs může být 0 nebo 1)
  • xsd: sekvence - "podřízené elementy se musí objevit v posloupnosti. Každý podřízený prvek se může objevit od 0 do libovolného počtu časů" (tj. maxOccurs může být 0 nebo libovolné číslo nebo 'neomezený')

Z tutoriálů W3Schools zde a zde .

18
kamituel

Všechny indikátory

Indikátor <all> určuje, že podřízené prvky se mohou zobrazit v libovolném pořadí a že každý podřízený prvek se musí vyskytnout pouze jednou: 

Indikátor sekvence

Indikátor <sequence> určuje, že podřízené prvky musí být zobrazeny v určitém pořadí:

odkaz na odkaz

2
NPKR

Schéma pouze definuje, co představuje vyhovující dokument.

Zveřejnění nesouladu je zcela na validátoru. Neexistuje nic, co by bránilo validátoru v tom, aby přesně hlásil, která pole chybí, ale zřejmě ten, který používáte, v tomto případě není. 

Ať už se jedná o chybu nebo o návrh, museli byste s poskytovatelem validátoru diskutovat.

1
Joachim Lous

když používáme pod tagem, znamená to, že všechny elementy, které jsou deklarovány v tomto complexType MUSÍ být zobrazeny ve stejném pořadí v XML dokumentu. jinak se zobrazí chyba. není třeba specifikovat prvky ve správném pořadí. 

0
user3423648