rĪgas tehniskĀ universitĀte - datu bāzes … · web viewxml (extensible markup language) –...
TRANSCRIPT
Māris Veismanis
CASE rīka Altova Mission Kit izmantošana XML datu bāzes izstrādei
Rīga, 2011.
SatursIevads..........................................................................................................................................3
1. Datubāzes un XML.............................................................................................................4
1.1. Datu organizēšanas veidi............................................................................................4
1.2. XML glabāšanas veidi datubāzē.................................................................................4
1.3. Pielietojuma piemēri...................................................................................................5
1.4. Kas nepieciešams XML datubāzes projektēšanai.......................................................6
2. Altova MissionKit...............................................................................................................6
2.1. UModel.......................................................................................................................8
2.2. DatabaseSpy..............................................................................................................16
2.3. Pārējie komplektā ietilpstošie rīki.............................................................................24
Nobeigums................................................................................................................................25
2
IEVADS
XML (eXtensible Markup Language) – paplašinātā iezīmju valoda. Tās pirmsākumi
meklējami HTML, jo bija nepieciešamība paplašināt HTML iespējas. HTML tika radīts
informācijas attēlošanai (mājas lapu attēlošana interneta pārlūkos). Taču, lai informāciju
attēlotu klienta datorā, tā vispirms ir jānosūta no servera. Iespējams, var gadīties situācijas,
kad pārsūtīto informāciju nepieciešams saglabāt, piemēram, datubāzē.
XML tika radīts kā kā datu transportēšanai piemērots formāts. Parasti vairums darbību
(vērtību piešķiršana, transformācijas) ar XML tika veiktas „middleware”. Uz datubāzi tādā
gadījumā jau tika nosūtīti no XML struktūrām izgūti dati. Taču, parādoties iespējām
datubāzēs veikt darbības ar XML, datu transformēšana, izgūšana var tikt veikta jau datubāzes
daļā.
Datu sūtīšanai starp lietojumiem un servisu orientētas arhitektūras realizācijai,
nepieciešamas tīmekļa pakalpes (web services). Tīmekļa pakalpju aprakstīšanai tiek izmantots
WSDL (XML formā rakstīts) faili. Lielākoties arī pati dat sūtīšana notiek sūtot ziņojumus, kas
atbilst SOAP standartam. SOAP ziņojumi ir XML formā rakstīti.
Att. 1 XML transporta loma
3
1. DATUBĀZES UN XML
1.1. Datu organizēšanas veidi
Datubāzēs tiek glabāti dati. Datus savukārt var iedalīt pēc to strukturizācijas pakāpes –
nestrukturizēti, daļēji strukturizēti un strukturizēti dati. Nestrukturizēti dati ir, piemēram,
video faili, attēli. Strukturizēti ir tādi dati, kurus var saglabāt relāciju datubāzes tabulās un
struktūra ir tabulas lauki un saistība starp tabulām. XML dokumenti ietilpst daļēji
strukturizētu datu kopā.
Att. 2 Datu iedalījums pēc strukturizācijas veida [V. Telles bakalaura darbs]
Daļēji strukturizēti dati nozīmē, ka to struktūru nosaka shēma, taču var būt atkāpes no
tās, piemēram, dublēšanās vai iztrūkums. Šāds datu organizācijas veids piedāvā priekšrocības,
ko sniedz lielāka elastība. Protams, ir arī trūkumi, kuri izriet no tā, ka dati nav stingri
strukturizēti, piemēram, ir vairāk laika jāpatērē informācijas atlasei un transformācijai.
1.2. XML glabāšanas veidi datubāzē
Par izpētāmo DBVS tika izvēlēta Oracle 11g, jo šī DBVS ir iepazīta praktiskajos darbos
3 semestru laikā un tāpēc būtu interesanti uzzināt kādas iespējas šī DBVS sniedz XML
dokumentu apstrādē.
Ir trīs veidu pieejas, kā XML datus var saglabāt datubāzē:
1. XML dokuments tiek saglabāts kā tabulas kolonas vērtība;
2. XML dokuments tiek glabāts datubāzes tabulas kolonā vai tabulā ar speciālu
XML dokumentiem paredzētu tipu;
4
3. XML dokuments tiek sadalīts un tā atsevišķās daļas saglabātas tabulas vairākās
kolonās.
Katram no augstāk minētājiem veidiem ir savas stiprās puses un pielietojumi, kur tie
visvairāk ir piemēroti un, protams, savi trūkumi.
Pirmais no minētajiem veidiem (XML dokuments tiek saglabāts atsevišķā tabulas
kolanā) ir piemērots gadījumos, kad nepieciešams saglabāt un izgūt no tabulas visu XML
dokumentu kopumā. Priekšrocība, ka šādu saglabāšanas veidu var izmantot visas Oracle
DBVS versijās, kurās tiek atbalstīti CLOB un BLOB datu tipi. Trūkums, ka no šādi
saglabātiem XML dokumentiem nevar veikt tiešus datu vaicājumus, nevar izmantot xPath
datu izgūšanas vaicājumus un pielietot XSL transformācijas.
Ja XML tiek saglabāts kolonā vai tabulā ar speciālo XML dokumentu tipu (XMLType),
ir iespējams izmantot vaicājumu valodu un ātri un efektīvi izgūt datus no XML dokumentu
struktūrām.
Pēdējais no augstāk minētājiem XML dokumentu saglabāšanas veidiem patiesībā ir
metode, kā no ienākošā XML dokumenta izgūt tā daļas un saglabāt tabulas atsevišķās
kolonās. Īpaši piemērots gadījumos, kad nepieciešams daudz izgūt datus, jo iespējams
pielietot SQL.
1.3. Pielietojuma piemēri
Jau pieminēts, ka XML ir paredzēts datu transportam un ka lielākoties darbības ar XML
notiek„middleware” daļā. Ir dažādi rīki un tehnoloģijas, kas paredzēti servisu orientētas
arhitektūras izstrādē. Viens no tādiem produktiem ir Oracle SOA Suite. Tas piedāvā izstrādes
vidi un iespējas. Izstrādātie lietojumi tiek uzlikti uz Oracle radītā WebLogic lietojumu
servera. Datu glabāšanai tiek izmantota Oracle datubāze. Viena no iespējām, ko piedāvā SOA
Suite ir sūtīto ziņojumu un visu datu transformācijas auditācija (izsekojamība, dati tiek
saglabāti datubāzē). Tā kā apmaiņa notiek ar XML ziņām, tad datubāzes kolonā tiek saglabāti
šie ziņojumi. Tika nolemts izpētīt, kā tad Oracle saglabā XML sevis radītajos produktos.
Rezultātā tika konstatēts, ka XML dokumentu saglabāšanai tiek izmantots veids, kad XML
dokuments tiek saglabāts BLOB tipa kolonā. Un pareizi vien ir, jo nekādas darbības, kur
iesaistīta datu izgūšana no XML dokumentiem nav iesaistītas. Taču ja nākamajās SOA Suite
versijās tiks piedāvātas iespējas izgūt datus no saglabātajiem XML dokuemtniem, tad
5
visticamāk tiks izmantots tips XMLType. Jo tāds saglabāšanas veids ir gan piemērots datu
izgūšanai, gan pietiekami elastīgs mainīgajiem XML dokumentiem, kas tiek apstrādāti.
1.4. Kas nepieciešams XML datubāzes projektēšanai
XML datubāze ir tehnoloģiju kopa, kas sevī ietver XML datu saglabāšanas un izgūšanas
iespējas.
Iepriekšējās nodaļās tika apskatīti veidi, kā saglabāt XML dokumentus. Atbilstoši
katram saglabāšanas veidam tiek izmantoti tiem atbilstoši datu izgūšanas veidi. Ja tiek domāts
par to, kādus rīkus izmantot datubāzes projektēšnai, var secināt, ka lai saglabātu XML
dokumentu kā CLOB vai BLOB ir nepieciešams rīks, kurā var norādīt šādu datu tipu. Līdzīgi
ir ar paņēmienu, kad XML dokuments tiek sadalīts daļās un daļas saglabātas tabulas kolonās.
Izmantojot tādu paņēmienu lielākā vērība ir jāpievērš daļai, kas veic XML dokumenta
sadalīšanu. Savukārt pašas tabulas projektēšanai var izmantotu gandrīz jebkuru rīku.
Paņēmienā, kur XML dokuments tiek saglabāts, izmantojot XMLType tipu, iespējams
atbilstošajai kolonai norādīt arī XSD (XML shēmas dokuments), kurai jāatbilst.
Ņemot vērā uzskaitītos apsvērumus, par vienu no piemērotajiem rīku komplektiem tika
izvēlēts ALTOVS MissionKit. Tas sevī iekļauj rīku komplektu programmatūras projektēšanai
un izstrādei. Projektēšanas posma sākumā izmantojamie rīki būs XMLSpy, kurā izveidot XSD
un Umodel, kas ir labi izstrādāts rīks modelēšanai UML.
2. ALTOVA MISSIONKIT
Austriešu kompānijas ALTOVA radītie produkti tiek uzskatīti par pasaulē vadošajiem
rīkiem darbam ar XML. Salīdzinoši nesen ALTOVA produkcijas klāsts ir papildinājies ar
rīkiem programmatūras projektēšanai, modelēšanai un koda automātiskai ģenerēšanai (ir
iespējama integrācija ar populārākajām izstrādes vidēm – MS Visual Studio; Eclipse). Datorā
uzstādot ALTOVA MissionKit, tiek iegūts viss rīku komplekts. Taču licenzēšanas informācija
par katru no rīkiem ir jāievada atsevišķi.
6
Att. 3 Instalācija
Att. 4 Instalācija
Att. 5 Īssaites uz visiem Mission Kit ietilpstošajiem rīkiem
7
No iepriekš ievadā apskatītās informācijas secināms, ka izveidot XML datubāzi var ar
gandrīz jebkuru no ierastajiem rīkiem, taču atvieglot darbu varētu, ar rīkiem atbalstot XML
datu izgūšanas vaicājumu veidošanā. No industrijā pieredzējušu cilvēku puses ir atsauksmes,
ka darbam ar XML labākie ir ALTOVA veidotie rīki. Kā tika prezentācijā uzsvērts, XML
datubāzu veidošana nesākas un nebeidzas ar datubāzes struktūras izveidošanu. Ir jāveido
XML shēmas (XSD), datubāzes struktūra, datu transformācijas apraksti. ALTOVA piedāvā
produktu Altova Mission Kit. Tas sevī ietver visaptverošus rīkus programmatūras
modelēšanai:
DatabaseSpy
MapForce
SemanticWork
UModel
DiffDog
SchemaAgent
StyleVision
XMLSpy
2.1. UModel
UML ir standartizēta vispārēja pielietojuma modelēšanas valoda objektorientētas
programmatūras izstrādē. UML 2.0 ietver 14 dažādus diagrammu veidus.
Aktivitāšu diagramma
Clašu diagramma
Komunikāciju diagramma
Komponentu diagramma
Kompozītu struktūras diagramma
Uzstādīšanas diagramma
Saskarsmes diagramma
Objektu diagramma
Pakotņu diagramma
Secību diagramma
Stāvokļu mašīnas diagramma
Laika diagramma8
Lietojumu gadījumu diagramma
Att. 6 Kolāža ar dažādiem UML diagrammu veidiem
Datubāzes modelēšnai Umodel vidē tiks izmantota klašu diagramma. Klašu diagramma
ir kolekcija ar statiskiem elementiem, piemēram, klasēm un tipiem, ir norādīts to sastāvs un
savstarpējās saites. Umodel piedāvā diagrammu tipu, kas ir klašu diagrammas apakštips un
īpaši piemērots datubāzu projektēšanai.Taču, lai sāktu modelēt, ir jāizveido vienkārša
problēmsfēra.
Peles labās pogas klikšķis uz mapītes „Component view” logā „Model tree”. Tālāk
jāizvēlas diagramma datubāzes izveidošanai.
9
Att. 7 Datubāzes diagrammas izveidošana
Labais peles klikšķis diagrammas laukā. Izvēle veidot jaunu tabulu.
Att. 8 Tabulas pievienošana
10
Att. 9 Tabula pēc pievienošanas
Peles labā taustiņa klikšķis uz tabulas elementa modelī un vispirms jāizvēlas pievienot
jaunu kolonu.
Att. 10 Jaunas kolonas pievienošana
Tabulas kolonas tipu var izvēlēties logā „Properties”, tas atrodas tieši zem modeļa
komponenšu loga.
11
Att. 11 Kolonas tipa izvēle
Pievienot kolonām nepieciešamos atribūtus un izveidot tabulu klasifikatoru vērtībām
Att. 12 Personas lietas tabula un iestāžu klasifikators
12
Att. 13 Saites starp divām tabulām
Att. 14 Veids kā tiek pievienoti gan indeksi, gan PK un FK
Atsevišķajā ārējās atslēgas tabulā norādot kolonu, uz kuru atsaucas, piedāvā izvēlēties
tabulu, uz kuru tiek veidota ārējās atslēgas saite. Diemžēl nav ierobežojumu uz kolonas
nosaukumu.
Kad tika izveidota vienkāršā sistēma no divām tabulām, tika pārbaudīts UML standartos
aprakstītais modeļu importēšanas un eksportēšanas formāts XMI. Tika konstatēts, ka formāts
strādā – no UModel eksportēto modeli izdevās veiksmīgi importēt citā programmatūras
modelēšanas rīkā EA (Enterprise Architect). Taču tika konstatēta viena nozīmīga problēma –
XMI standarts, acīmredzot, nosaka, kā modeļi ir jāeksportē un jāimportē, taču ne visai precīzi,
kā tie ir jāinterpretē. Piemēram, UModel rīkā biju norādījis, ka tiek modelētas nevis vienkārši
klases, bet datu objekts – datubāzes tabula. Taču pēc importēšanas EA, modelī tika attēlotas
13
parastas klases. Tad tika veiktas izmaiņas EA, lai modelis atbilstu datu bāzes tabulām. Pēc
tam tas vēlreiz tika eksportēts no EA un importēts UModel. Rezultāts ir redzams attēlā zemāk.
Att. 15 Pēc importa no EA
Iegūtais rezultāts ir ļoti līdzīgs tam, kas redzams EA (attēls zemāk), ir precīzi tāds pats
pēc UML notifikācijas, taču UModel rīkā vairs neatbilst datubāzes tabulu interpretācijai.
Att. 16 Attēlojums EA
14
Att. 17 SQL vaicājumu ģenerēšana tabulu izveidošanai
Att. 18 Uzstādījumi EA pirms SQL ģenerēšanas
15
2.2. DatabaseSpy
Nosaukums veidots pēc līdzības ar XML apstrādes programmatūru XMLSpy. Atšķirībā
no Umodel, DatabaseSpy ir pietuvināts fiziskajai realizācijai. Ar Umodel bija iespējams
veidot tabulas, kolonnas, primārās atslēgas un indeksus, kas kopumā ir komponenti, kas
atrodami visās DBVS realizācijās. Savukārt, DatabaseSpy ir saistīts ar konkrētas DBVS
iespējām un visas darbības ar izvēlētajiem komponentiem ir atbilstošas konkrētajai DBVS. To
panāk, ļaujot strādāt ar rīku tikai tad, kad ir izveidots savienojums ar konkrēto datubāzi. Par
šīs pieejas trūkumiem un priekšrocībām sīkāk tiks pastāstīts secinājumu daļā.
Att. 19 Savienojuma izveidošana
Uzmanība jāpievērš, lai uz datora jau b;utu uzinstalēti visi nepieciešamie draiveri. Tie
programmatūras komplektā nav iekļauti.
16
Att. 20 Projekta logs izveidotam savienojumam
Att. 21 Rīku joslas daļa
Rīku joslas apraksts. Otrā rinda, sākot no kreisās puses: Savienojuma izveidošana; SQL
vaicājumu logs; Vizuālās projektēšanas skats; Datu salīdzināšana; Shēmu salīdzināšana.
17
Att. 22 Grafiskās projektēšanas logs
Grafiskās projektēšanas logā redzamais paziņojums ļoti tieši norāda uz, manuprāt,
lielāko šī rīka problēmu – nevar projektēt datubāzi, ja nav izveidots savienojums ar konkrēto
datubāzi. Problēmas, kādas tas rada, tiks apskatītas zemāk. Vienas no tām dēļ, arī šī darba
izpildes laikā pazuda visas veiktās izmaiņas.
Att. 23 Tikko izveidotas divas jautnas tabulas
Grafiskā projektēšanas loga augšdaļā redzama rīku josla. No kreisās: Jaunas tabulas
izveidošana; Piezīmju lapiņas izveidošana projektēšanas logā.
Katra tabula ir grafiskajā attēlojumā ir sadalīta trīs daļās – kolonas, indeksi un atslēgas
(primārā, ārējā, unikalitātes). Līdz ar to attēlojums vēl aizvien ir ļoti līdzīgs tam, kāds ir EA
(Att. 16) un UModel (Att. 24). Konkrēto lauku, piemēram, tabulas kolonas nosaukumu, var
labot, veicot uz tā dubultklikšķi. Izņēmums ir tabulas datu tips, kura vērtību ir jāizvēlas
uzklikšķinot uz kolonas un tad izvēloties projekta pārskata logā.
18
Att. 24 Attēls no UModel
Att. 25 Projekta skats brīdi pirms rīks kļūdas dēļ pārstāja darboties
19
Attēlā Att. 25 redzama neliela daļa no topoša projekta. Tagad tabulās redzamas gan
kolonas, gad primārās, gan ārējās atslēgas, kā arī saites starp tabulām. Attēls ir bāls, jo tika
uzņemts brīdī, kad rīks jau bija pārstājis darboties.
Att. 26 Piezīmju lapiņa uz projektēšanas virsmas
Att. 27 Shēmas pievienošana datubāzei
Pašalaik izvēle ir neaktīva, jo aktīvais pieslēgums ir uz MS Access datubāzi. Kā zināms,
Access neatbalsta datu pārbaudi pēc shēmas utt. Praktisku pārbaudi par XML atbalstu veikt
neizdevās (jau iepriekš minētās draiveru problēmas dēļ), tāpēc tālāk informācija tiks sniegta
no DatabaseSpy lietotāja rokasgrāmatas.
20
Att. 28 Skats ar datubāzē izmantotajām shēmām
Pārslēdzot projekta pārlūku tiešsaites režīmā (skat. Att. 29), redzami jau datubāzē
izveidotie objekti. Pieminētajā attēlā ir redzamas divas XML tipa kolonas. Viena no tām attēla
izveidošanas brīdī ir iezīmēta.
Att. 29 Projekta pārlūks (on-line savienojuma režīmā)
21
Katru projekta pārlūkā redzamo kolonu iespējams izvērst un aplūkot sīkāk tajā
izmantotos citus objektus. Piemēram, attēlā (Att. 30) redzams, ka izvēršot kolnas objektu
saturu, iespējams redzēt arī, kāda XML shēma ir piesaistīta apskatāmajai kolonai.
Att. 30 XML tipa kolonas XML shēmas apskate
Zemāk projekta pārlūka logā (skat. Att. 31) var apskatīt visas projekta XML shēmas.
Att. 31 Visas projekta XML shēmas
22
Viens no iemesliem, kāpēc uzdevuma izpildei tika izvēlēti ALTOVA produkti ir tās
XML apstrādes rīks XMLSpy. Viena no DatabaseSpy priekšrocībām ir iespēja no jebkura no
ALTOVA rīkiem jebkuru shēmu nosūtīt apstrādei XMLSpy rīkā. Attēlā zemāk (Att. 32) ir
redzams, kā to izdarīt no projekta pārlūka loga.
Att. 32 Shēmas atvēršana XMLSpy rīkā
Attēlā (Att. 33) redzmas, kā tabulā tiek pievienota jauna XML tipa kolona. Oracle
DBVS gadījumā tiktu izmantotrs tips XMLTYPE. Tipu iespējams izvēlēties arī, ja
uzklikšķina uz uz kolonas un izvēli izdara projekta pārlūka logā.
Att. 33 apakšdaļā redzams logs (database change script), kurā attēloti SQL vaicājumi, ar
kuriem iespējams veikt grafiskajā projektēšanas logā attēlotas izmaiņas datubāzes struktūrā.
Šos vaicājumus iespējams no tā loga nokopēt un tālāk izmantot pēc ieskatiem, vai arī
automātiski grafiskajā projektēšanas logā veiktās izmaiņas īstenot datubāzē.
23
Att. 33 Jaunas XML kolonas pievienošana
2.3. Pārējie komplektā ietilpstošie rīki
Pārējie komplektā ietilpstošie rīki ir lieliski savietojami ar jau apskatītajiem rīkiem.
Nozīmīgākie no atlikušajiem tēmas ietvaros, manuprāt, ir XMLSpay (rīks darbam ar XML
dokumentiem un XML shēmām) un MapForce (datu integrācijas rīks, tai skaitā XSLT
veidošanai).
24
3. XML IZSTRĀDES RĪKU PIELIETOJUMA PIEMĒRS
SISTĒMU PROJEKTĒŠANĀ
Lai parādītu aprakstīto rīku praktisku pielietojumu, tika izvēlēta realitātei pietuvināta
problēmsfēra, tā papildināta ar niformāciju un prasībām, lai padarītu darbu vairāk aptverošu
un rastos nepieciešamība izmantot XML datubāzes iespējas. Rezultātā radīta problēma, kas
realitātē dez vai pastāv, taču kalpo par gana derīgu aprakstīto rīku izmantošanas piemēru.
Teorētiskajā aprakstā un arī praktiskās pārbaudes laikā tiks iekļauts nedaudz plašāks apraksts,
lai radītu priekštatu par izdomāto problēmsfēru. Atsevišķas problēmsfēras nianses ir
izdomātas un nav balstītas realitātē.
3.1. Ūdens skaitītāja rādījuma elektroniska reģistrācija
Maksājumu par komunālajiem pakalpojumiem viena no daļām ir maksājums par silto un
auksto ūdeni. Patērētājiem, kuriem ir uzstādīti ūdens skaitītāji, maksājuma apjoms tiek
aprēķināts pēc skaitītāja rādījuma. Reizi mēnesī ūdens skaitītāja rādījumi ir jāiesniedz namu
pārvaldē. Lielā daļā no namu pārvaldēm, tas tiek veikts, iemetot rādījumu lapiņas speciāli tam
paredzētā pastkastē namu pārvaldes norādītā vietā.
Patērētājs tiek viennozīmīgi identificēts pēc adreses, taču parasti jānorāda arī patērētāja
vārds un uzvārds. Katrs skaitītāja rādījumu nolasījums ir par noteiktu laika intervālu. Vienā
lapiņā tiek sniegta informācija gan par karstā, gan aukstāūdens skaitītāja rādījumiem.
Pašvaldība ir sociāli atbildīga un sniedz dažādus atvieglojumus trūcīgiem iedzīvotājiem.
Šo uzdevumu īstenošanai tiek uzturēta trūcīgo iedzīvotāju datubāze (patiesībā informācijas
sistēma, kuras glabātajai informācijai var piekļūt caur publicētajām tīmekļa pakalpēm), kurā ir
reģistrēti trūcīgie iedzīvotāji, to dzīvesvietas un dažādi pašvaldības sniegtie atvieglojumi.
Namu pārvaldes informācijas sistēmas daļa, kas atbild par ūdens skaitītāju lapiņu
reģistrāciju, satur tabulu, kur saglabā saņemtos ziņojumus par skaitītāja rādijumiem, tabulu,
kur saglabāta ūdens cenu par vienu m3 konkrētam rajonam vai adresei, kā arī tabula
maksājumu reģistrēšanai un uzskaitei.
3.2. Augsta līmeņa procesa apraksts
Attēlā zemāk (Skat. Att. 34) ir attēlota saistība starp dažādām informācijas sistēmām un
procesiem skaitītāja rādījumu saglabāšanas laikā.25
Namu pārvaldes mājas lapā notiekošais. Centrālās ūdensapgādes patērētājs namu
pārvaldes mājas lapā aizpilda skaitītāja rādījumu lapiņu un spiež pogu „Iesniegt”. Tiek
izsaukts sinhrons process, kura atbildi patērētājs ierauga dažu sekunžu laikā atvērtajā logā.
Rezultāts jāparāda sinhroni, lai patērētājs skaidri zinātu, vai rādījums ir iesniegts, vai nav.
Namu pārvlades darbplūsmu lietojumā notiekošais. Saņemot ziņojumu (tīmekļa
pakalpē „saveWaterConsumption”) tiek sākta jauna darbplūsmas instance. No patērētāja
saņemtās zīmītes tiek paņemta patērētāja adrese un izsaukta pašvaldības informācijas sistēmas
tīmekļa pakalpe „getWaterDiscount”. Atbildē no pašvaldības IS tiek saņemts atlaides apjoms
procentos. Tālāk patērētāja iesūtītā rādījumu zīmīte tiek papildināta ar no pašvaldības
informāciajs sistēmas saņemto atlaidi un izsaukta saglabāša namu pārvaldes datubāzē (tīmekļa
pakalpe „saveWaterConsumptionDB”). Atbildē no namu pārvaldes datu saglabāšanas tīmekļa
pakalpes tiek saņemts ziņojums par procesa rezultātu (veiksmīgs / neveiksmīgs). Tiek nosūtīta
atbilde uz namu pārvaldes mājas lapas formu par skaitītāja rādījumu saglabāšanas rezultātu.
BPEL Rekini
«Lane» Namu pārv aldes IS
«Lane» Pašv aldības IS«Lane» Namu pārv aldes darbplūsma«Lane» Namu pārv aldes mājaslapa
Saņemts skaitītāja rādījums
Procesa beigas - atbildes ziņojuma sūtīšana
Iegūt atlaidesapjomuReģistrēt skaitītāja rādījumu
Iesniegt
«BusinessServ ice»Pašv aldības IS
«BusinessServ ice»Saglabāt datus DB
Noformē ziņojumuno rēķinu lapiņas un
iegūtā atlaidesapjoma
Saglabāt skaitītājurādījumu datubāzē
Skaitītāja rādījuma nolasījums
Atbilde par skaitītāja rādījumureģistrēšanu (veiksmīga /neveiksmīga)
Patērētāja adrese
Atlaides apjoms (%)
Skaitītājarādījums unatlaides apjoms
Atbilde par saglabāšanasrezultātu (veiksmīgs /neveiksmīgs)
Att. 34 Skaitītāja rādījumu saglabāšanas process
26
Pašvaldības informācijas sistēmā notiekošais. Tiek pieņemts, ka namu pārvaldes
informācijas sistēmas (tai skaitā darbplūsmu) izstrādātāji paļaujas un pašvaldības portāla
sniegto tīmekļa pakalpes aprakstu, kurā teikts, ka izsaucot metodi „getWaterDiscount”, ieejas
ziņojumā norādot adresi, atbildes ziņojumā tiek iegūts atlaides lielums.
Namu pārvaldes informācijas sistēmā notiekošais. No namu pārvaldes darbplūsmas
lietojuma tiek izsaukta pašvaldības informācijas sistēmas tīmekļa pakalpes metode
„saveWaterConsumptionDB”. No šīs metodes, savukārt, tiek izsauktas datubāzes procedūras,
skaitītāja rādījumu saglabāšanai.
3.3. Ziņojumos izmantotās informācijas vienības
Tabula 1 Struktūra - Adrese
Lauka nosaukums Tips Obligāts
Valsts string X
Pilsēta string X
Iela string X
Māja string X
Dzīvoklis string
Tabula 2 Struktūra - Zīmīte
Lauka nosaukums Tips Obligāts
Adrese Adrese X
Datums No date X
Datums Lidz date X
Vārds string X
Uzvārds string X
Karstais ūdens integer X
Aukstais ūdens integer X
Līguma kods string X
27
Tabula 3 Struktūra - Atlaide
Lauka nosaukums Tips Obligāts
Atlaide integer X
Tabula 4 Struktūra - ZīmīteDB
Lauka nosaukums Tips Obligāts
Zīmīte Zīmīte X
Atlaide Atlaide
3.4. Shēmas projektēšana XMLSpy
Ieprekšējā nodaļā augstā līmenī apskatītas struktūras, kuras izmantotas ziņojumu
sūtīšanā. Nākamais solis ir izveidot XML shēmu, kurā tiks definētas aprakstītās struktūras, kā
arī tās, kas nepieciešamas fiziskai realizācijai, taču augstā līmenī nav aprakstītas. Shēmas tiks
veidotas, izmantojot gan grafisko redaktoru, gan nepieciešamības gadījumos teksta redaktoru.
Ziņojumu apmaiņai starp sistēmām (skat. Att. 34) tiek izmantotas tīmekļa pakalpes,
kuru ziņojumi atbilst SOAP standartam. Tāpēc XMLshēmā papildus ir definētas struktūras
SOAP ziņojumumu pieprasījumu un atbildes tipiem.Visi definētie tipi kopā redzami Att. 35.
28
Att. 35 XML definīcijas režģa skatā
Attēlos zemāt parādītas izveidotās struktūras atsevišķi grafiskā redaktora logā. Pēc
iespējas izvēlēti attēli, kur pēc iespējas vairāk redzama struktūru atkārtota izmantošana.
Att. 36 Adrese
29
Att. 37 Zīmīte
Att. 38 Atlaide
30
Att. 39 Zīmīte saglaāšanai DB
Att. 40 Kļūdas struktūra
31
Att. 41 Standarta atbildes bloks
Att. 42 Rādījuma saglabāšanas pieprasījuma ziņojuma tips
32
Att. 43 Rādījumu saglabāšanas atildes ziņojumu tips
Att. 44 Pieprasījuma tips atlaides iegūšanai
Att. 45 Atbildes tips atlaides pieprasījumam
33
Att. 46 Pieprasījuma tips zīmītes saglabāšanai DB
Att. 47 Atbildes tips zīmītes saglabāšanai DB
34
3.4.1. Ģenerētā XML shēma
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs" targetNamespace="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Adrese"><xs:sequence>
<xs:element name="Valsts" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="Pilsete" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="Iela" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="Maja" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="Dzivoklis" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence></xs:complexType><xs:element name="Adrese" type="Skaititajs:Adrese"/><xs:complexType name="Zimite">
<xs:sequence><xs:element name="Adrese" type="Skaititajs:Adrese" minOccurs="1" maxOccurs="1"/><xs:element name="DatumsNo" type="xs:date" minOccurs="1" maxOccurs="1"/><xs:element name="DatumsLidz" type="xs:date" minOccurs="1" maxOccurs="1"/><xs:element name="Vards" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="Uzvards" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="KarstaisUdens" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="AukstaisUdens" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="LigumaKods" type="xs:string" minOccurs="1" maxOccurs="1"/><xs:element name="DatumsIesniegts" type="xs:date" minOccurs="1" maxOccurs="1"/>
</xs:sequence></xs:complexType><xs:element name="Zimite" type="Skaititajs:Zimite"/><xs:complexType name="Atlaide">
<xs:sequence><xs:element name="Atlaide" type="xs:integer" minOccurs="0" maxOccurs="1"/>
</xs:sequence></xs:complexType><xs:element name="Atlaide" type="Skaititajs:Atlaide"/><xs:complexType name="ZimiteDB">
<xs:sequence><xs:element name="Zimite" type="Skaititajs:Zimite" minOccurs="0" maxOccurs="1"/><xs:element name="Atlaide" type="Skaititajs:Atlaide" minOccurs="0" maxOccurs="1"/>
</xs:sequence></xs:complexType><xs:element name="ZimiteDB" type="Skaititajs:ZimiteDB"/><xs:simpleType name="Nozimigums">
<xs:restriction base="xs:string"><xs:enumeration value="Bridinajums"/><xs:enumeration value="Kluda"/>
</xs:restriction></xs:simpleType><xs:complexType name="ErrorStructure">
<xs:sequence><xs:element name="Kods" type="xs:string" minOccurs="0" maxOccurs="1"/><xs:element name="Apraksts" type="xs:string" minOccurs="0" maxOccurs="1"/><xs:element name="Nozimigums" type="Skaititajs:Nozimigums" minOccurs="0"
maxOccurs="1"/></xs:sequence>
</xs:complexType><xs:element name="ErrorStructure" type="Skaititajs:ErrorStructure"/><xs:complexType name="StandartResponse">
<xs:sequence><xs:element name="Success" type="xs:boolean" minOccurs="1" maxOccurs="1"/><xs:element name="Kluda" type="Skaititajs:ErrorStructure" minOccurs="0"
maxOccurs="unbounded"/></xs:sequence>
</xs:complexType><xs:element name="StandartResponse" type="Skaititajs:StandartResponse"/><xs:complexType name="SaveWaterConsumptionRequest">
<xs:sequence><xs:element name="Zimite" type="Skaititajs:Zimite" minOccurs="0" maxOccurs="1"/>
</xs:sequence></xs:complexType><xs:element name="SaveWaterConsumptionRequest" type="Skaititajs:SaveWaterConsumptionRequest"/><xs:complexType name="SaveWaterConsumptionResponse">
35
<xs:sequence><xs:element name="StandartResponse" type="Skaititajs:StandartResponse" minOccurs="0"
maxOccurs="1"/></xs:sequence>
</xs:complexType><xs:element name="SaveWaterConsumptionResponse" type="Skaititajs:SaveWaterConsumptionResponse"/><xs:complexType name="GetWaterDiscountRequest">
<xs:sequence><xs:element name="Adrese" type="Skaititajs:Adrese" minOccurs="0" maxOccurs="1"/>
</xs:sequence></xs:complexType><xs:element name="GetWaterDiscountRequest" type="Skaititajs:GetWaterDiscountRequest"/><xs:complexType name="GetWaterDiscountResponse">
<xs:sequence><xs:element name="Atlaide" type="Skaititajs:Atlaide" minOccurs="0" maxOccurs="1"/><xs:element name="StandartResponse" type="Skaititajs:StandartResponse" minOccurs="0"
maxOccurs="1"/></xs:sequence>
</xs:complexType><xs:element name="GetWaterDiscountResponse" type="Skaititajs:GetWaterDiscountResponse"/><xs:complexType name="SaveWaterConsumptionDBRequest">
<xs:sequence><xs:element name="Zimite" type="Skaititajs:Zimite" minOccurs="0" maxOccurs="1"/><xs:element name="Atlaide" type="Skaititajs:Atlaide" minOccurs="0" maxOccurs="1"/>
</xs:sequence></xs:complexType><xs:element name="SaveWaterConsumptionDBRequest" type="Skaititajs:SaveWaterConsumptionDBRequest"/><xs:complexType name="SaveWaterConsumptionDBResponse">
<xs:sequence><xs:element name="StandartResponse" type="Skaititajs:StandartResponse" minOccurs="0"
maxOccurs="1"/></xs:sequence>
</xs:complexType><xs:element name="SaveWaterConsumptionDBResponse" type="Skaititajs:SaveWaterConsumptionResponse"/>
</xs:schema>
3.5. Atbilstošās datubāzes daļas projektēšana
Datubāze paredzēta namu pārvaldes informācijas sistēmas daļai, kurā tiek saglabāti
ūdens skaitītāju rādījumi (skat. Att. 34 Namu pārvaldes IS). Šī datubāzes daļa sastāvēs no trim
tabulām. Vien no izveidojamām tabulām būs tabula ar XML tipa kolonu. Šāda izvēle izdarīta,
lai demonstrētu XML saglabāšanas un vaicājumu iespējas Oracle DBVS. Pamatot šādu izvēli
var ar to, ka ūdens skaitītāja zīmītes struktūra var mainīties, daži lauki var netikt aizpildīti.
Turklāt realizāciju atvieglo, ka saglabāšanas procedūra jau saņem gatavu XML ziņojumu,
kurš bez transformācijas nepieciešamības var tikt saglabāts kolonā ar XML tipu.
Datubāzē tik paredzēta tabula, kur saglabāta cena konkrētam patērētājam par 1 m3
ūdens. Tabula ar XML tipa kolonu, kurā saglabās patērētāju reģistrētās zīmītes. Tabula, kurā
no saņemtajām zīmītēm tiks ģenerēti maksājumi.
Tabula 5 DB_ZIMITE
Lauks Tips Nosacījumi
ZIMITE_ID VARCHAR2 PK36
ZIMITE XMLType NotNull
Tabula 6 DB_CENA
Lauks Tips Nosacījumi
CENA_ID VARCHAR2 PK
LIGUMA_KODS VARCHAR2 NotNull; Unique
CENA NUMBER(5,2) NotNull
Tabula 7 DB_MAKSAJUMS
Lauks Tips Nosacījumi
MAKSAJUMS_ID VARCHAR2 PK
ZIMITE_ID VARCHAR2 NotNull; FK
CENA_ID VARCHAR2 NotNull; FK
SUMMA_JAMAKSA NUMBER(7,2) NotNull
SUMMA_SAMAKSATS NUMBER(7,2) NotNull
MAKSAJUMA_DATUMS DATE NotNull
DB tabulā DB_MAKSAJUMI daudzi lauki tiek aizpildīti automātiski, taču tālāk
projektēšanas aprakstā lielāka uzmanība veltīta darbībām ar tabulu DB_ZIMITE, jo tajā tiks
parādītas darbības ar XML datiem.
3.6. Datubāzes tabulu veidošana
Darba izpildes un atskaites rakstīšanas laika diemžēl beidzās DatabaseSpy
izmēģinājuma licences termiņš. Vispārējas pamatdarības tika aplūkotas atskaites teorētiskā
apraksta daļā. Praktiskā piemēra realizācija tika turpināta, izmantojot rīku Enterprise
Architect.
37
Att. 48 Projekta pārlūks tikko pēc tabulu izveidošanas
Att. 49 Izveidotās tabulas
38
Att. 50 Taulas pēc ārējo saišu pievienošanas
3.6.1. Ģenerētie DDL skripti
CREATE TABLE DB_CENA
(
CENA_ID VARCHAR2(50) NOT NULL,
LIGUMA_KODS VARCHAR2(50) NOT NULL,
CENA NUMBER(5,2) NOT NULL
)
;
CREATE TABLE DB_MAKSAJUMS
(
MAKSAJUMS_ID VARCHAR2(50) NOT NULL,
ZIMITE_ID VARCHAR2(50) NOT NULL,
CENA_ID VARCHAR2(50) NOT NULL,
SUMMA_JAMAKSA NUMBER(7,2) NOT NULL,
SUMMA_SAMAKSATS NUMBER(7,2) NOT NULL,
MAKSAJUMA_DATUMS DATE NOT NULL
)
;
39
CREATE TABLE DB_ZIMITE
(
ZIMITE_ID VARCHAR2(50) NOT NULL,
ZIMITE XMLTYPE NOT NULL
)
;
ALTER TABLE DB_CENA ADD CONSTRAINT PK_DB_CENA
PRIMARY KEY (CENA_ID)
;
ALTER TABLE DB_MAKSAJUMS ADD CONSTRAINT PK_DB_MAKSAJUMS
PRIMARY KEY (MAKSAJUMS_ID)
;
ALTER TABLE DB_ZIMITE ADD CONSTRAINT PK_DB_ZIMITE
PRIMARY KEY (ZIMITE_ID)
;
ALTER TABLE DB_CENA
ADD CONSTRAINT UQ_DB_CENA_LIGUMA_KODS UNIQUE (LIGUMA_KODS)
;
ALTER TABLE DB_MAKSAJUMS
ADD CONSTRAINT UQ_DB_MAKSAJUMS_CENA_ID UNIQUE (CENA_ID)
;
ALTER TABLE DB_MAKSAJUMS
ADD CONSTRAINT UQ_DB_MAKSAJUMS_ZIMITE_ID UNIQUE (ZIMITE_ID)
;
ALTER TABLE DB_CENA ADD CONSTRAINT FK_DB_CENA_DB_MAKSAJUMS
FOREIGN KEY (CENA_ID) REFERENCES DB_MAKSAJUMS (CENA_ID)
ON DELETE CASCADE
;
3.6.2. Ģenerēto tabulu apskats SQLDeveloper
Att. 51 DB_CENA
40
Att. 52 DB_MAKSAJUMS
Att. 53 DB_ZIMITE
Att. 54 XML shēma
Att. 55 Pēc XML shēmas reģistrēšanas parādījušās sistēmas tabulas (parādīta daļa)
41
3.7. Zīmītes saglabāšana datubāzē
Lai nodemonstrētu darbības ar XML datiem Oracle DBVS, tik izveidots vaicājums datu
saglabāšanai un vairāki vaicājumi šo datu izgūšanai. Apskatot kopējo procesu (skat. Att. 34),
redzams, ka zīmītes struktūra ceļo caur sistēmu, līdz to saglabā namu pārvaldes informācijas
sistēmas tīmekļa pakalpe. Tīmekļa pakalpe izsauc datubāzes procedūru, kuras vienīgais
parametrs ir struktūra „zīmīte”. Savukārt datubāzes procedūra, izmantojot SQL vaicājumu,
saglabā ierakstu tabulā. No augstāk aprakstītajiem procesiem tiks realizēts SQL vaicājums
zīmītes struktūras saglabāšanai. Pirms tam tiks aizpildīta tabula DB_CENA.
Att. 56 DB_CENA vērtības
Nākamajā solī rīkā XMLSpy tika radīts shēmai „CaseRikiXML.xsd” atbilstošs XML
ziņojums. Par saknes elementu tika izvēlēts mezgls „ZimiteDB”, jo tieši šis būs elments, kuru
no tīmekļa pakalpes saņemtā ziņojuma saglabās datubāzē.
42
Att. 57 XMLSpy izveidota shēmai atbilstoša zīmīte
3.7.1. Ziņojums – „Zimite_1”
<?xml version="1.0" encoding="UTF-8"?>
<Skaititajs:ZimiteDB xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs C:\Users\M\Desktop\CaseRikiXML.xsd">
<Skaititajs:Zimite>
<Skaititajs:Adrese>
<Skaititajs:Valsts>Latvija</Skaititajs:Valsts>
<Skaititajs:Pilsete>Riga</Skaititajs:Pilsete>
<Skaititajs:Iela>Sporta</Skaititajs:Iela>
<Skaititajs:Maja>5</Skaititajs:Maja>
<Skaititajs:Dzivoklis>12</Skaititajs:Dzivoklis>
</Skaititajs:Adrese>
<Skaititajs:DatumsNo>2011-12-01</Skaititajs:DatumsNo>
<Skaititajs:DatumsLidz>2012-01-01</Skaititajs:DatumsLidz>
<Skaititajs:Vards>Jānis</Skaititajs:Vards>
43
<Skaititajs:Uzvards>Vilks</Skaititajs:Uzvards>
<Skaititajs:KarstaisUdens>2</Skaititajs:KarstaisUdens>
<Skaititajs:AukstaisUdens>3</Skaititajs:AukstaisUdens>
<Skaititajs:LigumaKods>Ligums_1</Skaititajs:LigumaKods>
<Skaititajs:DatumsIesniegts>2011-12-29</Skaititajs:DatumsIesniegts>
</Skaititajs:Zimite>
<Skaititajs:Atlaide>
<Skaititajs:Atlaide>20</Skaititajs:Atlaide>
</Skaititajs:Atlaide>
</Skaititajs:ZimiteDB>
3.7.2. Zīmītes saglabāšanas vaicājuma izveide
INSERT INTO DB_ZIMITE
VALUES('C1', XMLType('<?xml version="1.0" encoding="UTF-8"?>
<Skaititajs:ZimiteDB xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs C:\Users\M\Desktop\CaseRikiXML.xsd">
<Skaititajs:Zimite>
<Skaititajs:Adrese>
<Skaititajs:Valsts>Latvija</Skaititajs:Valsts>
<Skaititajs:Pilsete>Riga</Skaititajs:Pilsete>
<Skaititajs:Iela>Sporta</Skaititajs:Iela>
<Skaititajs:Maja>5</Skaititajs:Maja>
<Skaititajs:Dzivoklis>12</Skaititajs:Dzivoklis>
</Skaititajs:Adrese>
<Skaititajs:DatumsNo>2011-12-01</Skaititajs:DatumsNo>
<Skaititajs:DatumsLidz>2012-01-01</Skaititajs:DatumsLidz>
<Skaititajs:Vards>Jānis</Skaititajs:Vards>
<Skaititajs:Uzvards>Vilks</Skaititajs:Uzvards>
<Skaititajs:KarstaisUdens>2</Skaititajs:KarstaisUdens>
<Skaititajs:AukstaisUdens>3</Skaititajs:AukstaisUdens>
<Skaititajs:LigumaKods>Ligums_1</Skaititajs:LigumaKods>
<Skaititajs:DatumsIesniegts>2011-12-29</Skaititajs:DatumsIesniegts>
</Skaititajs:Zimite>
<Skaititajs:Atlaide>
<Skaititajs:Atlaide>20</Skaititajs:Atlaide>
</Skaititajs:Atlaide>
</Skaititajs:ZimiteDB>
'));
Vaicājuma izpilde tika atkārtota ar citām lauka „Zīmīte” vērtībām.
44
Att. 58 DB_ZIMITE aizpildes vērtības
3.8. XML datu izgūšanas vaicājumi
Tiks apskatīti divu veidu izgūšanas vaicājumi. Vienā no veidiem būs iespējams noteikt
kritēriju jebkurai dokumenta daļai, taču izgūt varēs tikai visu XML dokumentu. Otrā veidā
būs iespējams izgūt jebkuru XML dokumenta daļu. Jāņem vērā, ka zemāk redzamie vaicājumi
paredzēti tehnikas deomonstrēšanai, tāpēc to sarežģītība šoreiz ir otrajā plānā. Interesantāki
vaicājumi tiks apskatīti tālākās nodaļās.
Gan veidojot XML shēmu, gan uz šīs shēmas bāzētu XML dokumentu tika izmantota
vārdtelpa „Skaititajs”. Reālās sistēmās mēdz bieži gadīties XML dokumenti, kuriem ir
norādīta vārdtelpa. Šis faktors ir jāņem vērā, veidojot vaicājumus XML datiem. Ja nav
norādīta vārdtelpa, netiek iegūtsgaidītais rezultāts. Savukārt, ja ir norādīta vārdtelpa, bet nav
tā vēlreiz deklarēta, tiek iegūta kļūda. Tālāk dotajos piemēros tiks parādīta vārdtelpas
deklarēšana vaicājumos.
3.8.1. Visa XML dokumenta izgūšana
SELECT z.zimite.getClobval() AS ZimiteXML
FROM DB_ZIMITE z;
45
Att. 59 Visu zīmīšu izgūšana
SELECT z.zimite.getClobval() AS ZimiteXML
FROM DB_ZIMITE z
WHERE
z.zimite.existsNode('/Skaititajs:ZimiteDB/Skaititajs:Zimite/Skaititajs:Adrese[Skaititajs:Valsts="Lietuva"]',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') = 1;
46
Att. 60 Visas zīmītes izgūšana, nosacījums uz konkrēta mezgla vērtību
Att. 61 Redzams, ka atlase notikusi pēc valsts
3.8.2. Vaicājumu veids, kurā iespējams izgūt XML dokumenta daļu
SELECT zimite_id,
extract(zimite, '//Skaititajs:Valsts',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"').getStringVal()
"Valsts"
47
FROM db_zimite
WHERE zimite IS NOT NULL;
Att. 62 Redzams, ka no XML dokumenta var izgūt atsevišķu elementu
SELECT zimite_id,
extract(zimite, '//Skaititajs:Valsts/text()',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"').getStringVal()
"Valsts"
FROM db_zimite
WHERE zimite IS NOT NULL;
Att. 63 No elementa izgūta tikai tā tekstuālā vērtība
48
3.9. Vaicājumi funkcionalitātes nodrošināšanai
Tiek apskatīta maza daļa funkcionalitātes. Piemēram, no datuāzē saglabātas skaitītāja
rādījumu zīmītes sagatavot maksājmuma summu, kuru saglabāt tabulā DB_MAKSAJUMS.
Netiks apskatīts process līdz brīdim, kad zīmītes id, kurai jāaprēķina summa ir atrasta, un pēc
brīža, kad summa ir iegūta.
Pašlaik sistēma ir izveidota tā, ka aukstais un karstais ūdens maksā vienādi, precīzāk,
var norādīt tikai vienu cenu – kļūda projektēšana gaitā. Taču tiek pieņemts, ka aba veida ūdeņi
maksā vienādi un kopējā summa ir abu komponentu summa. Viens komponents (piemēram,
aukstais ūdens) tiek aprēķināts no zīmītes ņemot iztērētā ūdens daudzumu, reizinot ar līguma
numuram atbilstošu cenu no DB_CENA un atņemot piešķirto atlaidi.
Vaicājums, kurš atrod rezultātu, cik liela maksājamā summa ir katrai reģistrētajai
zīmītei:
SELECT
z.zimite_id "Zīmītes ID",
c.liguma_kods "Līguma kods",
extractvalue(z.zimite, '//Skaititajs:KarstaisUdens',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') "Karstais ūdens",
extractvalue(z.zimite, '//Skaititajs:AukstaisUdens',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') "Aukstais ūdens",
c.cena "Cena",
extractvalue(z.zimite, '//Skaititajs:Atlaide/Skaititajs:Atlaide',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') "Atlaide",
( ( extractvalue(z.zimite, '//Skaititajs:KarstaisUdens',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') +
extractvalue(z.zimite, '//Skaititajs:AukstaisUdens',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') ) *
c.cena * ( 100 - extractvalue(z.zimite, '//Skaititajs:Atlaide/Skaititajs:Atlaide',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"'))/100 ) "Kopā"
FROM db_zimite z, db_cena c
WHERE zimite IS NOT NULL and
c.liguma_kods=extractvalue(z.zimite, '//Skaititajs:LigumaKods',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"');
49
Att. 64 Summa katrai zīmītei
Cik kopā jāmaksā patērētājam, kurš noslēdzis līgumu ar kodu „Ligums_1”:
SELECT
c.liguma_kods "Līguma kods",
sum (( ( extractvalue(z.zimite, '//Skaititajs:KarstaisUdens',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') +
extractvalue(z.zimite, '//Skaititajs:AukstaisUdens',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') ) *
c.cena * ( 100 - extractvalue(z.zimite, '//Skaititajs:Atlaide/Skaititajs:Atlaide',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"'))/100 ) ) "Kopā"
FROM db_zimite z, db_cena c
WHERE zimite IS NOT NULL and
c.liguma_kods=extractvalue(z.zimite, '//Skaititajs:LigumaKods',
'xmlns:Skaititajs="http://www.CaseRiki.lv/MarisVeismanis/Skaititajs"') AND
c.liguma_kods='Ligums_1'
Group by c.liguma_kods;
50
Att. 65 Visi maksājumi kopā patērētājam ar "Līgums_1"
3.10. Papildus informācija
Pēc shēmas registrēšanas parādījās jaunas sistēmas tabulas (skat. Att. 55). Tai pat laikā
ir parādījušies jauni tipi, kurus piešķirt tabulu kolonām. Tā, piemēram, pēc XSD reģistrēšanas
DBVS ir iespējams izveidot tabulu, kur kolonas tips ir nevis vienkārši XMLType, bet
ZimiteDB atbilstošs tips.
51
Att. 66 Tabulas kolonas veidošana izmantojot automātiski ģenērēto tipu
3.11. Informācijas avoti
XPath un Oracle XML datubāzes:
http://docs.oracle.com/cd/B10500_01/appdev.920/a96620/xdb04cre.htm#1035571
Dziļāks ieskats Oracle Xpath iespejās:
http://docs.oracle.com/cd/B10500_01/appdev.920/a96620/appcxpa.htm#621642
Diskusiju foruma tēma par vārdtelpu izmantošanu:
https://forums.oracle.com/forums/thread.jspa?threadID=233300
Sarežģītāku XML datubāzu realizācijas apraksti:
http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb05sto.htm#i1031943
52