Gestionează enums în schemele w3c xml

Când lucrați cu XML orientat spre date, adesea trebuie să utilizați "dicționarele gestionate", cunoscute și ca valori enumerate. Să examinăm următorul exemplu al unui cont generalizat al băncii:

Există două dicționare gestionate în acest document. Primul este un dicționar valutar, un cod de monedă cu trei simboluri conform ISO-4217 ("USD" este un dolar american). A doua este regula de rotunjire pentru procente: "sus", "jos" și "cel mai apropiat". În exemplul nostru, banca preferă să rotunjească procentele.

Problema care apare în proiectarea acestei scheme este că gestionarea codurilor valutare ISO se face în afara cunoștințelor noastre. Aceste coduri pot fi schimbate în orice moment, iar dacă acestea sunt încorporate în sistem, acesta va trebui să republicarea de fiecare dată când organizația își schimbă codurile sale ISO. Și acest lucru poate fi foarte costisitor. Acest lucru este valabil mai ales pentru întreprindere, în cazul în care orice modificare a schemei, oricât de mică, ar putea necesita o testare completă a aplicației utilizând schema.

Acest articol descrie modul de a controla vocabularele controlate folosind W3C schema XML (XML W3C Schemas), deoarece aceasta este baza schemelor de specificare format bazat pe XML pentru date XML. Rețineți că termenul „dicționar“ ne referim la liste de elemente enumerate valori de atribute, care este diferit de alte contexte în care „dicționare“ - un set de nume de elemente XML.

Pasul 1: Schema monolit

Înainte de a ne gândi la care dintre dicționarele gestionate este în afara controlului nostru, primul lucru de făcut este să creați o schemă pentru conturile generalizate utilizând schema XML W3C. În cadrul acestui articol, vom folosi un subset de coduri de monedă cu trei caractere ISO. Schema corespunzătoare va avea următoarea formă:

Observați două vocabularului controlat (prin transfer): tipuri simple și roundingDirection iso3currency - lungimea iso3currency este setat în mod clar la 3, pentru a evita erorile de scriere viitoare jenante la editarea, atunci când aveți nevoie pentru a ajusta lista de valute.

Merită de remarcat și faptul că valoarea versiunii opționale a atributului a fost setată la "1.0". Ideea este că, atunci când se lucrează cu orientate spre date XML-mesaje, este adesea necesar să se sprijine simultan mai multe versiuni ale mesajului schemei, deoarece, aparent, este imposibil să se simultan sistem de „ridicare“, folosind acest sistem, la cea mai recentă versiune a acestuia. Astfel, este necesar să se precizeze versiunea sistemului pe care testează pentru admisibilitatea-mesajului XML. Acestea fiind spuse, vom nota schema noastră accountSummary-1.0.xsd. astfel încât versiunile viitoare să nu înlocuiască versiunea actuală.

În plus, pentru ca instanțele de mesaje să identifice clar versiunea lor a schemei, atributul versiune a fost adăugat elementului accountSummary. Se presupune că aceste numere de versiune sunt înregistrate ca M.N. unde M este numărul versiunii principale și N este numărul versiunii suplimentare. Ca urmare, codul de mai sus pentru contul generalizat poate fi rescris după cum urmează:

Pasul 2: Izolarea dicționarelor gestionate cu variabile

Cu toate acestea, cu greu va fi permisă rescrierea aplicației pentru a elabora modificarea setului de coduri valutare, altfel ar indica rigiditatea dezvoltării. Deoarece aceste coduri sunt controlate din exterior, ele trebuie izolate: vom crea o schemă de dictionar separată pentru ei. Schema de dicționare este o schemă care conține o singură definiție a unui tip simplu, cu valori enumerate și nimic altceva. O astfel de schemă, desemnată ca iso3currency-1.0.xsd. va avea următorul aspect:

În conformitate cu regula de desemnare, această schemă se numește accountSummary-1.1.xsd. Acordați atenție lipsei de coduri valutare în schema principală.

Pasul 3: dezlănțuirea dicționarelor gestionate

Dificultatea cu accountSummary-1.1.xsd este că importă direct iso3currency-1.0.xsd. Deci, când apare o nouă versiune a schemei de dicționare valutar ISO, trebuie să emiteți încă o versiune nouă a schemei de cont generalizate. Este necesar un mecanism pentru a decoda versiunile schemei de dicționare din versiunile principalei scheme. O soluție simplă este să utilizați schema de trecere a unui dicționar care nu are o versiune:

Această schemă este desemnată ca iso3currency.xsd. lipsă atribut versiune. O versiune nouă a schemei principale, accountSummary-1.2.xsd, este emisă pentru a finaliza schemele de dezabonare. - singura diferență față de versiunea 1.1 este aceea a elementului sa schimbat de la

pentru a include o non-versiune a dicționarului de valute. Acesta este modul în care circuitele sunt libere. Dacă organizația ISO modifică lista codurilor valutare, este emisă o nouă schemă de valută și este corectată iso3currency.xsd. astfel încât aceasta să importe acest nou sistem valutar. Schema principală rămâne neschimbată, deoarece conține iso3currency.xsd și este independentă de versiunea schemei dicționarului valutar.

Pasul 4: Protejați aplicațiile

O astfel de deconectare a schemelor de dicționare nu este fără dificultăți. În primul rând, pe măsură ce apar noi versiuni ale schemei de dicționare valutare, fișierele de instanțe existente vor deveni nevalide dacă conțin coduri valutare care au fost șterse de ISO. În unele cazuri, această situație este inacceptabilă, dar pentru exemplul nostru acest lucru este posibil. Dacă fișierul instanță se referă la un cod de monedă care nu mai există, acesta va deveni nevalabil din punct de vedere semantic; de asemenea, nu are nimic de împiedicat să fie inadmisibil din punct de vedere sintactic. Apoi, puteți folosi inadmisibilitatea sintactică pentru a detecta astfel de instanțe și pentru a le trimite pentru procesare specială, astfel încât codul aplicației principale să poată trata codurile valutare valide. Prin eliminarea procesării erorilor din aplicația principală, puteți scurta codul aplicației principale și puteți simplifica întreținerea acesteia.

În al doilea rând, având în vedere că codurile valutare pot fi modificate în orice moment, este necesar să se asigure sincronizarea codurilor valutare în schema dicționarului valutar și codurile valutare cunoscute de aplicații. Această problemă poate fi rezolvată în două moduri. În primul caz, aplicațiile pot utiliza schema dicționarului ca sursă de coduri valutare. Dacă vă uitați la schema dicționarului ca fișier XML, parserul rapid SAX este doar necesar pentru a scoate elementele . conținând valori admisibile. În a doua abordare, codurile valutare sunt stocate într-o bază de date relațională centrală. Apoi, aplicațiile pot accesa tabelul direct, iar schema dicționarului poate fi generată dinamic din același tabel. Oricare dintre metodele descrise oferă sincronizarea seturilor de valori admisibile pentru aplicații.

În cele din urmă, în al treilea rând, utilizarea unor astfel de sisteme de dicționare este permisă numai dacă modificările aduse acestora, sau pentru a reduce adăugarea valorii transferate sau elimina.

Structura schemei de dicționare nu trebuie să se schimbe în niciunul dintre condiții. În cazul în care un sistem de dicționar ar fi adăugat la noua definiție a unui tip simplu sau complex, sau un element, acesta ar putea schimba rezultatele valida instanța principal defectuoasă a circuitului și cauza cererii de bază. Astfel, este necesar „pentru a verifica admisibilitatea“ Dicționarul schemei, pentru a fi siguri că acestea conțin doar o singură definiție de tip simplu, cu valori enumerate. Această situație a fost descrisă de Will Provost în articolul său "Lucrul cu o metaschema".

În Windows pentru a verifica schema dicționar valabil în cadrul acestui sistem Schematron, puteți utiliza validator gratuit de la Topologi (validator gratuit de la Topologi). Pentru alte platforme, consultați lista de instrumente din directorul de resurse Schematron. Pentru mai multe informații despre Schematron pot fi găsite în articolul Chimezi Ogbuji (Chimezie Ogbuji) "Validare folosind Schematron" ( "XML cu Schematron Validating").

Instrucțiunile din Schematron sunt exprimate folosind expresii a căror valoare trebuie să fie adevărată. Dacă valoarea lor este falsă. o eroare de validare Schematron este generată. Când examinăm Schematron schema noastră, merită notate următoarele:

Rețineți regula pentru contextul schemei. Acesta conține declarațiile care se aplică elementului în schema dicționarului. Prima declarație controlează faptul că singurul lucru care este conținut în schemă este definițiile . A doua afirmație monitorizează faptul că există o singură definiție .

Regula pentru contextul simpleType prevede că, în primul rând, trebuie să existe un atribut de nume și, în al doilea rând, trebuie să conțină și poate include . dar nu mai sunt alte elemente.

Regula de restricționare a contextului afirmă acest lucru > trebuie să conțină una sau mai multe valori enumerate.

Regula pentru enumerarea de context afirmă că valorile enumerate trebuie să fie unice. Pentru a testa acest lucru, utilizați cheia Schematron (echivalentă cu cheia XSLT). Expresia cheie ('enumerationsByValue', @value) returnează o listă de elemente cu aceeași valoare ca elementul verificat pentru admisibilitate. Dacă aceste valori sunt unice, atunci în această listă va fi prezent un singur element . cel care este verificat pentru valabilitate.

concluzie

Plasarea vocabulare volatile controlate (de transfer), în propria lor schemă de dicționare, puteți mări schemele de manipulare XML W3C. Acest articol a discutat modul de a identifica vocabulare controlate volatile, cum să le separe de sistemul principal este de a dezlega versiunea și cum să verificați pentru schema de dicționare de valabilitate. Desigur, rețeta absolută - când un dicționar gestionat ar trebui să aibă propria schemă - nu este. Prin urmare, prin aplicarea recomandărilor din acest articol, întotdeauna se bazează pe bunul simț și cunoașterea zonei problematice.

Fișierul cu exemplele din acest articol poate fi descărcat ca arhivă ZIP (9 KB).

Articole similare