[ Cola @ 17.07.2008. 07:53 ] @
Poštovanje
Zanima me kako da u XSD šemi rešim sledeći problem:
treba da definšem sledeći XSD u kom će biti dozvoljeno da imam element E1 i E2. Oba elementa mogu biti nillable="true" ali ne u isto vreme. E to ne znam da napišem

u XMLu dozvoljeni su sledeći oblici

prvi oblik ni E1, ni E2 nije nil:
<E1>...</E1>
<E2>...</E2>

drugi oblik E1 nil, E2 nije nil:
<E1 xsi:nil="true"></E1>
<E2>...</E2>

treći oblik E1 nije nil a, E2 je nil:
<E1>...</E1>
<E2 xsi:nil="true"></E2>

dok oblik
<E1 xsi:nil="true"></E1>
<E2 xsi:nil="true"></E2>

nebi smeo da prođe.

pokušao sam sa XSDom oblika:
Code:

<xs:choice maxOccurs="2" minOccurs="1">
          <xs:element name="E1">
            ...
          </xs:element>
          <xs:element name="E2">
            ...
          </xs:element>
</xs:choice>

međutim on mi dopušta da npr E1 ponovim dva puta ili E2 dva puta.
Kako napisati XSD za ovo što men treba?
Unapred hvala
[ mmix @ 17.07.2008. 11:07 ] @
Nazalost, mislim da za ovu situaciju nema pomoci. xml validator nema look-ahead ili look-behind i nema state i sav particle mapping mora da bude unutar elementa koji se validira. Tako da ne postoji nacin da validator zna da li se xsi:null u nekoj grupi/selekciji/sekvenci vec pojavljivao ili ce se pojavljivati, on samo zna sta je u trenutnom elementu, ili jednostavnije receno validnost jednog elementa ne moze da se odredjuje shemom drugog. Ako pokusas da razresis ovaj problem nekim work aroundom (npr xs:choice preko tri grupe sa po E1/E2 elementima i razlicitim nillable atributima) ili neces dobiti ono sto hoces ili ces "udariti" u moju omiljenu UPA (Unique Particle Attribution) gresku koja vise lici na pravni ugovor nego na programsku gresku

Citat:
Multiple definition of element 'foo' causes the content model to become ambiguous. A content model must be formed such that during validation of an element information item sequence, the particle contained directly, indirectly or implicitly therein with which to attempt to validate each item in the sequence in turn can be uniquely determined without examining the content or attributes of that item, and without any information about the items in the remainder of the sequence


Sorry.