Звязування даних
Завантажити презентаціюПрезентація по слайдам:
Поняття про зв’язування даних Під зв’язуванням даних (в даному контексті) ми будемо розуміти встановлення відповідності між вузлами XML-документа і класами та об’єктами мов програмування , з одного боку, та між вузлами XML-документа і структурами реляційних баз даних – з іншого. Нас цікавлять принципи встановлення такої відповідності. З цієї точки зору побудова дерева DOM – це дуже формальний аналіз, орієнтований лише на структуру документа, і який повністю абстрагований від моделі предметної області.
Зв’язування XML-ООП: ключова ідеологія За схемою, DTD або іншим описом семантики документів (можливо, на основі онтології) можна згенерувати класи (або інтерфейси), які відповідають поняттям предметної області, а також класи-обробники документів. На основі конкретного документа можна отримати наповнення цих класів, тобто сформувати екземпляри цих класів.
Зв’язування даних і Java Sun розробила специфікацію JDO (http://java.sun.com/products/jdo). Зв’язування об’єктів Java не тільки з документами XML, але й з іншими типами даних. Випущено пакет JAXB (Java API for XML Binding): http://java.sun.com/xml/jaxb. Одна з важливих частин - компілятор xjc (XML-Java Compiler), який генерує за XSD-схемою т.зв. об’єкти Java. Далі на основі XML-документа за допомогою відповідних методів створюються екземпляри цих класів. Створення екземплярів називається розпаковкою (unmarshalling), а зворотний процес - упаковкою (marshalling).
Приклад: каталог pract/bind Схема (catschem.xsd), яка описує структуру книжкового каталогу. Документ (екземпляр схеми) – catalog.xml. Програма bind.java, яка аналізує документ і видає інформацію про конкретний вузол.
Наявні відношення katalog = list of book; властивості book – author і title; scientificbook розширює book; додаткова властивість scientificbook – reviewer.
Згенерований клас Katalog – основна частина @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "book”}) @XmlRootElement(name = "katalog") public class Katalog { @XmlElement(required = true) protected List book; public List getBook() { if (book == null) { book = new ArrayList(); } return this.book; }}
Згенерований клас Book – основна частина @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "book", propOrder = { "author“, "title”}) @XmlSeeAlso({ ScientificBook.class}) public class Book { @XmlElement(required = true) protected String author; @XmlElement(required = true) protected String title; public String getAuthor() { return author; } public void setAuthor(String value) { this.author = value;} public String getTitle() {return title;} public void setTitle(String value) { this.title = value;} }
Згенерований клас ScientificBook – основна частина @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "scientific-book", propOrder = { "reviewer”}) public class ScientificBook extends Book { @XmlElement(required = true) protected String reviewer; public String getReviewer() {return reviewer;} public void setReviewer(String value) {this.reviewer = value;} }
Програмний аналіз import java.io.*; import java.util.*; import javax.xml.bind.*; import generated.*; public class bind { public static void main (String[] args) { try { JAXBContext jc = JAXBContext.newInstance("generated"); Unmarshaller u = jc.createUnmarshaller(); Katalog ktl = (Katalog) u.unmarshal(new FileInputStream("catalog.xml")); List bk = ktl.getBook();
Програмний аналіз: продовження ScientificBook book = (ScientificBook) bk.get(2); String avtor = book.getAuthor(); System.out.println ("Author - "+avtor); String title = book.getTitle(); System.out.println ("Title - "+title); String rev = book.getReviewer(); System.out.println("Reviewer - "+rev); } catch (Exception e) { e.printStackTrace(); } } }
Деякі проблеми Неповна відповідність між можливостями схем і стандартними можливостями ООП.
Тоді зміниться і згенерований код: public class Katalog { @XmlElement(required = true) protected Book book;
Зв’язування даних: деякі прості можливості C# Утиліта xsd. Серіалізація-десеріалізація в XML-файл. …
Приклад серіалізації: клас [Serializable] public class Book { [XmlAttribute] public String Author {get;set;} [XmlAttribute] public String Title { get; set; } [XmlAttribute] public String Year { get; set; } }
Приклад серіалізації: власне серіалізація колекції static void Main(string[] args) {String fname = @"c:\samples\serial\out.xml"; List lb = new List(); lb.Add(new Book { Author = "Ivanov", Title = "How to use XML", Year = "2009" }); lb.Add(new Book { Author = "Petrov", Title = "Byak and Kvak", Year = "1812" }); var fstream = new FileStream XmlSerializer xmlFormat = new XmlSerializer(typeof(List), new Type[] {typeof(Book)});(fname, FileMode.Create, FileAccess.Write, FileShare.None); xmlFormat.Serialize(fstream, lb); fstream.Close(); }
XML та РБД Важливо – дослідження можливих відповідностей між структурами XML-документа та структурами реляційних баз даних. Інструмент – DataSet. При завантаженні XML-файлу він намагається утворити відповідну структуру таблиць. Крім того, файл може бути збережений в різних варіантах (поля можуть бути збережені як елементи, як атрибути тощо).
Демонстрація Базовий приклад – реляційно-подібний фрагмент даних. Варіант – створюється одна таблиця. Елементи зі змінною структурою. Неструктурований текст. Ієрархічні дані.
Вибірка з РБД в XML (SQL Server) Звичайний SQL-запит Результат - XML select top 10 * from Customers select top 10 * from Customers for xml raw (один з варіантів – for xml raw, elements)
Поняття про LINQ LINQ (Language Integrated Query) – технологія, яка, з одного боку, дозволяє уніфікувати доступ до об'єктів різних типів, а з іншого – інтегрувати засоби для написання таких запитів безпосередньо до мов програмування.
Складові частини LINQ LINQ To Objects; LINQ To XML; ADO .NET з підтримкою LINQ: LINQ To DataSets; LINQ To SQL; LINQ To Entities.
Простий приклад Клас Book з полями Author і Title. Колекція, що складається з деякої кількості екземплярів цього класу. Ми хочемо вивести назви книжок. Доступ до елементів колекції через LINQ. Доступ до XML-файлу через LINQ.
Клас Book class Book { public string Author { get; set; } public string Title { get; set; } public override string ToString() { return Author + ". " + Title; } }
Створення колекції List bl = new List { new Book {Author = "Ivanov", Title = "Addicted to murders"}, new Book {Author = "Petrov", Title = "Innocent victims"}, new Book {Author = "Ivanov", Title = "Killing for surviving"}, };
Запит до XML-файлу String fname = "c:\\samples\\xml\\books.xml"; XDocument doc = XDocument.Load(fname); var results = from c in doc.Descendants("book") where c.Element("author").Value=="Ivanov" select c.Element("title").Value;
Виведення результатів В обох випадках код ідентичний: foreach (var cc in results) { Console.WriteLine(cc); }
XML та модель напівструктурованих даних Ульман: XML реалізує модель напівструктурованих даних. Модель напівструктурованих даних задається у вигляді графа, вершини якого відповідають екземплярам класів та значенням їх атрибутів, а помічені дуги – назвам властивостей та зв’язків. Дуга по суті пов’язана з іменем елемента (можливо – іменем його класу) або атрибута. Самі вузли графа в принципі можуть бути і неіменованими. Іменем елемента в XML-документі, зокрема, може виступати ім’я класу. Посилання перетворюють деревовидну ієрархію елементів на граф; для задання посилань використовуються атрибути типів ID та IDREF.
Проблема надлишковості XML-даних “Класичне” XML-подання є дуже надлишковим. Найпростіший приклад – реляційно-подібний фрагмент даних; деяка кількість екземплярів певного класу, причому всі вони мають просту однотипну структуру.
Змістовно – матриця даних та вектор ознак Матриця даних: M={Mij}, де Mij – значення j-ї ознаки для i-го об’єкта. Метадані (вектор ознак):vj – назва j-ї ознаки; K – назва класу; ця інформація може бути безпосередньо отримана з онтології.
Порівняльний аналіз Друге подання, очевидно, є значно більш економним, ніж перше. Крім того, для нього можна застосовувати інші ефективні алгоритми стиску даних. З іншого боку, перша (“класична”) форма подання, як правило, виявляється більш зручною для аналізу даних іншими програмами, а також людьми. Для неї суттєво полегшуються і інші операції, зокрема створення XML-схем та перевірка на їх основі дійсності документів.
Поняття про YAML YAML Ain't Markup Language . Деяка альтернатива XML; мета – уникнути багатослівності.
Схожі презентації
Категорії