Oracle Xmltype Store Som Binære Alternativer


16 Valg av XMLType-lagring og indeksering. Introduksjon til å velge en XMLType-lagringsmodell og indeksering Approaches. XMLType er en abstrakt SQL-datatype som gir forskjellige lagrings - og indekseringsmodeller som passer best til XML-dataene dine og bruken av det. Fordi det er en abstrakt data type, søknadene dine og databasesøkene får fleksibilitet, det samme grensesnittet er tilgjengelig for alle XMLType-operasjoner. forskjellige applikasjoner bruker XML-data på forskjellige måter Noen ganger er det konstruert fra relasjonelle datakilder, så det er relativt strukturert. Noen ganger brukes det til utvinning, transformasjon , og laster opp ETL-operasjoner, i så fall er det også ganske strukturert. Noen ganger brukes det for gratisformularer ustrukturert eller halvstrukturert, for eksempel bøker og artikler. Rettsmetoder kan også være forskjellige for ulike typer data Datasentriske brukstilfeller involverer ofte et fast sett med spørringer, mens dokument-sentriske brukstilfeller ofte involverer vilkårlig ad hoc-spørringer. Fordi det er en Bredt spekter av XML-bruk, finnes det ingen lagringsmodell med en størrelse som gir optimal ytelse og fleksibilitet for alle bruksområder. Oracle XML DB tilbyr to lagringsmodeller for XMLType og flere indekseringsmetoder som passer til disse forskjellige lagringsmodellene. Du kan skreddersy ytelse og funksjonalitet som passer best til den type XML-data du har og måtene du bruker. Derfor er en nøkkelbeslutning å lage hvilken XMLType-lagringsmodell som skal brukes for hvilke XML-data i dette kapittelet du kan velge det beste lagringsalternativet for en gitt bruk case. XMLType-tabeller og kolonner kan lagres på følgende måter. Binær XML-lagring Dette kalles også etterparsel-utholdenhet. Det er standard lagringsmodell for Oracle XML DB. Det er et ettersparing, binært format designet spesielt for XML-data Binær XML er kompakt og XML-skjemabevisst Den største fordelen med binær XML-lagring er fleksibilitet du kan bruke den til XML-skjemabaserte dokumenter eller for dokumenter som ikke er basert på et XML-skjema Y du kan bruke den med et XML-skjema som gjør det mulig for høy datavariasjon eller som utvikler seg betydelig eller uventet. Denne lagringsmodellen gir også effektiv delvis oppdatering og strømbar forespørsel evaluering. Objektrelasjonell lagring Dette kalles også strukturert lagring og objektbasert utholdenhet Denne lagringsmodellen representerer et entitetsforhold ER-dekomponering av XML-dataene Den gir best mulig ytelse for svært strukturerte data med et kjent og mer eller mindre fastt sett med spørringer. Søkeytelse samsvarer med relasjonsdata, og oppdateringer kan utføres på plass. Fra og med Oracle Database 12 c Release 1 12 1 0 1 blir den ustrukturerte CLOB-lagringsmodellen for XMLType utdatert. Bruk binær XML-lagring i stedet. Hvis du har eksportert XMLType-data som er lagret som CLOB-data, bør du vurdere å flytte den til binært XML-lagringsformat ved å bruke Oracle GoldenGate Hvis dokumenttroskap er viktig for et bestemt XML-dokument, lagrer du en kopi av det i en relasjons CLOB-kolonne. O racle XML DB støtter følgende typer indekser på XMLType data. B-tree funksjonelle indekser på objekt-relasjonell storage. XML søkeindeks på binær XML storage. XMLIndex med strukturerte og ustrukturerte komponenter på binær XML storage. B-tre indekser på sekundær Tabeller opprettet automatisk for XMLIndex både strukturerte og ustrukturerte komponenter på binær XML-lagring. Andre brukstilfeller krever forskjellige kombinasjoner av XMLType-lagringsmodell og indekser. XMLType Bruk Case Spectrum Data-Centric til Document-Centric. Når du velger en XMLType-lagringsmodell, bør du vurdere arten av XML-dataene dine og måtene du bruker Det er et spekter av brukstilfeller, alt fra de fleste datasentriske til de fleste dokument-sentriske. Dette er illustrert i Figur 16-1, som viser de mest datasentriske tilfellene til venstre og de mest dokument-sentriske sakene til høyre. Figur 16-1 XML-brukstilfeller og XMLType-lagringsmodeller. Beskrivelse av figur 16-1 XML-brukstilfeller og XMLType-lagringsmodeller. Data-sentriske data er highl y strukturert, med relativt statisk og forutsigbar struktur, og dine applikasjoner utnytter denne strukturen. Dataene samsvarer med et XML-skjema. Dokument-sentriske data kan deles i to tilfeller. Dataene er generelt uten struktur eller er av variabel struktur. Dette inkluderer Saken av dokumenter som har både strukturerte og ustrukturerte deler Dokumentstruktur kan variere over tid evolusjon, og innholdet kan blandes semi-strukturert, med mange elementer som inneholder både tekstnoder og barnelementer. Mange XML-elementer kan være fraværende eller kan vises i forskjellige ordrer Dokumenter kan eller ikke samsvarer med et XML-skjema. Dataene er relativt strukturert, men programmene dine utnytter ikke den strukturen de behandler dataene som om de var uten strukturmon. Bruk tilfeller for XML-data lagret som XMLType. Anbefalinger er gitt for applikasjonsbruk tilfeller som korresponderer med vanlige bruk tilfeller for XML-data lagret som XMLType. If din bruk sak er en vanlig en, så tha t det er ikke dekket her, så referer til resten av dette kapittelet for informasjon om spesielle tilfeller. Dette avsnittet handler om bruk av XML-data som vedvarer som XMLType. En vanlig brukstilfelle for XML-data innebærer generering av XML-data fra relasjonelle data Denne saken er ikke dekket her, da det involverer relasjonslagring og de genererte XML-dataene ikke nødvendigvis vedvarer. For tilfeller der genererte XML-data vedvarer som XMLType, se XMLType Bruk case-trinns XML-data for ETL. I dette brukstilfellet er det ikke nødvendig å oppdatere eller spørre fragmenter av XML-data som er lagret i databasen. Du har disse alternativene for denne bruk case. Store det som XMLType ved hjelp av binær XML-lagring. Lag det i en relasjonsblokk eller CLOB-kolonne, helst en SecureFiles LOB. Hvis du lagrer XML-dataene i en relasjons LOB-kolonne, ikke som XMLType Oracle Database parser ikke dataene og det kan ikke garantere dens gyldighet Og du kan ikke utføre XMLType-operasjoner på data. XMLType Bruk Case Data Integration fra diverse kilder med forskjellige XML-skjemaer. Hvis XML-dataene dine kommer fra flere datakilder som bruker forskjellige XML-skjemaer, bruker du binær XML-lagring. har tre underkasser. Hvis XML-data inneholder øyer med strukturert, forutsigbar data, og dine søknader er kjent, bruk deretter XMLIndex med en strukturert komponent for å indeksere de strukturerte øyene selv om dataomgivelsene ng disse øyene er ustrukturerte En strukturert indekskomponent gjenspeiler spørsmålene du bruker En RSS-nyhetsaggregat er et eksempel på en slik brukstilfelle. Hvis det ikke finnes slike strukturerte øyer eller dine søknader er ukjente før ad hoc, bruk deretter XMLIndex med en ustrukturert komponent. Hvis du bruker spørringer som involverer fulltekstsøk, bruk deretter en XML-søkeindeks sammen med XQuery pragma ora noschema. XMLType Bruk case-trinns XML-data for ETL. I dette brukssaken blir data hentet fra eksterne kilder, forvandlet til å passe operasjonelle behov typisk relasjonelle, og deretter lastet inn i databasen ekstrakt transformere belastning ETL Spesielt skiller transformasjon denne bruk case. ETL bruk tilfeller ofte integrere data fra flere applikasjoner som vedlikeholdes eller vert av flere parter ved hjelp av ulike programvare og maskinvare systemer Dataene som utvinnes, er ofte ansvar for andre parter enn de som forvandler det eller bruker det etter transformasjon. XML-dataene som er involvert, er typ ically svært strukturert og samsvarer med et XML-skjema. Dette brukstilfelle dekker både å produsere relasjonsdata fra XML-data og generere XML-data fra relasjonsdata. En delmengde av ETL-brukstilfeller involverer behovet for effektivt å oppdatere XML-dataene. Oppdatering kan innebære utskifting av en helhet XML-dokument eller endringer i bare fragmenter av et dokument, delvis oppdatering. Objektrelasjonell lagring av XMLType-data er generelt egnet for denne bruksfasen. XMLType Bruk sak Semi-Strukturert XML-data. I dette brukssaken er enten XML-dataene av variabel form eller store deler av det er ikke godt definert. Det kan ikke være et tilhørende XML-skjema, eller XML-skjemaet kan muliggjøre høy datavariasjon eller utvikle seg betydelig eller på uventede måter. Ekstra XML-lagring av XMLType-data er generelt egnet for dette brukstilfellet. Bruk XMLIndex-indeksering med strukturert komponent når forespørselsbaner er kjent, og bruk XML-indeksering av ikke-strukturert komponent i XML-indeksering når stier ikke er kjent på forhånd ad hoc quer Bruk en XML-søkeindeks for XQuery Full-Text queries. XMLType Bruk sak Business Intelligence Queries. For å aktivere BI-spørringer over XML-data, kan du bruke SQL XML-funksjonen XMLTable til å projisere verdier som finnes i dataene som kolonner av en virtuell tabell Bruk deretter analytiske funksjonsvinduer sammen med SQL ORDER BY og GROUP BY for å operere på kolonner i det virtuelle tabellen. For bedriftsinformasjonsforespørsler vil du generelt gjøre alle de følgende. Lag dine XMLType-data som binær XML. Use en XMLIndex-indeksen med en strukturert komponent. Opprett relasjonelle visninger over dataene ved hjelp av SQL XML-funksjonen XMLTable der visningene projiserer alle kolonner av interesse for BI-applikasjonen. Skriv søknadsforespørsmålene dine mot disse relasjonelle visninger. Hvis XMLIndex-indeksen er opprettet i en til - En korrespondanse med disse visningene, oversetter Oracle Database automatisk spørringer over visningene til spørringer over relasjonstabellene i den strukturerte XMLIndex-komponenten, og gir relasjonsperspektiv ormance. When du bruker analytisk-funksjon-vinduer, ORDER BY eller GROUP BY i en kolonne i det virtuelle tabellen, blir disse operasjonene oversatt til Windows, ORDER BY og GROUP BY-operasjoner på de tilsvarende fysiske kolonnene i XMLIndex-tabellene med strukturert komponent. Oracle dokumentasjon hevder at den lagrer XMLType mer kompakt som BINARY XML enn som CLOB Men hvordan finner jeg ut hvor mye plass er tatt av binær xml. Så synes vsize å være størrelsen på en slags peker eller LOB-lokaliserer og getclobval pakker ut den binære XML til tekst Men hva med lagringsstørrelsen på den binære XML-enheten. Hjelp deg, bordstørrelsen er 340 GB, så det er verdt å se på lagringsalternativer. Skrevet 15. jul 14 kl 17 41. Vel, et segment har ingenting å gjøre med en rad som sådan Et segment er enten et bord, en tabellpartisjon, en indeks, en LOB Det viktigste er å lagre mer enn 4k innenfor det, slik at det ikke er lagret ditt lag som er lagret i tråd, noe som innebærer innenfor selve databasen blokk av Rækken selv, men er lagret i en ut lin e LOB-segmentet gvenzl 22. juli klokken 13 00. rep problemet, ikke lov til å skrive kommentarer du ønsket å si mellom spørsmål som jeg forsto den eneste likheten er lagringsplass problemet, trodde det kan være nyttig å gjette estimering du ikke snakke om hvilken type av dataene du skal lagre som bXML. unpacker den binære XML til tekst. Hvis det er rent XML, avhenger det av hvilken kompressor du skal bruke. Vanligvis er lzma gzip brukt til binær komprimering. Kanskje jeg skriver om for åpenbare ting, men det s alt jeg vet.4 Bruke XMLType. This kapittelet beskriver hvordan du bruker XMLType datatypen, oppretter og manipulerer XMLType-tabeller og kolonner, og spør om dem. Den inneholder følgende seksjoner. Ikke-skjemabaserte XMLType-tabeller og kolonner beskrevet i dette kapitlet er ikke basert på XML-skjema Du kan imidlertid bruke teknikkene og eksemplene som er gitt i dette kapitlet, uavhengig av hvilket lagringsalternativ du velger for XMLType-tabellene og kolonnene. Se Kapittel 3, Bruke Oracle XML DB for videre lagringsreko mmendations. XML skjemabasert Tillegg B, XML Schema Primer og Chapter 5, Structured Mapping of XMLType beskrive hvordan du arbeider med XML-schema-baserte XMLType-tabeller og kolonner. Hva er XMLType. Oracle9 i Release 1 9 0 1 introdusert en ny datatype, XMLType for å lette innfødt håndtering av XML-data i databasen Følgende oppsummering XMLType. XMLType kan brukes i PL SQL lagrede prosedyrer som parametere, returverdier og variabler. XMLType kan representere et XML-dokument som en forekomst av XMLType i SQL. XMLType har innebygde medlemsfunksjoner som opererer på XML-innhold. For eksempel kan du bruke XMLType-funksjoner til å lage, trekke ut og indeksere XML-data som er lagret i Oracle9 i databasen. Funksjonalitet er også tilgjengelig gjennom et sett API-programmer for applikasjonsprogramgrensesnitt gitt i PL SQL og Java. With XMLType og disse funksjonene, kan SQL-utviklere utnytte kraften i relasjonsdatabasen mens de arbeider i sammenheng med XML. På samme måte kan XML-utviklere utnytte kraften til XML-standarder wh ile arbeider i sammenheng med en relasjonsdatabase. XMLType datatype kan brukes som datatype av kolonner i tabeller og visninger Variabler av XMLType kan brukes i PL SQL lagrede prosedyrer som parametere, returverdier og så videre. Du kan også bruke XMLType i SQL, PL SQL og Java gjennom JDBC. In Oracle9 i Release 1 9 0 1 ble XMLType bare støttet på serveren i SQL, PL SQL og Java I Oracle9 i Release 2 9 2, støttes XMLType også på klientsiden gjennom SQL, Java og protokoller som FTP og. En rekke nyttige funksjoner som opererer på XML-innhold, er gitt. Mange av disse leveres som både SQL - og medlemsfunksjoner av XMLType. For eksempel trekker uttrekksfunksjonen ut en bestemt node s fra en XMLType instance. You kan bruke XMLType i SQL spørringer på samme måte som alle andre brukerdefinerte datatyper i systemet. Fordeler av XMLType Datatype og API. XMLType datatype og API gir betydelige fordeler Det gjør det mulig for SQL-operasjoner på XML-innhold, så vel som XML operasjoner på SQL content. Versatile API XMLType har en allsidig API for applikasjonsutvikling, da den inneholder innebygde funksjoner, indeksering støtte, navigering og så videre. XMLType og SQL Du kan bruke XMLType i SQL-setninger kombinert med andre kolonner og datatyper For Eksempel, du kan spørre XMLType-kolonner og bli med resultatet av ekstraksjonen med en relasjonskolonne, og deretter kan Oracle bestemme en optimal måte å utføre disse spørringene. Optimalisert evaluering ved hjelp av XMLType XMLType er optimalisert for ikke å materialisere XML-dataene til en trestruktur med mindre nødvendig Derfor, når SQL velger XMLType-forekomster i spørringer, utveksles bare en serialisert form over funksjonsgrenser. Disse eksploderes bare til treformat når operasjoner som ekstrakt og e xistsNode utføres. Den interne strukturen til XMLType er også en optimalisert DOM-lignende trestruktur. Indexing Oracle Text-indeksen er forbedret for å støtte XMLType-kolonner Du kan også opprette funksjonbaserte indekser på existsN ode og ekstrakt funksjoner for å øke spørringen evaluering. Når du bruker XMLType. Use XMLType når du trenger å utføre følgende. SQL spørringer på en del av eller hele XML-dokument Funksjonene existNode og utdrag gi de nødvendige SQL spørring funksjoner over XML-dokumenter. Sterk maskinskriving inne i SQL-setninger og PL SQL-funksjoner Sterk maskinskriving innebærer at du sikrer at verdiene som sendes inn, er XML-verdier og ikke noen vilkårlig tekststreng. XPath-funksjonalitet levert av ekstrakt og existsNode-funksjoner Merk at XMLType bruker den innebygde C XML-parseren og prosessor og dermed gir bedre ytelse og skalerbarhet når det brukes i serveren. Indexing på XPath-søk på dokumenter XMLType har medlemsfunksjoner som du kan bruke til å lage funksjonsbaserte indekser for å optimalisere søk. For å skjerme applikasjoner fra lagringsmodeller Bruke XMLType i stedet for CLOBer eller relasjonell lagring tillater applikasjoner å gå grasiøst til forskjellige lagringsalternativer senere uten å påvirke noe av spørringen eller DML-setninger i applikasjonen. For å forberede seg på fremtidige optimaliseringer. Ny XML-funksjonalitet vil støtte XMLType Siden Oracle9 i databasen er nasjonalt oppmerksom på at XMLType kan lagre XML-data, kan bedre optimaliseringer og indekseringsteknikker gjøres. Ved å skrive programmer for å bruke XMLType disse optimaliseringene og forbedringene kan enkelt oppnås og bevart i fremtidige utgivelser uten at du trenger å skrive om programmer. Storing XMLType-data i Oracle XML DB. XMLType-data kan lagres på to måter eller en kombinasjon derav. I store objekter LOBs LOB-lagring opprettholder innholdsnøyaktighet til den opprinnelige XML whitespaces og alt Her lagres XML-dokumentene sammen som hele dokumenter som filer I denne versjonen, for ikke-skjemabasert lagring, tilbyr XMLType et CLOB-lagringsalternativ. I fremtidige utgivelser kan Oracle gi andre lagringsalternativer, for eksempel BLOBs, NCLOBS, og så videre. Du kan også opprette en CLOB-basert lagring for XML-skjemabasert lagring. Når du oppretter en XMLType-kolonne uten noen XM L skjema-spesifikasjon, blir en skjult CLOB-kolonne automatisk opprettet for å lagre XML-dataene. XMLType-kolonnen i seg selv blir en virtuell kolonne over denne skjulte CLOB-kolonnen. Det er ikke mulig å få direkte tilgang til CLOB-kolonnen, men du kan angi lagringsegenskapene for kolonnen Bruke XMLType-lagerklausulen. I Strukturert lagring i tabeller og visninger Strukturert lagring opprettholder DOM-dokumentobjektmodellens troverdighet Her splittes XML-dokumentene i objektrelasjonelle tabeller eller visninger XMLType oppnår DOM-fidelity ved å opprettholde informasjon som SQL eller Java-objekter vanligvis gjør ikke sørge for, for eksempel. Ordering av barnelementer og attributter. Distinguishing mellom elementer og attributter. Unstrukturerte innhold deklarert i skjemaet For eksempel innhold blandet eller noen deklarasjoner. Undeklarerte data i eksempel dokumenter, for eksempel behandlingsinstruksjoner, kommentarer og navneområde declarations. Support for grunnleggende XML datatyper ikke tilgjengelig i SQL Boolean, QName, og så on. Support for XML-begrensninger fasetter ikke støttes direkte av SQL, som oppnådde lists. Native XMLType-forekomster inneholder skjulte kolonner som lagrer denne ekstra informasjonen som ikke passer perfekt i SQL-objektmodellen Denne informasjonen kan nås via APIer i SQL eller Java , ved hjelp av medlemsfunksjoner, for eksempel extractNode. Changing XMLType-lagring fra strukturert lagring til LOB, eller omvendt, er mulig ved å bruke database IMPORT og EXPORT. Din applikasjonskode behøver ikke å endres. Du kan da endre XML-lagringsalternativer når du setter inn søknaden din siden hvert lagringsalternativ har sine egne fordeler. Fordeler og ulemper med XML-lagringsalternativer i Oracle XML DB. Table 4-1 oppsummerer noen fordeler og ulemper å vurdere når du velger Oracle XML DB-lagringsalternativet. Tast 4-1 XML-lagringsalternativer i Oracle XML DB. Example 4-12 Angi begrensninger på XMLType Columns. prevents innlegg som eksempeleksempel 4-13 Bruk ALTER TABLE til å endre IKKE NULL av XMLType kolonner. Du kan også bruke AL TER TABLE-setning for å endre IKKE NULL-informasjon for en XMLType-kolonne på samme måte som du ville for andre kolonne typer. Du kan også definere kontrollbegrensninger på XMLType-kolonner Andre standardverdier støttes ikke på denne datatypen. Manipulering av XML-data i XMLType-kolonner Tabeller . Siden XMLType er en brukerdefinert datatype med funksjoner definert på den, kan du påberope funksjoner på XMLType og få resultater. Du kan bruke XMLType hvor du bruker en brukerdefinert type, inkludert for tabell kolonner, visninger, utløserkropper og type definisjoner. Du kan utføre følgende manipulasjoner eller Data Manipulation Language DML på XML-data i XMLType kolonner og tabeller. Innføring XML-data i XMLType kolonner tabeller. Du kan sette inn data i XMLType kolonner på følgende måter. XMLType kolonner kan bare lagre godt formet XML-dokumenter Fragmenter og annet ikke godt utformet XML kan ikke lagres i XMLType-kolonner. Bruk INSERT-setninger. For å bruke INSERT-setningen til å sette inn XML-data i XMLType må du Først opprett XML-dokumenter for å utføre innsatsen. Du kan opprette XML-dokumenter som kan settes inn på følgende måte. Bruk XMLType-konstruktører Dette kan gjøres i SQL, PL SQL og Java. Bruk SQL-funksjoner som XMLElement XMLConcat og XMLAGG. Dette kan gjøres i SQL, PL SQL og Java. Eksempel 4-14 Sette inn XML-data ved hjelp av createXML med CLOB. Følgende eksempler bruker INSERT SELECT og XMLType-konstruktøren til å først opprette et XML-dokument og deretter sette dokumentet inn i XMLType-kolonnene. Overvei tabell poclobtab som inneholder en CLOB, poClob for lagring av et XML-dokument. Eksempel 4-15 Sette inn XML-data ved hjelp av en XMLType-instans. Du kan sette inn et kjøpsordre-XML-dokument i tabell, poxmltab ved å bare opprette en XML-forekomst fra CLOB-dataene som er lagret i den andre poclobtab. Du kan også få CLOB-verdien fra et hvilket som helst uttrykk, inkludert funksjoner som kan opprette midlertidige CLOBer eller velge CLOBer fra andre tabeller eller visninger. Eksempel 4-16 Sette inn XML-data ved hjelp av XMLType med String. This eksempel legger inn en innkjøpsordre i tabellpotab ved hjelp av XMLType-konstruktøren. Eksempel 4-17 Sette inn XML-data ved hjelp av XMLElement. Dette eksempelet legger inn en innkjøpsordre i tabell poxmltab ved å generere det ved hjelp av XMLElement SQL-funksjonen. Antag at innkjøpsordren er en objektvisning som inneholder et innkjøpsordreobjekt Hele definisjonen av innkjøpsordrevisningen er gitt i DBMSXMLGEN Generere en innkjøpsordre fra databasen i XML Format. XMLedere oppretter en XMLType fra innkjøpsordreobjektet, som deretter settes inn i tabellen poxmltab Du kan også bruke SYSXMLGEN i INSERT-setningen. Velg og spørre XML-data. Du kan spørre XML-data fra XMLType-kolonner på følgende måter. Ved å velge XMLType-kolonner via SQL, PL SQL eller Java. Ved å spørre XMLType-kolonner direkte og ved hjelp av ekstrakt og existNode. By using Oracle Text-operatører for å spørre XML-innholdet Se Indeksering XMLType-kolonner og Kapittel 7, Søke XML-data med Oracle Text. SQL-funksjoner for Manipula ting XML data. SQL funksjoner som existNode ekstrakt XMLTransform og updateXML operere på XML data inne i SQL XMLType datatype støtter de fleste av disse som medlemsfunksjoner Du kan bruke enten den egoistiske stilen til påkalling eller SQL-funksjonene. Valg av XML-data. Du kan velge XMLType data ved hjelp av PL SQL eller Java Du kan også bruke getClobVal, getStringVal eller getNumberVal-funksjonene for å hente XML som henholdsvis CLOB, VARCHAR eller NUMBER. Eksempel 4-18 Velge XMLType-kolonner ved hjelp getClobVal. Dette eksemplet viser hvordan du velger en XMLType-kolonne ved hjelp av SQL Plus. Querying XML Data. You kan spørre XMLType data og trekke ut deler av det ved hjelp av existNode - og ekstraktfunksjonene Begge disse funksjonene bruker en delmengde av W3C XPath-anbefalingen til å navigere i dokumentet. Bruke XPath-uttrykk for å søke XML Documents. XPath er en W3C-anbefaling for å navigere XML-dokumenter XPath modeller XML-dokumentet som et tre av noder Det gir et rikt sett med operasjoner for å gå i treet og å søke predikater og node testfunksjoner Bruk av et XPath-uttrykk til et XML-dokument kan resultere i et sett med noder. For eksempel velger PO PONO ut alle PONO-elementene under PO-rotelementet i dokumentet. Tabel 4-2 viser noen vanlige konstruksjoner som brukes i XPath. Table 4-2 Noen vanlige XPath Constructs. Querying XML-data ved hjelp av XMLType Member Functions. You kan velge XMLType data gjennom PL SQL, OCI eller Java Du kan også bruke getClobVal getStringVal eller getNumberVal funksjoner for å hente XML som en CLOB, VARCHAR eller et tall. Eksempel 4-19 Henting av et XML-dokument som en CLOB Bruke getClobVal og existNode. This eksempel viser hvordan du velger en XMLType-kolonne ved hjelp av getClobVal og existNode. existsNode Function. The syntaks for existNode-funksjonen er beskrevet i figur 4-2 og også som følger. Figur 4-2 eksistererNode Syntax. Textbeskrivelse av illustrasjon. existsNode-funksjonen på XMLType sjekker om den gitte XPath-evalueringen resulterer i minst et enkelt XML-element eller - tekst node Hvis det er tilfelle, returnerer det den numeriske verdien 1, ellers returnerer den en 0 Navneplass kan brukes til å identifisere kartleggingen av prefix es angitt i XPathstring til det tilsvarende navneområdet s. Eksempel 4-20 Bruke existsNode på XMLType. For eksempel, vurdere et XML-dokument som et XPath-uttrykk som PO PNAME-resultater i en enkelt node. Derfor vil existNode returnere 1 for den XPath Dette er det samme med PO PNAME-tekst som resulterer i en enkelt tekst node. Et XPath-uttrykk som PO POTYPE returnerer ikke noen noder Derfor vil en existNode på dette returnere verdien 0.Til å oppsummere kan existNode-medlemsfunksjonen brukes i spørringer og for å opprette funksjonsbaserte indekser for å øke evalueringen av spørringer. Eksempel 4-21 Bruk existingNode til Finn et knutepunkt. Følgende eksempel tester for eksistensen av lagerplassen knutepunktet i warehousespec-kolonnen XML-banen til utvalgstabellen. Bruk av indekser til å evaluere existNode. You kan opprette funksjonbaserte indekser ved hjelp av existNode for å øke hastigheten utførelsen Du kan også opprette en CTXXPATH-indeks for å øke hastigheten på vilkårlig XPath search. extract Function. The ekstraktfunksjonen ligner e xistsNode-funksjonen Det bruker en VARCHAR2 XPath-streng med en valgfri namespace-parameter og returnerer en XMLType-forekomst som inneholder en XML fragment Syntaxen er beskrevet i Figur 4-3 og som følger. Figur 4-3 ekstrakt Syntax. Textbeskrivelse av illustrasjonen. extract på XMLType trekker ut noden eller et sett med noder fra dokumentet identifisert av XPath-uttrykket. De ekstraherte noder kan være elementer, attributter eller tekstnoder Når du trekker ut, blir alle tekstnoder samlet inn i en enkelt tekstnodeverdi. Navneplass kan brukes til å levere navneområdeinformasjon for prefikser i XPath-strengen. XML-typen som følge av å bruke en XPath gjennom ekstrakt, trenger ikke å være et godt dannet XML-dokument, men kan inneholde et sett med noder eller enkle skalardata i noen tilfeller. Du kan bruke getStringVal - eller getNumberVal-metodene på XMLType for å trekke ut er skalar data. Eksempelvis identifiserer XPath-uttrykket PO PNAME PNAME-elementet i XML-dokumentet som er vist tidligere. Eksemplet PO PNAME-tekst derimot refererer til tekstnoden til PNAME-elementet. Den sistnevnte anses fortsatt som en XMLType In andre ord, utdrag poDoc, PO PNAME-tekst returnerer fortsatt en XMLtype-forekomst, selv om forekomsten faktisk kan inneholde bare tekst Du kan bruke getStringVal til å få tekstverdien ut som et VARCHAR2-resultat. Bruk tekstnode-testfunksjon for å identifisere tekstnoder i elementer før du bruker GetStringVal eller getNumberVal for å konvertere dem til SQL-data. Ikke å ha tekstnoden ville produsere et XML-fragment. Eksempelvis XPath-uttrykk. PO PNAME identifiserer fragmentet PNAME PO1 PNAME. PO PNAME-tekst identifiserer tekstverdien PO1.You kan bruke indeksmekanismen til å identifisere enkelte elementer ved gjentatte elementer i et XML-dokument. For eksempel hvis du har et XML-dokument som. PONO 1 for å identifisere det første PONO-elementet med verdi 100. PONO 2 for å identifisere det andre PONO-elementet med verdi 200. Resultatet av ekstrakt er alltid en XMLType Hvis du bruker XPath, produserer et tomt sett, trekker du ut en NULL-verdi. Ekstrafunksjonsfunksjonen kan brukes på flere måter, inkludert følgende. Ekstraksjonelle numeriske verdier som funksjonsbaserte indekser kan opprettes for å øke hastigheten på prosessering. Ekstraheringssamlingsuttrykk som skal brukes i FROM-klausulen i SQL-setninger. Ekstraheringsfragmenter til bli samlet sammen for å produsere forskjellige dokumenter. Eksempel 4-22 Bruke ekstrakt for å trekke ut verdien av en knutepunkt. Dette eksemplet trekker ut verdien av knutepunktet, lagerdokkene i kolonnen, lager i tabell. extractValue-funksjonen. ExtractValue-funksjonen tar som argument en XMLType eksempel og et XPath-uttrykk Det returnerer en skalarverdi som tilsvarer resultatet av XPath-evalueringen i XMLType-eksemplet. ExtractValue-syntaks er også beskrevet i Figur 4-4.XML s chema-baserte dokumenter For dokumenter basert på XML-skjema, hvis Oracle9 jeg kan avlede typen av returverdi, returneres en skalarverdi av den aktuelle typen. Ellers er resultatet av typen VARCHAR2.Non-schema-baserte dokumenter For dokumenter ikke basert på XML-skjemaer, er returtypen alltid VARCHAR2.extractValue forsøker å utlede riktig returtype fra XML-skjemaet til dokumentet. Hvis XMLType er ikke-skjemabasert, eller den riktige returtypen ikke kan bestemmes, returnerer Oracle XML DB en VARCHAR2.Figure 4-4 extractValue Syntax. Text beskrivelse av illustrasjonen. A Shortcut Function. extractValue tillater deg å trekke ut ønsket verdi lettere enn ved bruk av ekvivalent ekstraktfunksjonen Det er en brukervennlig og snarvei-funksjon Så i stedet av å bruke. Du kan erstatte eller med extractValue som følger. Med ekstraktValue kan du legge av teksten, men KUN hvis noden peker på av sti-delen har bare ett barn og at barnet er en tekstknute. Ellers blir en feil kastet. extractValue syntaks er det samme som extract. extractValue Characteristics. extractValue har følgende egenskaper. Det returnerer alltid bare skalarinnhold, for eksempel NUMBER VARCHAR2 og så videre. Det kan ikke returnere XML noder eller blandet innhold. Det oppstår en feil ved kompilering eller kjøring tid hvis det blir XML-noder som resultat. Det returnerer alltid VARCHAR2 som standard Hvis nodens s-verdi er større enn 4K, vil det oppstå en runtime-feil. I nærvær av XML-skjemainformasjon, kan samleValue automatisk kompensere på riktig tidspunkt datatype basert på XML-skjemainformasjonen, hvis den kan oppdage det på kompileringstidspunktet for spørringen For eksempel, hvis XML-skjemainformasjonen for banen PO POID indikerer at dette er en numerisk verdi, returnerer extractValue et NUMBER. If XPath identifiserer en node, blir det automatisk det skalære innholdet fra tekstbarnet. Node må ha nøyaktig ett tekstbarn. For eksempel utvider tekstbarnet til PNAME Dette tilsvarer Eksempel 4-23 Ekstrahering Skalarverdien til et XML-fragment Bruk av extractValue. Følgende eksempel tar som input de samme argumentene som eksemplet for ekstraktfunksjonen I stedet for å returnere et XML-fragment, som ekstrakt gjør det, returnerer den skalarverdien av XML-fragmentet. ExtractValue blir automatisk hentet ut tekstbarnet til Docks-elementet og returnerte den verdien Du kan også skrive dette ved hjelp av ekstrakt som følger. Flere SQL-eksempler som spørre XML. Følgende SQL-eksempler illustrerer måter du kan spørre XML. Eksempel 4-24 Spørre XMLType Bruke ekstrakt og existNode. Assume poxmltab-tabellen, som inneholder innkjøpsordreidentifikasjon og innkjøpsordre-XML-kolonnene, og antar at følgende verdier er satt inn i tabellen. Nå kan du trekke ut tallverdiene for innkjøpsordrenumrene ved hjelp av ekstrakt. Her trekker ut innholdet av tag, innkjøpsordrenummer, PONO existsNode finner nodene der PONO eksisterer som et barn av PO. Here tekstfunksjon brukes bare til å returnere tekstnoderne g etNumberVal-funksjonen kan konvertere kun tekstverdier til numerisk kvantitet. Manejando XMLType og Oracle Database 11gR2 er en del av XDB. Por Francisco Riccio Publicado en abril 2013.XML er et lengre dokument for å dokumentere dokumentene med den siste informasjonen om interambiar informasjon plataformas. Oracle Database desde la versi n 9iR2 nos proporciona un tipo de dato nativo llamado XMLTYPE el cual nos permite albergar informaci n en formato XML con soporte a XSD esquema de validaci n , XSLT transformaciones de documentos , XPATH, XQUERY, indexamiento y particionamiento a documentos XML En las versiones Oracle Database 9i y 10g los documentos XML se almacenan como CLOB internamente pero a partir de la versi n Oracle Database 11g se ha creado una nueva forma de almacenar los documentos XML, dicho almacenamiento es en formato binario Binary XML Este nuevo modo de almacenar es ms eficiente en el consumo de espacio y en el tiempo de respuesta en el acceso a los datos Bi nary XML es el modo de almacenar por default a partir de la versi n 11 2 0 2.Debemos tener presente que albergar informaci n en formato XML en nuestra base de datos da la posibilidad de romper modelos altamente relacionales en modelos relacionales jer rquicos disminuyendo una serie de tablas normalizadas en nuestro dise o. En el ejemplo a implementar se crear una tabla llamada RESERVA que almacenar los pedidos de un cliente, dichos pedidos ser n almacenados en un campo XML con almacenamiento binario sobre una base de datos versi n 11 2 0 3.a Validaci n del componente XDB. El trabajo en XML con Oracle Database se hace a trav s del componente XDB Este componente permite albergar informaci n de tipo XMLType tipo de dato nativo para XML. Asimismo el componente XDB mantiene un repositorio llamado XML DB Repository que permite organizar y manejar los documentos XML en forma de archivos y carpetas, los cuales son llamados recursos Debemos pensar en este repositorio como si fuera un filesystem qu e se encuentra internamente en nuestra base de datos. Se adjunta un gr fico mostrando los 2 sub-componentes explicados que conforman el componente XDB de la base de datos. Para validar el status de este componente consultamos el siguiente query. SQL select compname, status from dbaregistry where compname Oracle XML Database El status debe devolver el valor de VALID Ejemplo. b Creando el Esquema de Validaci n. Para dicha implementaci n, primero crearemos un esquema de validaci n de documentos XML XSD con la finalidad de que todo documento XML ingresado cumpla cierta estructura y condiciones. Acorde a nuestro ejemplo, necesitar amos crear un esquema de validaci n que solo permita el ingreso de pedidos que se compongan de 5 elementos fecha, precio unitario pu , cantidad, descripci n y tipo de pedido Donde el elemento Pedido tiene un atributo de tipo entero Cada elemento tiene su propio tipo de dato y algunas reglas de negocio por ejemplo el atributo tipo solo puede albergar los valores A, B y C asimismo el elemento cantidad solo puede albergar valores enteros comprendidos de 0 a 50.Cualquier documento XML debe cumplir con dicha especificaci n y ser validado al momento de ser insertado en la tabla RESERVA que crearemos m s adelante. Se presenta el documento XSD que registraremos en la base de datos. Para registrar el documento XSD en la base de datos lo hacemos a trav s del procedure. Se detallan algunos de los par metros. a Local, si el valor es true el documento XSD se guardar dentro del componente XDB en la carpeta sys schemas owner En caso contrario se guardar en la carpeta sys schemas PUBLIC. b Gentypes, al crear el archivo XSD se crear un tipo de Object Table que se basar en las reglas del esquema cuando se le asigne el valor de true En nuestro caso posteriormente crearemos la tabla de forma manual, por dicha raz n se ha colocado el valor de false. c Genbeans, si su valor es true se crear Java Beans al crear el archivo XSD. d Gentables, al crear el archivo XSD se crear una ta bla que se basar en las reglas del esquema si se le asigna el valor de true. e Force, si se coloca el valor de true no dar error en caso exista problemas en registrar el archivo XSD. Es importante colocar la opci n si es que pensamos almacenar los documentos en Binary XML Si no agregamos est opci n y queremos crear una tabla que use almacenamiento en Binary XML tendremos el siguiente error. Asimismo podemos ver como el archivo XSD ha sido creado dentro del XML DB Repository despu s de ser registrado. Debemos configurar los puertos de XDB para acceso FTP o si deseamos visualizar o manipular los archivos dentro de XML DB Repository por dichos protocolos. Esto lo realizamos mediante el paquete dbmsxdb, ejemplo. Se adjunta un ejemplo de c mo deben ser los documentos XML que se ingresar n en la tabla RESERVA cumpliendo con el esquema de validaci n. Nota Debemos recordar que otra manera de poder validar documentos XML es mediante DTD, pero a diferencia de los esquemas de validaci n, los DTD no sigu en una sintaxis XML nacieron basado en el ISO 8879 para el lenguaje SGML y no para XML y adem s no permite especificar los tipos de datos de los elementos, por dicha raz n la recomendaci n es usar esquemas de validaci n. c Creando la tabla Reserva. Hemos creado una tabla llamada RESERVA que se compone de un campo llamado pedido de tipo XMLTYPE el cual le estamos especificando que ser almacenado como Binary XML Recordemos que a partir de la versi n 11 2 0 2 hacia delante, ste ser el default Tambi n indicamos que el campo pedido ser validado por el esquema que previamente lo hemos creado. Nota El tipo de dato XMLTYPE almacenado como Binary XML se guarda internamente como un SecureFile LOB autom ticamente en versi n Oracle Database 11 2 0 2 En caso no pueda crearse de esa manera lo har como Basic LOB Recordemos que no ser posible la creaci n de objetos SecureFile LOB cuando el tablespace no est configurado como ASSM el par metro DBSECUREFILE est en FALSE. Ingresaremos un documento XML que no cumpla la especificaci n del esquema XSD definido para ese campo. En este ejemplo vemos que la operaci n de INSERT falla porque el documento XML no cumple con la especificaci n definida en el archivo XSD En este caso falt el atributo cod de cada elemento Pedido, donde el atributo lo hemos configurado como requerido. Lo corregimos y veremos que ahora si se registra. Nota Es posible insertar un documento a partir de un archivo XML existente en el Sistema Operativo o en el XML DB Repository, ejemplo. d Creaci n de ndices. Para indexar columnas cuyo almacenamiento es Binary XMLType lo podemos hacer mediante ndices basado en funciones ndices de tipo XML Index. En My Oracle Support MOS Nota 742192 1 Indexing Binary XML Columns , se espec fica que no est asegurado el uso de ndices basado en funciones en campos almacenados como Binary XML, por lo cual la recomendaci n es crearlo como XML Index. XML Index es un nuevo tipo de ndice a partir de la versi n Oracle Database 11g. Ejemplo de su creaci n. El pr oblema con este tipo de creaci n por default es que crear ndices por cada elemento que tenga el documento XML de modo que podr a perjudicarnos en espacio. Para nuestro ejemplo solo indexar el elemento pu precio unitario. Podemos apreciar que para crear el ndice de manera m s espec fica debemos apoyarnos del uso de XPATH para seleccionar el elemento que queremos indexar. Si ejecutamos una consulta mediante XPATH podemos apreciar que el ndice es utilizado. e Actualizaciones sobre el campo Binary XML. Existen algunas funciones que nos ayudan a dar mantenimiento a los elementos de un documento XML ya registrado Haremos la demostraci n de tres de ellos. e 1 Agregaremos un nuevo elemento pedido sobre el documento XML. e 2 Deseamos modificar el pu precio unitario del nuevo elemento pedido ingresado del valor de 30 a 20.e 3 Deseamos eliminar el ltimo elemento ingresado. f 1 Si deseamos obtener el documento XML como String. f 2 Si deseamos obtener el documento XML como CLOB. f 3 Crear un String o CLOB a partir de un contenido. XPath es un lenguaje que nos permite construir expresiones con la finalidad de recorrer un documento XML y entregarnos los nodos del documento que contienen la informaci n que deseamos. Ejemplo 1, deseamos obtener todos los pu precios unitarios de la reserva con id 1.Ejemplo 2, deseamos obtener aquellos pedidos que han superado un precio unitario de 48 de tipo A. En nuestro caso no existe filas devueltas porque no tenemos ning n pedido que tenga un precio unitario superior a 48 de tipo A. Ejemplo 3, deseamos obtener aquellos pedidos cuyo atributo cod sea diferente del valor de 3.XQuery es un lenguaje de consulta dise ado para trabajar con colecciones de datos XML, el cual proporciona los medios para extraer y manipular informaci n de documentos XML de cualquier fuente de datos que pueda ser representada mediante XML. Ejemplo 1, se desea obtener aquellos pu precios unitarios , si uno de ellos sobrepasa el valor de 40 debe aumentarse un costo de 18.a La funci n XMLQUER Y recibe de par metro una consulta XQuery y el documento XML el cual lo pasamos a trav s del comando PASSING y asimismo solicitamos el retorno del resultado del script XQuery. b El comando FOR nos permite recorrer todos los nodos a partir de una ruta, en este caso estamos recorriendo todos los elementos Pedido de la ra z pedidos. c El comando LET nos permite crear variables y asignarles un valor espec fico, en este caso se ha creado la variable pu. Ejemplo 2, a partir de una tabla o vista generar una salida XML. Tambi n le podemos colocar comandos de for, let, etc como se vio en el ejemplo 1.La opci n ora view crea una vista en tiempo de runtime, esta opci n est disponible desde la versi n Oracle Database 11g. g Vistas del Diccionario de Datos. Oracle Database nos ofrece algunas vistas tiles referente a nuestros objetos XML. Listar todos los schemas de la base de datos. Listar todos los Object Tables XML. En nuestro caso nos devuelve filas ya que hemos creado tablas que contienen columnas XML n o Object Tables XML. Listar todas las columnas que son de tipo XMLTYPE o XML INDEX. XML DOM es una interfaz de programaci n API que proporciona un conjunto de objetos para representar documentos XML y asimismo acceder y modificar el contenido, estructura y estilo de un documento XML La implementaci n de DOM sobre Oracle Database est dado sobre el paquete XMLDOM. Sobre nuestro escenario se recorrer cada atributo y elemento de cada documento XML. Concluimos que Oracle Database nos provee un soporte completo y herramientas para poder trabajar con documentos XML y sus tecnolog as relacionadas como XPATH, XQuery, Esquemas de validaci n, etc Podemos asimismo aprovechar XML en ventaja de generar modelos relacionales jer rquicos en pro de eliminar un nivel detallado de normalizaciones en nuestro dise o y as eliminar una serie de joins en nuestras consultas SQL generando un mejor tiempo de respuesta en nuestros programas. Publicado por Ing Francisco Riccio Es un IT Specialist en IBM Per e instructor de cursos oficiales de certificaci n Oracle Est reconocido por Oracle como un Oracle ACE y certificado en productos de Oracle Application Base de Datos. Binary XML Data Storage in 11g. Oracle 11g New Features Tips. In previous versions of Oracle, two Extensible Markup Language XML storage options were available unstructured, or CLOB, and storage and structured, or schema-based In Oracle 11g, binary XML has been added as a new storage option. Unstructured storage treats an XML document as a large object and stores the file in the database without being aware of the content This option has the best insertion and deletion performance, but the worst relational access and consumption of disk space. Structured storage requires prior registration of the XML schema and inserts an XML document into an object-relational structure This storage option has the best query performance and disk space consumption, but the highest cost during initial insertion This high cost is caused because during inserti on, the document is shredded and stored into database objects created during the registration of the XML schema. Binary XML, the new storage option introduced in 11g, stores the document in a post-parse binary format designed specifically for XML This option will likely be the best choice for most XML requirements The additional binary storage offers insertion performance comparable to unstructured storage, yet query and disk space performance that is comparable to structured storage Unlike structured storage, the benefits of binary XML are not dependent on schema registration This is due to the option of registering a binary XML schema to have schema based binary XML tables However, one limitation remains in that a registered XML schema cannot be shared between a binary XML and object relational table. The best strategy when choosing how to manage XML content is to first try the binary storage option and evaluate whether the performance is acceptable If the relational access performance is not acceptable, then try the structured storage option The reason that binary storage is preferred is that it is easy to use and requires the least amount of maintenance because schema registration is not required Binary XML type columns are also easier to use in non-XMLType tables since performance is not dependent on the creation of indexes. To use binary storage, the XML table must be created with the following syntax. SQL CREATE TABLE BINARYXMLTABLE OF XMLType XMLTYPE STORE AS BINARY XML 2.Consider the following XML document for order transactions. xml version 1 0 order customer name Customer ABC name ccNum 1234123412341234 ccNum customer orderLines item itemid 108 itemid itemname ORACLE 11G NEW FEATURES BOOK ED1 0 itemname quantity 1 quantity unitPrice 38 00 unitPrice item item itemid 109 itemid itemname ORACLE TUNING GUIDE ED1 0 itemname quantity 1 quantity unitPrice 22 00 unitPrice item orderLines receipt subtotal 60 00 subtotal salesTax 4 80 salesTax total 64 80 total receipt order. Insert this document into the binary XML table using the following syntax. SQL insert into BINARYXMLTABLE values XMLTYPE BFILENAME. After insertion, the document is immediately available for relational access. SELECT extractValue value b , order customer name customername, extractValue value d , item itemid itemid, extractValue value d , item quantity quantity, extractValue value d , item unitPrice unitprice, extractValue value b , order receipt subtotal subtotal, extractValue value b , order receipt salesTax salesTax, extractValue value b , order rec eipt total total from BINARYXMLTABLE a, TABLE XMLSequence Extract objectvalue, order b, TABLE XMLSequence Extract value b , order orderLines c, TABLE XMLSequence Extract value c , orderLines item d. CUSTOMERNAME ITEMID QUANTITY UNITPRICE SUBTOTAL SALESTAX TOTAL -------------- ------- -------- ---------- -------- -------- ------ Customer ABC 108 1 38 00 60 00 4 80 64 80 Customer ABC 109 1 22 00 60 00 4 80 64 80.As demonstrated above, the syntax for relational access to a binary XML table does not change from other storage options. This is an excerpt from the new book Oracle 11g New Features Expert Guide to the Important New Features by John Garmany, Steve Karam, Lutz Hartmann, V J Jain, Brian Carr You can buy it direct from the publisher for 30 off. Burleson is the American Team. Note This Oracle documentation was created as a support and Oracle training reference for use by our DBA performance tuning consulting professionals Feel free to ask questions on our Oracle forum. Verify experience Anyone considering using the services of an Oracle support expert should independently investigate their credentials and experience, and not rely on advertisements and self-proclaimed expertise All legitimate Oracle experts publish their Oracle qualifications. Errata Oracle technology is changing and we strive to update our BC Oracle support information If you find an error or have a suggestion for improving our content, we would appreciate your feedback Just e-mail and include the URL for the page. The Oracle of Database Support. Copyright 1996 - 2016.All rights reserved by Burleson. Oracle is the registered trademark of Oracle Corporation.

Comments