630 likes | 834 Views
Извличане и обработка на информация – XQuery Управление на данни в XML. Извличане и обработка на информация. XML документите обобщават релационните данни по разбираем начин :
E N D
Извличане и обработка на информация – XQueryУправление на данни в XML
Извличане и обработка на информация • XML документите обобщават релационните данни по разбираем начин: • Голяма по обем и разнообразна информация се съхранява в XML формат. Необходими са възможности за търсене и промяна на XML документите. релации записи атрибути
Извличане и обработка на информация • Някои съображения за обмен на информация между XML и бази данни: • XML документи, включващи данни, извлечени от различни бази данни. • Използване на XML и XSLT за подходяща форма на извеждане на извлечени данни в отговор на заявка. • Използване на XML за обмен на структурирани данни между две приложения без посредничеството на потребител. • Обработка на голям обем разнородна информация (XML документи, графична, видео...).
Извличане и обработка на информация • Има механизми, които по подразбиращ се начин формират XML документи от съществуващи релационни бази данни. • ADO 2.5 връща множество от записи в XML представяне в т.нар. “плосък вид”. • SQL Server 2000 осигурява директно извличане на свързани структури във вид на XML документ. • Тези технологии не могат да обработят по-сложни ситуации, като отношения много към много, които могат да се представят с IDREF-ID указатели.
Извличане и обработка на информация - XQuery • XQuery осигурява преобразуването на XРath множеството от върхове в XML. • XQuery осигурява променливи за връзка между XРath и XQuery. • XQuery осигурява структури за обединения (joins), агрегати и т.н. • Една проста заявка на XQueryима вида: { XPath израз } <answer> {document(" bib.xml“)//title} </answer> Заявката води до: <answer> <title> . . . </title> . . . </answer>
Извличане и обработка на информация - XQuery • XQuery е хибриден, мощен език с подобна на SQL граматика, но с по-голямо приложение. • XQuery дава възможности за интегриране и трансформиране. • Едно XQuery приложение може да реализира търсене в няколко системи и да интегрира многобройни източници на информация. • XQuery може да трансформира съдържанието и структурата на XML документи. • XQuery изрази могат да се използват като конструктори на елементи и атрибути за да се изрази структурата на резултантния документ.
Извличане и обработка на информация - XQuery • XML търсене: • Документи, които се четат лесноза извличане на информация от индивидуални документи, за осигуряване на динамично индексиране, за извършване на контекстно търсене и за генериране на нови документи • Данново-ориентирани документиза запитвания в XML представени бази данни, за трансформиране на данните в нови XML представяния и за интегриране на данни от различни хетерогенни източници на данни • Документи със смесен моделза запитвания в документи с вградени данни, такива като каталози или бизнес-анализиращи документи
Извличане и обработка на информация - XQuery • Изисквания към езиците за търсене: • XMLсинтаксис • Да бъдат декларативни • XML модел на данни • Да интерпретира механизма на областите от данни • Трябва да координира с XML Schema • Да работи дори ако схемите не са налични • Да подържа simple и complex типове данни • Да подържа операции с йерархични и списъчни документни структури • Трябва да комбинира информация от различни документи • Трябва да подържа възможности за агрегация • Трябва да е в състояние да преобразува и създава XML структури • Трябва да е в състояние да отчита ID указания
Извличане и обработка на информация - XQuery • Понятия: • Запитването (query)в XQuery е израз, който: • Чете последователност от XML фрагменти или отделни стойности • Връща последователност от XML фрагменти или отделни стойности • Основните форми на XQuery изразите са: • Изрази за пътища • Елементни конструктори • FLWOR ("flower") изрази • Списъчни изрази • Условни изрази • Количествени изрази • datatype изрази
Извличане и обработка на информация - XQuery • Понятия: • Изразите се изчисляват спрямо контекста: • Области данни • Променливи • Функции • Дата и време • Контекстен член (текущ връхили отделна стойност) • Контекстна позиция (в обработваната последователност) • Контекстен размер (в обработваната последователност)
Извличане и обработка на информация - XQuery Изрази за пътища • Най-прост вид запитване -XPath 2.0израз като: • Резултат са всички простикомпоненти, използвани за приготвяне на Ricotta Pie в колекцията “recipe”. • Резултатът се получава като списък от XML фрагменти, всеки свързан с елемент-компонент. • Редът на фрагментите е в зависимост от документа (за разлика от SQL) • Началният контекст на израза за пътя се задава от document("recipes.xml") (подобно е заXPointer). • Някои специфични за XQuery разширения на XPath: • Локализиращите стъпки могат да следват нови IDREF axis • произволен XQuery израз може да се използва като локализираща стъпка document("recipes.xml")//recipe[title="Ricotta Pie"]//ingredient[@amount]
Извличане и обработка на информация - XQuery Елементни конструктори • Един XQuery израз може даконструиранов XML елемент: • Изразът може да използва стойности, прикрепени къмпроменливи ($id, $name, $job трябва да са прикрепени към XMLфрагменти или стрингове). <employee empid="12345"> <name>John Doe</name> <job>XML specialist</job> <deptno>187</deptno> <salary>125000</salary> </employee> <employee empid="{$id}"> <name>{$name}</name> {$job} <deptno>{$deptno}</deptno> <salary>{$SGMLspecialist+100000}</salary> </employee>
Извличане и обработка на информация - XQuery FLWOR ("flower") изрази • Основният двигател на XQuery е FLWOR израз. • For-Let-Where-Order-Return • Обобщава SELECT-FROM-HAVING-WHEREот SQL • Примерза избор и филтриране в XQuery • Осъществява достъп до всеки връх от множеството, получено с Xpath израза. for $x in document(“payroll.xml”)//employee where$x/age = “25” return$x/name XPath изрази Множество от върхове Резултат xml
Извличане и обработка на информация - XQuery FLWOR ("flower") изрази • Примерза обединение в XQuery • Осъществява обединението на два xml файла и извлича съответна информация от тях на базата на определени условия. <results> for $x in document(“payroll.xml”)//employee $p in document(“projects.xml”)//project where value-equals ($x/name,$p/manager) return <result> { $x/age } { $p/budget } </result> </results>
Извличане и обработка на информация - XQuery FLWOR ("flower") изрази • Примерза групиране в XQuery • Осъществявагрупиране на определени елементи по зададени условия от единствен документ <answer> for $a in distinct-values(document (“payroll.xml”)//employee/age ) return <age-group> {$a} { for $e in document (“payroll.xml”)//employee where value-equals ($a, $e/age) return $a/name } </age-group> </answer>
Извличане и обработка на информация - XQuery FLWOR ("flower") изрази • Пример с всички компоненти на FLWORизраза for $d in document("depts.xml")//deptno let $e := document("emps.xml")//employee[deptno = $d] where count($e) >= 10 order by avg($e/salary) descending return <big-dept> { $d, <headcount>{count($e)}</headcount>, <avgsal>{avg($e/salary)}</avgsal> } </big-dept>
Извличане и обработка на информация - XQuery FLWOR ("flower") изрази • Пример с всички компоненти на FLWORизраза • Обяснения към примера: • forгенерира подреден списък от прикрепени стойности deptnoкъм$d • letасоциира към всяка прикрепена стойност на следващо прикрепване на списък от елементи empс този номер на департамент към $e • До тук имаме подреден списък от записи от прикрепени елементи ($d,$e) • where филтрира този списък за да се запазят само исканите записи • orderсортира този списък по даден критерии • returnконструира за всеки запис резултантна стойност • Комбинираният резултат е списък от департаменти с поне по 10 служителя, сортиран по средните стойности на заплатите.
Извличане и обработка на информация - XQuery FLWOR ("flower") изрази • Пример с всички компоненти на FLWORизраза • Обяснения към примера: • Общи правила: • forиletмогат да бъдат използвани много пъти и в произволен ред • Разрешава се използването само на единwhere • Могат да се специфицират много критерии за сортиране • Забележете разликата междуforиlet: Генерира списък от прикрепвания на$xкъм всеки елементemployeeвcompany for $x in /company/employee Генерира единствено прикрепване на $x към списък от елементи employee вcompany. let $x := /company/employee
Извличане и обработка на информация - XQuery FLWOR ("flower") изрази • Пример за изчисляване на връзки на документи: for $p IN document("www.irs.gov/taxpayers.xml")//person for $n IN document("neighbors.xml")//neighbor[ssn = $p/ssn] return <person> <ssn> { $p/ssn } </ssn> { $n/name } <income> { $p/income } </income> </person>
Извличане и обработка на информация - XQuery Списъчниизрази • XQuery изразите обработват списъци(lists)от стойности, за които се подържат оператори (operators) като: • Списъци от константи: (7, 9, <thirteen/>) • Обхват на цели: i to j • XPath изрази, като всички именувани наследници на текущия връх node: name • конкатенация: , • Установяващи оператори: | (илиunion - обединение), intersect,except • функции: remove, index-of, count, avg, max, min, sum, distinct-values ... • Когато списъците се разглеждат като множества: • XML върховете се сравняват за идентичност • Дублираните се отстраняват • Редът се запазва
Извличане и обработка на информация - XQuery Списъчниизрази • Пример за запитване и извеждане на информацията за всеки издател и средната цена на книгите му. for $p in distinct-values(document("bib.xml")//publisher) let $a := avg(document("bib.xml")//book[publisher = $p]/price) return <publisher> <name>{ $p/text() }</name> <avgprice>{ $a }</avgprice> </publisher>
Извличане и обработка на информация - XQuery Списъчниизрази • Пример за запитване и извеждане на информацията за списък на издателите с повече от 100 книги. <big-publishers> { for $p in distinct-values(document("bib.xml")//publisher) let $b :=document("bib.xml")//book[publisher = $p] where count ($b) > 100 return $p; } </big-publishers>
Извличане и обработка на информация - XQuery Условниизрази • XQuery подържа конструкциятаif-then-else. • Примерът илюстрира извличане от библиотечен “holding” на заглавията и издатели или автори. for $h in document("library.xml")//holding return <holding> { $h/title, if ($h/@type = "Journal") then $h/editor else $h/author } </holding>
Извличане и обработка на информация - XQuery Количествениизрази • XQuery разрешава използването на изрази, които взимат решение за всички елементи от списъка на базата на свойства на тези елементи. • some-in-satisfies • every-in-satisfies • Пример 1 намира заглавията на всички книги, които споменават, както думата “sailing”, така и“windsurfing” в един и същи параграф. for $b in document("bib.xml")//book where some $p in $b//paragraph satisfies (contains($p,"sailing") AND contains($p,"windsurfing")) return $b/title
Извличане и обработка на информация - XQuery Количествениизрази • Пример 2 намира заглавията на всички книги, които споменават думата “sailing” във всеки параграф. for $b in document("bib.xml")//book where every $p in $b//paragraph satisfies contains($p,"sailing") return $b/title
Извличане и обработка на информация - XQuery Изрази datatype • XQuery подържа всичкиdatatypesот XML Schema, както прости(primitive), така и комплексни(complex). • Константните стойности могат да бъдат записвани като: • Само символни последователности (катоstring, integer, float) • Като функции (true(), date("2001-06-07")) • Като изрични преобразования на типа (cast as xsd:positiveInteger(47)) • Произволни XML Schema документи могат да се включват в заявката за запитване. • Един оператор разрешава валидиране по време на изпълнение на всяка стойност спрямо типа или схемата. • Оператор typeswitchразрешава разклонение(branching), базирано на типа.
Извличане и обработка на информация – XQuery - примери • Дадени са някои примери за XQueryизрази, които извличат информация от колекция recipe. • Пример 1: Извличат се заглавията на всички рецепти от колекцията.Показана е и извлечената информация. for $t in document("recipes.xml")//title return $t <title>Beef Parmesan with Garlic Angel Hair Pasta</title>, <title>Ricotta Pie</title>, <title>Linguine Pescadoro</title>, <title>Zuppa Inglese</title>, <title>Cailles en Sarcophages</title>
Извличане и обработка на информация – XQuery - примери • Пример 2: Извличат се заглавията на всички рецепти от колекцията, които съдържат компонента брашно“flour”.Показана е и извлечената информация. <floury> { for $r in document("recipes.xml")//recipe[.//ingredient[@name="flour"]] return <dish>{$r/title/text()}</dish> } </floury> <floury> <dish>Ricotta Pie</dish> <dish>Zuppa Inglese</dish> <dish>Cailles en Sarcophages</dish> </floury>
Извличане и обработка на информация – XQuery - примери • Пример 3: Извлича се информация за списъка от рецепти, в които е използвана всяка от компонентите.Показана е и извлечената информация. for $i in distinct-values(document("recipes.xml")//ingredient/@name) return <ingredient name="{$i}"> { for $r in document("recipes.xml")//recipe where $r//ingredient[@name=$i] return $r/title } </ingredient> <ingredient name="beef cube steak"> <title>Beef Parmesan with Garlic Angel Hair Pasta</title> </ingredient>, <ingredient name="onion, sliced into thin rings"> <title>Beef Parmesan with Garlic Angel Hair Pasta</title> </ingredient>, ... <ingredient name="butter"> <title>Beef Parmesan with Garlic Angel Hair Pasta</title> <title>Cailles en Sarcophages</title> </ingredient>, ...
Извличане и обработка на информация – XQuery - примери • Пример 4: Извлича се информация за рецептите, които използват някои продукти от друг XML документ, т.нар. fridge.xml. Т.е. илюстрира се връзка между два документа XML. Показана е и извлечената информация. distinct-values( for $r in document("recipes.xml")//recipe for $i in $r//ingredient/@name for $j in document("fridge.xml")//stuff[text()=$i] return $r/title ) <title>Beef Parmesan with Garlic Angel Hair Pasta</title>, <title>Ricotta Pie</title>, <title>Linguine Pescadoro</title>, <?xml version="1.0" encoding="ISO-8859-1" ?> <fridge> <stuff>eggs</stuff> <stuff>olive oil</stuff> <stuff>ketchup</stuff> <stuff>unrecognizable moldy thing</stuff> </fridge> XML файл fridge.xml
XML и бази данни • DTD за релационна база данни <!DOCTYPE db [ <!ELEMENT db(project | employee)*> <!ELEMENT project (title,budget,managedBy)> <!ELEMENT employee (name,ssn,age)> <!ELEMENT title #PCDATA> . . . ]>
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Логически слоеве на n-слойно приложение • Услуги за данни – пазят се данните за приложението (обикновено БД) • Обекти за данни – за комуникация между БД и бизнес-обектите • Бизнес-обекти – обслужват бизнес-логиката на приложението и комуникациите между представителния слой и слоя данни • Представителен слой – за комуникация между потребителя и слоя на бизнес-логиката • Тези слоеве могат да са разпределени на няколко или на един компютър.
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Предимства на многослойния подход: • По-малка сложност за разработчиците (необходимо е познаване на БД и как комуникират с бизнес-слоя, но не и бизнес-логиката наприложението); • Възможност за промени (налага се модификация само на обектите за данни при промяна на БД, но не и на бизнес-обектите); • Възможност за обслужване на повече клиенти (връзките с БД се споделят между обектите за данни, а не от отделна връзка, както е при клиент-сървър); • Повторна използваемост (обектите за данни могат да се ползват в различни приложения); • По-голяма сигурност (достъпът до данните не е директен, а чрез бизнес-слоя)
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Използване на XML в n-слойно приложение • Обикновено слоят на обектите за данни връща информация на слоя за бизнес-обектите във форма зависеща от данните. Най-често това са обекти ADO. Те се използват за извличане на данни от БД. • Кой ще се използва XML? • Представителния слой, който се мени най-често. • Бизнес-обектите за комуникация с представителния слой и помежду си • Обектите за данни, които да връщат XML вместо групи от записи • При обновяване на БД бизнес-обектите могат да връщат XML на обектите за данни, които ще парсват кода и ще извличат съответните данни за вмъкване в БД.
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Използване на XML в n-слойно приложение • Или всеки път, когато един обект комуникира с друг ще използва XML като общ език. • Съществува независимост от езика за обектите. Някои бизнес-обекти могат да се напишат на Visual Basic, използвайки ADO за извличане на данни, адруги – на Java, използвайки JDBC (Java DataBase Connectivity) за извличане на данни. След което се предава XML на бизнес-обектите. • Получи се независимост от езика, но и от сървъра. Предаваме XML, т.е. текст, могат различните обекти да се поставят на различни сървъри и за предаване на информацията да се използва HTTP.
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Използване на XML в n-слойно приложение Връщане на XML от обект за данни • За създаването на обект за данни, конвертиращ резултатите си в XML ще се използва: 1) Visual Basic - за написване на обекта за данни; 2) ADO за свързване с БД; 3) Парсер MSXML за създаване на XML документ с резултатите. • ADO осигурява обект Connectionза свързване с БД. Dim cnndatabaseConnection As ADODB.Connection Set cnnDatabaseConnection = New ADODB.Connection //свързване с БД Създаване на обект Connection
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Използване на XML в n-слойно приложение Връщане на XML от обект за данни • Използване на SELECT конструкция за изпълнение на операция над БД. • Изпълнение на SQL с ADO чрез извикване на метод Execute()за обект Connection предавайки му SQL конструкция. Dim strSQL As String strSQL=“SELECT last_name FROM Customer WHERE account_number = “1234” Dim rsResults As ADODB.Recordset Set rsResults=cnnDatabaseConnection.Execute(strSQL) Връща обект Recordset с резултатите от заявката
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Използване на XML в n-слойно приложение Връщане на XML от обект за данни • Създаване на XML документ - обект и предаването на този обект на стойностите на SQL посредством DOM Dim objXML As MSXML.DOMDocument Set objXML=New MSXML.DOMDocument objXML.loadXML”<root><LastName/></root> <root> <LastName/> </root> Документът съдържа следния XML код
XML и бази данни • Изграждане на приложения, ползвайки съществуващи бази данни (БД) • Използване на XML в n-слойно приложение Връщане на XML от обект за данни • Получаване на стойността от Recordset и добавянето и към XML документа. • MSXML осигурява свойство на Document обекта, наречено xml, което връща низ, съдържащ XML документа, моделиран от DOM. Обектът за данни трябва да върне текста от това свойство. • Заключение – бяха взети резултатите, получени от БД и бях трансформирани в XML (разбирами от всяко приложение, независимо от езика). objXML.selectSingleNode(“/root/LastName”).Text = rsResults(“last_name”).Value
XML и бази данни • Интегриране на XML в база данни (БД) • Възможно е запазване на цялата информация (лица + поръчки) в една таблица на БД, като полета по които ще се търси да са в отделни колони. В отделна колона ще се пази целия XML за цялата поръчка. • Има един XML, представящ всяка поръчка, то може да се получи всичката информация за цялото приложение от едно поле. • Обновяването на поръчката ще е свързано с модифициране на само едно поле. SELECT order_xml FROM order WHERE order_number=12345
XML и бази данни • Интегриране на XML в база данни (БД) • Използване на БД • Този подход е удачен за междинна БД (изискванията към нея са по-малко). • Данните не са нормализирани, а се пазят като едно цяло. • Много лесно е връщането на данни към приложението (елиминират се съединения и сложни SQL конструкции), но затруднява писането на други приложения, които ще работят с части от данните. • Когато данните ще се местят в реална БД, то обектът за данни ще прочете XML кода от междинната БД, ще създаде с тях INSERTконструкция на SQL и ще ги добави в БД. • Приложението има предимствата от работа с XML данни (при клиента), а при сървъра БД е нормализирана.
Създаване на XML за съществуваща база данни Клиенти + фактури
Създаване на XML за съществуваща база данни • Правило 1: Избор на данни за включване. • На базата на бизнес изискванията, които XML документа ще изпълнява се решава кои таблици и колони да се включат.Например, ако ще се обработва информацията за клиенти и плащания по фактури, ще се включат таблиците: Customer; Month by Total; Monthly Customer Total. • Правило 2: Създаване на коренен елемент. • Добавяне на коренен елемент в DTD и деклариране на атрибути на елемента. • Възможно е добавяне на информация, която не е част на базата данни. Атрибут за състояние (информация за процесора) <!ELEMENT SalesData EMPTY> <!ATTLIST SalesData Status (NewVersion | UpdatedVersion | CourtesyCopy) #REQUIRED>
Създаване на XML за съществуваща база данни • Правило3: Модел на избраните таблици. • Таблиците съответстват директно на елементи и могат да са: • За съдържание, които съдържат множество записи; • За търсене, които съдържат списък от ID-двойки, използвани за класифициране на информация за ред от таблицата, съхранявайки описание за всяко намерено ID (таблицата ShipMethod). Те ще се моделират като изброими атрибути по-късно; • За връзка – изразяват отношения много към много. Те ще се моделират като таблици за съдържание.
Създаване на XML за съществуваща база данни • Правило3: Модел на избраните таблици. • Прилагайки това правило, ще се добавят елементите: <Invoice>, <Customer>, <Part>, <MonthlyTotal>, <MonthlyCustomerTotal>, <MonthlyPartTotal>, <LineItem>към DTD. За момента те са empty. • Правило 4: Моделиране на колони, които не са ключовекъм други таблици. • Ще се създадат атрибути на елементите, които да съдържат стойностите на колоните. • Всеки атрибут има тип CDATA. Ако колоната не позволява стойност NULL, то атрибутът е #REQUIRED; в противен случай е#IMPLIED.
Създаване на XML за съществуваща база данни • Правило 4: Моделиране на колони, които не са ключовекъм други таблици. <!ELEMENT Invoice EMPTY> <!ATTLIST Invoice InvoiceNumber CDATA #REQUIRED TrackingNumber CDATA #REQUIRED OrderDate CDATA #REQUIRED ShipDate CDATA #REQUIRED> Например за елемент Invoice, атрибутите са:
Създаване на XML за съществуваща база данни • Правило 5: Добавяне наIDатрибути към елементите. • Добавя се ID атрибут за всеки елемент (с изключение на коренния. Използва се името на елемента следвано от ID и деклариран като #REQUIRED. • Тези атрибути ще позволят премахването на някои от XML структурите при моделирането на връзките. <!ELEMENT Invoice EMPTY> <!ATTLIST Invoice InvoiceID ID #REQUIRED InvoiceNumber CDATA #REQUIRED TrackingNumber CDATA #REQUIRED OrderDate CDATA #REQUIRED ShipDate CDATA #REQUIRED> Добавяне на атрибут ID за елемент Invoice.
Създаване на XML за съществуваща база данни • Правило 6: Представяне на таблици за търсене. • За всеки външен ключ (връзка към друга таблица), избран за включване в XML: • Създава се атрибут за елемента, представящ таблицата с такъв ключ. • Дава се на атрибута името, което има таблицата, сочена от външния ключ и се дефинира като #REQUIRED, ако ключът не разрешава NULL или #IMPLIED в противен случай. • Направи атрибута от изброим тип. Разрешените стойности описват колоната за всички редове в таблицата за търсене.
Създаване на XML за съществуваща база данни • Правило 6: Представяне на таблици за търсене. • Трябва да се определят отношенията между избраните за включване в XML таблици. • За всяко отношение трябва да се определи: • Дали е търсещо или за съдържание • Дали е съдържание и ако е така – посоката, в която ще седвижи. • Решавайки начина за обхождане на структурата подпомага структурирането. • Ако движението между 2 елемента е двупосочно, трябва да се добави IDREFвъв всеки елемент. Това увеличава времето за създаване на документа и размера му.
Създаване на XML за съществуваща база данни • Правило 6: Представяне на таблици за търсене. • Целта е документа да подържа фактурите и месечната информация за тях. • Т.е. връзките трябва да позволяват движение от фактурите към информацията за тях. Например трябва да има връзка между фактурата и нейните редове (line items), както и към частта, свързана с всеки ред; или от фактурата към клиента, който я е поръчал.