Bazy Danych i język XML

52
Bazy Danych i język XML

description

Bazy Danych i język XML. XML nowoczesne technologie zarządzania treścią - korzenie. Lata 60-te: - PowerPoint PPT Presentation

Transcript of Bazy Danych i język XML

Page 1: Bazy Danych i język XML

Bazy Danych i język XML

Page 2: Bazy Danych i język XML

XML nowoczesne technologie zarządzania treścią - korzenie

Lata 60-te:– 1967 – William Tunnicliffe, prezes Graphic

Communications Association, podczas spotkania w Canadian Government Printing Office przedstawia ideę oddzielenia zawartości informacyjnej dokumentów od ich formatu,

– Stanley Rice proponuje użycie uniwersalnych znaczników do znakowania struktury tekstu,

– projekt GenCode definiuje sposób oznaczania tekstu ukierunkowany na jego strukturę.

Page 3: Bazy Danych i język XML

Rozwój języków uogólnionego znakowania tekstu

• 1969: GML – Generalized Markup Language(IBM; Goldfarb, Mosher, Laurie).

• 1986: SGML – Standard Generalized Markup Language, ISO 8879:1986.

• 1991: powstaje World Wide Web.• 1991: HTML zdefiniowany jako zastosowanie

SGML-a do opisywania stron www.• 1996: XML – Extensible Markup Language,

World Wide Web Consortium.

Page 4: Bazy Danych i język XML

Co to jest XML?

XML to sposób zapamiętywania danych wraz z ich strukturą w dokumencie tekstowym:– otwarty,– elastyczny,– niezależny od platformy sprzętowej.

XML to rama składniowa do tworzenia języków specyficznych dla zastosowań.

Page 5: Bazy Danych i język XML

Co to jest XML?

XML (rozszerzony język znaczników) to język w którym dane zapisuje się w formie tekstu. Właściwości danych opisuje specjalne oznakowanie. Stosowane oznakowania to nic innego jak umieszczenie w tekście informacji o interpretacji lub sposobie prezentacji przedstawionego tekstu. Oznakowanie ma przede wszystkim postać znaczników. Znaczniki ujęte są w trójkątne nawiasy <>.Dokument składa się ze znaczników oraz danych znakowych: jedne i drugie tworzą razem elementy.

Page 6: Bazy Danych i język XML

Co to jest XML?

Element rozpoczyna się znacznikiem początkowym i kończy znacznikiem końcowym. W zapisie znacznika końcowego pojawia się nawias kątowy i ukośnik, na przykład </tak>. Znaczniki obejmują oznakowany tekst, zaś element to fragment dokumentu od znacznika początkowego do końcowego wraz z tymi znacznikami. Np.elementem może być tekst:<słowo>obejmują</słowo>

Page 7: Bazy Danych i język XML

Co to jest XML?

Oznakowanie to mechanizm, który pozwala dodać do dokumentu metainformacje oraz opisać strukturę tego dokumentu. Znaczniki opisują dane znakowe zapisane w dokumencie.Elementy mogą zawierać inne elementy – te elementy wewnętrzne nazywają się podelementami lub subelementami. Dokument składa się z pojedynczego, najbardziej zewnętrznego (nadrzędnego) elementu, który zawiera inne elementy i (lub) dane znakowe. Każdy podelement może zawierać inne podelementy i dane znakowe.

Page 8: Bazy Danych i język XML

Co to jest XML?

XML dzięki rozszerzalności (rozumianej jako brak ograniczeń), jest potężnym mechanizmem, który umożliwia swobodne komentowanie i znakowanie danych. Można go stosować do przetwarzania dowolnych danych zapisywanych w dokumentach lub bazach danych.

Page 9: Bazy Danych i język XML

Struktura dokumentu XML

<?xml version ='1.0 ?> <!-- Nazwa pliku: Spis.xml --> <?xml-stylesheet type="text/css" href="Spis01.css"?> <SPIS> <KSIAZKA> <TYTUL>Przygody Hucka</TYTUL> <AUTOR>Mark Twain</AUTOR> <OPRAWA>okBadka papierowa</OPRAWA> <STRONY>298</STRONY> <CENA>72zB</CENA> </KSIAZKA> . . . <KSIAZKA> <TYTUL>The Turn of the Screw</TYTUL> <AUTOR>Henry James</AUTOR> <OPRAWA>oprawa tekturowa</OPRAWA> <STRONY>384</STRONY> <CENA>42zB</CENA> </KSIAZKA> </SPIS>

Prolog Deklaracja

XML Komentarz Instrukcja

sterująca

Element główny

Elementy zagnieżdżone w elemencie głównym

Page 10: Bazy Danych i język XML

Struktura logiczna i fizyczna dokumentu XML

XML używa znaczników początku i końca jako swego rodzaju pojemnika; oba znaczniki stanową jeden element. Elementy takie są podstawową cegiełką budowy dokumentów. Każdy dokument XML musi mieć dokładnie jeden element główny, wszystkie pozostałe elementy muszą być w nim całkowicie zawarte. Układ elementów dokumentu XML nazywamy strukturą logiczną dokumentu XML.Encja jest fizyczną jednostką informacji. Według oficjalnej nomenklatury XML encja jest obiektem przechowywania danych. Układ encji określa strukturę fizyczną dokumentu.Struktury fizyczna i logiczna muszą być ze sobą zsynchronizowane-muszą być w sobie nawzajem prawidłowo zagnieżdżone.

Page 11: Bazy Danych i język XML

Budowa elementu XML

Element zazwyczaj składa się ze znacznika początkowego, zawartości i znacznika końcowego. Nazwa typu elementu identyfikuje dany typ lub klasę elementów a nie konkretny element. Dokument może zawierać więcej niż jeden element o takiej samej nazwie typu.

<TYTUL>Piekny widok</TYTUL>

Zawartość (dane znakowe)

Znacznik początkowy

Znacznik końcowy

Typ Typ

Page 12: Bazy Danych i język XML

Rodzaje zawartości elementu

Jako zawartość elementu można umieścić następujące elementy:

zagnieżdżone elementy dane znakowe odwołanie do encji ogólnych lub odwołanie do znaków sekcje CDATA instrukcje sterujące komentarze

Page 13: Bazy Danych i język XML

Dodawanie elementom atrybutów

W znaczniku początkowym elementu można umieścić jedną lub więcej specyfikacji atrybutu. Jest to para nazwa-wartość związana z danym atrybutem.

<CENA Rodzaj=„detal”>132 zł</CENA>Stosowanie atrybutów jest jedną z metod wstawiania do elementów informacji.Zazwyczaj porcję danych elementu, które zamierza się wyświetlić umieszczane są w zawartości elementu. Natomiast atrybutów używa się do przechowywania różnych właściwości elementu, niekoniecznie przeznaczonych do wyświetlania, takich jak kategorie lub instrukcje wyświetlania. Specyfikacja XML nie narzuca żadnych ogreniczeń co do rodzaju informacji, które powinny być przechowywane w atrybutach bądź w zawartości.

Page 14: Bazy Danych i język XML

Komentarze w XML

<!-- Tutaj możesz wstawić dowolny tekst , oprocz podwojnego łacznika. Znaki < oraz & sa OK. -->

Komentarz można umieścic w dowolnym miejscu dokumentu na zewnątrz markapów.

Markup jest tekstem o oznaczonych granicach, który opisuje strukturę dokumentu. Markupami są: znaczniki początkowe elementu, znaczniki końcowe elementu, znaczniki elementu pustego, komentarze, deklaracje typu dokumentu, instrukcje sterujące, ograniczniki sekcji CDATA, odwołania do encji oraz odwołania znakowe.

Page 15: Bazy Danych i język XML

Instrukcje sterujące

Zadaniem instrukcji sterującej jest dostarczenie informacji, które procesor XML przekaże aplikacji.

Postać instrukcji:<? cel instrukcja ?>Tutaj cel jest nazwą aplikacji do której instrukcja jest skierowana.Natomiast instrukcja jest informacją przekazywaną aplikacji.

Page 16: Bazy Danych i język XML

Instrukcje sterujące

Jeżeli wykorzystywany jest Internet Explorer 5 jako procesor XML to instrukcją sterującą można nakazać Internet Explorerowi 5 skorzystanie z konkretnego arkusza stylów:<?xml-stylesheet type =„text/css href=Spis01.css?>

Instrukcję sterującą można wstawić w dowolnym miejscu dokumentu XML, na zewnątrz markapów a więc: w prologu dokumentu, za elementem głównym lub wewnątrz zawartości elementu.

Page 17: Bazy Danych i język XML

Sekcja CDATA

Sekcja CDATA zaczyna się znakiem <![CDATA[, a

kończy znakiem ]]>. Między tymi dwoma ograniczającymi grupami znaków można wpisywać dowolne znaki z wyjątkiem ]]> (które zostałyby zinterpretowane jako koniec sekcji CDATA).Wszystkie znaki wewnątrz sekcji CDATA są traktowane jako literalna cześć danych znakowych elementu, a nie jako markupy XML.Sekcję CDATA można wstawić wszędzie tam, gdzie występują dane znakowe, tzn. wewnątrz zawartości elementu ale nie wewnątrz markapa XML.

Page 18: Bazy Danych i język XML

Sekcja CDATA

<A-SEKCJA>Oto przykład bardzo prostej strony HTML:<![CDATA[<HTML><HEAD><TITLE>Kowalski i syn</TITLE></HEAD><BODY><P>Witamy na naszej stronie domowej!</P></BODY></HTML>]]></A-SEKCJA>

Page 19: Bazy Danych i język XML

Przykład dokumentu XML

Page 20: Bazy Danych i język XML

Przykład dokumentu XML

Page 21: Bazy Danych i język XML

XSL (XML Stylesheet Language) Język pozwalający na

przekonwertowanie dokumentu XML do różnych formatów np. HTML, XML, SVG (Scalable Vector Graphics, www.w3.org/TR/SVG/), PDF i wiele innych

Page 22: Bazy Danych i język XML

XPATH (XML Path Languge)

Język zapewnia możliwość wykonywania kwerend, które wyszukują odpowiednie informacje w dokumencie XML

Połączenie języków XSL i XPATH pozwala na tworzenie dokumentów XSLT (eXtensible StyleSheet Transformations) stanowiących wzorzec do transformacji dokumentu XML

Page 23: Bazy Danych i język XML

Plik XSLT

Page 24: Bazy Danych i język XML

Zmiana w pliku XML

Page 25: Bazy Danych i język XML

Wynik parsowania

Page 26: Bazy Danych i język XML

Zapis danych w formacie XML

Page 27: Bazy Danych i język XML

Dane

Page 28: Bazy Danych i język XML

KodImports System.Data.SqlClientImports System.xmlImports System.xml.xslImports System.Xml.Xsl.XslCompiledTransform Dim dataSet As DataSet = New DataSet("Test") Dim customerAdapter As SqlDataAdapter = New SqlDataAdapter( _ "SELECT IdKlienta, Nazwa, Adres FROM Klienci", connection) customerAdapter.Fill(dataSet, "Klienci") Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter( _ "SELECT IdKlienta, IdZamowienia, CONVERT(varchar(12), Data, 104) AS Data FROM Zamowienia", connection) orderAdapter.Fill(dataSet, "Zamowienia") connection.Close()

Page 29: Bazy Danych i język XML

Kod – c.d.dataSet.Relations.Add("Test", _ dataSet.Tables("Klienci").Columns("IdKlienta"), _ dataSet.Tables("Zamowienia").Columns("IdKlienta")).Nested = True dataSet.WriteXml("XMLZamowienia.xml") dataSet.WriteXmlSchema("XMLZamowieniaS.xml") Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet) Dim xslTran As XslCompiledTransform = New XslCompiledTransform xslTran.Load("XSLTZamowienia.xslt") Dim writer As XmlTextWriter = New XmlTextWriter( _ "xslt_output.html", System.Text.Encoding.UTF8) xslTran.Transform(xmlDoc, Nothing, writer) writer.Close()

Page 30: Bazy Danych i język XML

Plik XML

Page 31: Bazy Danych i język XML

Plik XMLSchema

Page 32: Bazy Danych i język XML

Wynik

Page 33: Bazy Danych i język XML

Wczytywanie prostych plików XML do bazy danych (DataSet)

dataSetXML.ReadXml("XMLZamowienia.xml") DataGridView1.DataSource = dataSetXML DataGridView1.DataMember = "Klienci"

Page 34: Bazy Danych i język XML

Wynik

Page 35: Bazy Danych i język XML

Serializacja

Wg Serializacja danych w .NET 2.0 – http://www.codeguru.pl/baza-wiedzy/serializacja-danych-w-net-20-czesc-1,2493

Page 36: Bazy Danych i język XML

Serializacja - deserializacja

Proces przekształcania obiektów (bądź ogólnie danych) używanych w programie na ciąg bajtów, który może następnie być przekazany poza daną instancję programu

Proces odwrotny nazywamy deserializacją

Page 37: Bazy Danych i język XML

Przykłady serializacji

zapisywanie parametrów konfiguracyjnych programu do pliku i ich odczyt w razie potrzeby

zapisywanie stanu działania programu, aby przy następnym uruchomieniu, kontynuować działanie od zapisanego momentu

wymiana danych między programami znajdującymi się na różnych komputerach połączonych siecią komputerową

Page 38: Bazy Danych i język XML

Serializacja w środowisku .NET Dwa gotowe mechanizmy serializacji danych –

XmlSerializer oraz System.Runtime.Serialization (SoapFormatter/BinaryFormatter)

XmlSerializer oraz SoapFormatter w procesie serializacji korzystają z jezyka XML

BinaryFormatter przekształca obiekty w ciąg bajtów w sposób specyficzny dla środowiska .NET

Page 39: Bazy Danych i język XML

Serializacja XML

Serializacja XML wykorzystujemy:– gdy mamy do czynienia z wymianą danych

między różnymi aplikacjami– jeśli chcemy w łatwy sposób operować na

już istniejących dokumentach XML– gdy chcemy dokładnie kontrolować

strukturę dokumentu, do którego przekształcamy nasze dane

Page 40: Bazy Danych i język XML

XmlSerializer - 1

using System.Text;using System.Xml;using System.Xml.Serialization; namespace SerializacjaPrzykłady{ public class Samochód { public int LiczbaKół = 4; public string Marka; public string Model; private int NrSilnika = 12345; }

Page 41: Bazy Danych i język XML

XmlSerializer - 2

 

class Program { static void Main() { // Tworzymy obiekt serializatora, któremu podajemy typ jaki

// będziemy serializować XmlSerializer Serializer = new XmlSerializer(typeof(Samochód));  // Tworzymy obiekt Samochodu. Samochód Audi_TT = new Samochód(); Audi_TT.Marka = "Audi";

Page 42: Bazy Danych i język XML

XmlSerializer - 3 // Tworzymy strumień danych XML powiązany // z plikiem Samochód.xml XmlTextWriter XmlTextWriter = new XmlTextWriter("Samochód.xml", Encoding.UTF8); // Ustawiamy robienie wcięć w pliku Samochód.xml XmlTextWriter.Formatting = Formatting.Indented;  // Właściwy moment serializacji. Serializer.Serialize(XmlTextWriter, Audi_TT);  // Zamykamy strumień danych powiązany z plikiem Samochód.xml XmlTextWriter.Close(); } }

Page 43: Bazy Danych i język XML

XmlSerializer - wynik

Page 44: Bazy Danych i język XML

XmlSerializer – deserializacja 1using System.Text;using System.Xml;using System.Xml.Serialization; namespace SerializacjaPrzykłady{ public class Samochód { public int LiczbaKół = 4; public string Marka; public string Model; private int NrSilnika = 12345; }

Page 45: Bazy Danych i język XML

XmlSerializer – deserializacja 2class Program { static void Main() { // Tworzymy obiekt serializatora, któremu podajemy typ // jaki będziemy serializować XmlSerializer Serializer = new XmlSerializer(typeof(Samochód));  // Tworzymy strumień danych XML powiązany // z plikiem Samochód.xml XmlTextReader XmlTextReader = new XmlTextReader("Samochód.xml");  // Tworzymy pusty obiekt Samochodu. Samochód Audi_TT = null;

Page 46: Bazy Danych i język XML

XmlSerializer – deserializacja 3

// Właściwy moment deserializacji. Audi_TT = (Samochód)Serializer.Deserialize(XmlTextReader);  // Zamykamy strumień danych powiązany z plikiem Samochód.xml XmlTextReader.Close(); } }

Page 47: Bazy Danych i język XML

Serializacja – bazy danych 1CREATE DATABASE PojazdyGO USE Pojazdy CREATE TABLE [dbo].[Samochody](

[Id] [int] IDENTITY(1,1) NOT NULL,[LiczbaKol] [int] NULL,[Marka] [nchar](255) NULL,[Model] [nchar](255) NULL,[NrSilnika] [int] NULL,

CONSTRAINT [PK_Samochody] PRIMARY KEY CLUSTERED (

[Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

GO 

Page 48: Bazy Danych i język XML

Serializacja – bazy danych 2

 

INSERT INTO [Pojazdy].[dbo].[Samochody] ([LiczbaKol] ,[Marka] ,[Model] ,[NrSilnika]) VALUES (4, 'Audi', 'TT', 12345) CREATE LOGIN serializacja WITH PASSWORD = 'serializacja',

DEFAULT_DATABASE = Pojazdy,DEFAULT_LANGUAGE = Polish;

 CREATE USER serializacja FOR LOGIN serializacja; GRANT SELECT TO serializacja;

Page 49: Bazy Danych i język XML

Serializacja – bazy danych 3using System.Data;using System.Data.SqlClient; namespace SerializacjaPrzykłady{ class BazaDanych { static void Main(string[] args) { // Utworzenie połączenia z serwerem SQL. SqlConnection SqlConnection = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=Pojazdy;Persist Security Info=True;User ID=serializacja;Password=serializacja;");

Page 50: Bazy Danych i język XML

Serializacja – bazy danych 4 // Utworzenie SqlDataAdaptera powiązanego z tabelą Samochody. string selectCommandText = "SELECT LiczbaKół, Marka, Model, NrSilnika FROM Samochody"; SqlDataAdapter SqlDataAdapter = new SqlDataAdapter (selectCommandText, SqlConnection);  // Utworzenie DataSetu o nazwie Samochody. DataSet DataSet = new DataSet("Samochody");  // Wypełnienie DataSetu. SqlDataAdapter.Fill(DataSet);  // Zapisanie zawartości DataSetu do pliku XML. DataSet.WriteXml("Samochód.xml"); } }}

Page 51: Bazy Danych i język XML

Deserializacja – bazy danych 1using System.Data;using System.Data.SqlClient; namespace SerializacjaPrzykłady{ class BazaDanych { static void Main(string[] args) { // Utworzenie DataSetu o nazwie Samochody. DataSet DataSet = new DataSet("Samochody");  // Wczytanie pliku XML do DataSetu. DataSet.ReadXml("Samochód.xml");

Page 52: Bazy Danych i język XML

Deserializacja – bazy danych 2

// Wyświetlenie zawartości pierwszej tabeli, pierwszego //wiersza, pierwszej komórki. System.Console.WriteLine(DataSet.Tables[0].Rows[0].ItemArray[1]); } }}