Se il validatore supporta XSD 1.1, è possibile utilizzare xs: affermare di negare certi valori degli attributi in questo modo:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
vc:minVersion="1.1">
<xs:element name="Transactions">
<xs:complexType>
<xs:sequence>
<xs:element name="Transaction" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="OrderID" type="xs:integer"/>
<xs:assert test="empty(index-of((8,9,10),@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Questo dovrebbe rispondi alla tua seconda domanda.
Per quanto riguarda la prima domanda, non penso che la convalida dell'ordine sia possibile. Tuttavia, è possibile utilizzare XSLT per ordinare il documento XML.
----- aggiunto la risposta alla prima domanda -----
Grazie, Michael Kay. Bene ... ecco la risposta alla tua prima domanda.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Transactions">
<xs:complexType>
<xs:sequence>
<xs:element name="Transaction" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="OrderID" type="xs:integer"/>
<xs:assert test="empty(index-of((8,9,10),@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:assert test="every $x in Transaction satisfies
(empty($x/preceding-sibling::*) or
($x/@OrderID gt $x/preceding-sibling::*[1]/@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:schema>
fonte
2014-09-23 05:36:06
Sì, la convalida dell'ordine è possibile. Ad esempio ' ' –
Grazie Chong Lip Phang. Onestamente, non capisco la tua risposta abbastanza bene da sapere se risolve il mio problema o no. Quando hai scritto presumibilmente l'8,9,10 si riferisce a specifici valori di OrderID? Il file su cui sto lavorando ha circa 30.000 transazioni al suo interno. Qualsiasi metodo che funzioni per me dovrebbe funzionare senza riferimento a valori specifici per OrderID. Il secondo test
Selecter
Sì, causerebbe il fallimento della convalida se il valore di OrderID è 8,9 o 10. Se i dati XML sono molto, quindi probabilmente hai bisogno di una regola per abbinare un modello specifico. La convalida passerà comunque se si omette questa regola di asserzione e OrderID salta 8,9 o 10. –