søndag den 30. november 2008

shredding XML-dokumenter i tabeller, en database uafhængig tilgang ...

Vi ser flere og flere DataDirect XQuery brugere shredding XML-dokumenter til en relationel database. Læsning specifikke data ud af XML-dokumenter og gemme den i deres database. Enhver relationel database , Oracle, SQL Server, DB2, Informix, Sybase, MySQL, PostgreSQL, ... du kalde det!

Ok, jeg ser nogle af jer allerede spørger ... "Hvorfor ikke bruge en native XML database til at gemme den komplette XML-dokumenter?" Der findes ikke et enkelt svar på spørgsmålet, som altid er det afhænger af mange faktorer. Er din behandling af data-centreret XML? Har du brug for at lagre data i en eksisterende relationel database? Skal data i din database skal queryable gennem rapportering værktøjer? Er du forbedre en eksisterende program med en XML-interface? Osv. osv. Hvis du kan svare positivt til en eller flere af disse spørgsmål, er det værd at overveje en tilgang, hvor XML-dokumenter er revet i forhold tabeller.

Fine, men hvorfor DataDirect XQuery? De fleste rdbms løsninger tilbyder allerede evnen til at sønderdele XML-dokumenter i en relationel database. Ligesom forklaret i denne IBM developerWorks papir, sønderdele XML-dokumenter med DB2 pureXML .

Der er en række grunde ... Disse database løsninger er for det meste sælger specifikke. Og selv hvis din virksomhed anvender kun en database mærke, du kan forventes at løbe ind i alvorlige uoverensstemmelser over forskellige versioner af databasen. Disse løsninger er for det meste besværlige i brug. Hvad med skalerbarhed, når det kommer til behandling stort dokument, i hundredvis af megabyte eller flere gigabyte? Hvad nu, hvis specifikke data transformationer er påkrævet? Osv. osv.

DataDirect XQuery besvarer de fleste af disse bekymringer. Bulk belastning af XML-data i en relationel database Indeholder nogle simple, men illustrative eksempler. Ligesom i de næste forespørgsel, hvor bøger er uploadet i overførsler bordet. Bemærk, at der ud over id? om bulk belastning, der er også behov for at omdanne og validere nogle af de data. Alle forholdsvis enkel at bruge XQuery.

 Erklære variable $ forsendelse 
som dokument-node (element (*, xs: untyped)) eksterne;

for $ bog i $ forsendelse/ordre/bog
vende tilbage
ddtek: SQL-insert ( "overførsler",
"Dato", nuværende-datetime (),
"ISBN", $ bog/ISBN ,
"TITLE", store bogstaver ($ bog/titel),
"Mængde",
if ($ bog/@ mængde) derefter $ bog/@ mængde andet 1)

Eller at gøre eksempel en smule mere kompliceret, overveje følgende database uafhængige upsert scenario.

 erklære variable $ forsendelse 
som dokument-node (element (*, xs: untyped)) eksterne;

for $ bog i $ forsendelse/ordre/bog
Lad $ mængde: = if ($ bog/@ mængde) derefter
xs: heltal ($ bog/@ mængde)
ellers
1
lad $ overførsel: =
Indsamling ( "overførsler")/overførsler [ISBM = $ bog/ISBN]
vende tilbage
if ($ forsendelse) derefter
ddtek: SQL-update ($ overførsel,
"Mængde", $ forsendelse/mængde + $ mængde)
ellers
ddtek: SQL-insert ( "overførsler",
"Dato", nuværende-datetime (),
" ISBN ", $ bog/ISBN,
" TITLE ", store bogstaver ($ bog/titel),
" Mængde ", $ mængde)

Men der er naturligvis meget mere kan du gøre. Et andet eksempel, inspireret af developerWorks artiklen nævnt ovenfor overveje en såkaldt "stykliste" XML-dokument.

  



























Disse data med rekursiv del elementer, kan være repræsenteret i en relationsdatabase bordet.

Intet mere end følgende simpel søgning får du der.

 for $ post i/emner/item 
vende tilbage
(
ddtek: SQL-insert ( "itemtest",
"itemname", $ Konto/@ desc,
"ID", $ post/@ model)
,
for $ del i $ post//del
vende tilbage
ddtek: SQL - indsætte ( "itemtest",
"itemname", $ post/@ desc,
"moderselskab", $ del /../desc,
"beskrivelse", $ del/@ desc ,
"ID", $ del/@ PARTNUM)
)

Vi har vist, hvor nemt du kan sønderdele XML dokumenter og indlæse data i forbindelse tabeller. Og vigtigt, alt dette i en skalerbar og database uafhængig måde .

Ingen kommentarer: