søndag den 30. november 2008

XQuery for SQL programmør? Data Model

I denne anden post i XQuery for SQL programmør serie vi? Ll forklare, hvordan man repræsenterer relationelle tabeller i XML og søge i dem via XQuery.

SQL/XML mapping

Den SQL/XML-standarden , specificerer en kortlægning for relationelle tabeller i XML. Faktisk, SQL/XML indeholder et sæt kortlægning regler. Disse tilknytninger kan være parametre på flere måder, herunder målet namespace for XML-struktur, om de vil håndtere nulls at bruge xsi: nul eller fravær, og om at kortlægge en tabel til et enkelt element eller en skov af elementer.

Dette sidste parameter? er tabellen konverteres til en skov eller ej? ? er for det meste påvirker den XML-struktur. Her er den kortlægning for brugerne tabellen med SQL/XML skov parameter sat til falsk. Som vi ser der er en enkelt root element, og hver række i vores tabel bliver en element. Hver element indeholder elementer, der repræsenterer hver enkelt kolonne.

  

U01
<; NAME> Tom Jones
B


U02
Mary Doe
A

...
<;/BRUGERE>

Indstilling af SQL/XML skov parameter til sand, vi får en XML-struktur som vist nedenfor. Hver række i BRUGERE tabellen er knyttet til en element.

  
U01
Tom Jones <;/NAME>
B


U02
Mary Doe
A

...

I tilfælde du er nysgerrig efter, hvorfor denne kortlægning mulighed er opkaldt SQL/XML skov, der er ikke en enkelt root element i dette scenario, det er det, vi kalder en XML skov og dermed navnet på denne mulighed.

I slutningen der Er? t meget af en forskel mellem både kortlægning tilgange, en er ikke bedre end den anden. Det er mere et spørgsmål om smag end noget andet.

Som XML-struktur er forskellige afhængigt af den kortlægning, vil det påvirke den måde, vores forespørgsler se ud. Overvej et simpelt eksempel, få en beskrivelse af elementet med itemno 1004,

 vælge BESKRIVELSE 
fra ITEMS
hvor ITEMNO ='1004 '

Forudsættes SQL/XML skoven sat til true dette bliver,

 for $ element i indsamling ( "poster")/ITEMS 
hvor $ post/ITEMNO = "1004"
return $ post/BESKRIVELSE

Indstil til falske vi er nødt til at skrive til forespørgslen således notere yderligere række skridt,

 for $ element i indsamling ( "poster")/ITEMS/række 
hvor $ post/ITEMNO = "1004"
return $ post/BESKRIVELSE

DataDirect XQuery understøtter både tilknytninger, standard for SQL/XML skov parameter er sandt. Alle fremtidige eksempler og brug tilfælde i denne serie vil påtage sig denne standard.

Mapping NULL værdier

SQL NULL værdier er kortlagt som fraværende elementer. Ligesom der er forskel på en tom streng og NULL i SQL, der er en forskel i XML mellem et tomt element og en fraværende element.
Lad Tom Jones? rating er NULL, og Mary Doe? s rating det den tomme streng. XML-repræsentation af vores brugere tabel vil være som følger,

  
U01
Tom Jones


U02
Mary Doe


...

Henter alle brugere, der har en rating i SQL,

 vælge * fra brugere 
, hvis rating er IKKE NULL

Vi? ll forklare det mere indgående i en senere post, men XQuery variant er som følger,

 for $ bruger i indsamling ( " Brugere ")/USERS 
hvor $ bruger/rating
return $ bruger

En anden måde at repræsentere en NULL-værdi er ved hjælp af XML Schema xsi: nul mekanisme. Den BRUGERE tabellen ovenfor skitserede vil være struktureret således,

  
U01
Tom Jones
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" />


U02
Mary Doe


...

Alle brugere med et bedømmelse er hentet som følger,

 for $ bruger i indsamling ( "brugere")/USERS 
hvor $ bruger/rating/@ xsi: nul = "true"
return $ bruger

For mig er det xsi: nul tilgang ser langt mere detaljeret. DataDirect XQuery repræsenterer SQL NULL gennem en fraværende element.

Adgang til relationelle data via XQuery

Vi Haven? t endnu forklaret i detaljer, hvordan man kan henvises til efterfølgende forespørgsel, en SQL tabellen i din XQuery. Som du har regnet ud allerede fra det foregående eksempler, vi reference en SQL tabel gennem indsamling () funktion, der passerer som argument SQL tabellen navn. Bemærk, at dette er en konvention specifikke for DataDirect XQuery . Som XQuery virker ikke? T tilbyde en standard måde at få adgang til din relationel database, andre produkter kunne have valgt en anden fremgangsmåde.

Næste svarer SQL og XQuery forespørgsler,

 vælge * fra brugere 

for $ u i indsamling ( "brugere")/USERS
return $ u

Hvis du ønsker at søge en tabel i et særligt skema,

 select * fra MYAUCTION.USERS 

for $ u i indsamling ( "MYAUCTION.USERS")/USERS
return $ u

Og selvfølgelig lignende, hvis du ønsker at søge en tabel i et bestemt katalog.

XQuery Data Model

I dette indlæg vi lærte at repræsentere relationelle data i XML, vi? ll bruge denne XML-repræsentation i hele vores efterfølgende stillinger i denne serie.
Men selvfølgelig, at der er meget mere at sige om XQuery Data Model. Men dette er uden for rækkevidde for i dag, vi? Ll pege på nogle af de vigtigste karakteristika i et senere indlæg i denne serie. Bemærk også, at der er forskellige gode bøger dækker emnet, eller tjek de XQuery 1.0 og XPath 2.0 Data Model .

Næste vi? ll have en tættere undersøge slutter .

Tech Tags: