Transcript Język SQL
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ę.
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.
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ń.
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.
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>
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.
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.
Struktura dokumentu XML
Prolog
Deklaracja
XML
Komentarz
Instrukcja
sterująca
<?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>okB adka 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>
Elementy zagnieżdżone w elemencie głównym
Element
główny
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.
Budowa elementu XML
Typ
Typ
<TYTUL>Piekny widok</TYTUL>
Znacznik
początkowy
Zawartość (dane
znakowe)
Znacznik
końcowy
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.
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
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.
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.
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.
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.
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.
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>
Przykład dokumentu XML
Przykład
dokumentu
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
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
Plik XSLT
Zmiana w pliku XML
Wynik parsowania
Zapis danych w formacie XML
Dane
Kod
Imports System.Data.SqlClient
Imports System.xml
Imports System.xml.xsl
Imports 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()
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()
Plik XML
Plik XMLSchema
Wynik
Wczytywanie prostych plików XML
do bazy danych (DataSet)
dataSetXML.ReadXml("XMLZamowienia.xml")
DataGridView1.DataSource = dataSetXML
DataGridView1.DataMember = "Klienci"
Wynik
Serializacja
Wg Serializacja danych w
.NET 2.0 –
http://www.codeguru.pl/bazawiedzy/serializacja-danych-w-net-20czesc-1,2493
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ą
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ą
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
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
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;
}
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";
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.xm
XmlTextWriter.Close();
}
}
XmlSerializer - wynik
XmlSerializer – deserializacja 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;
}
XmlSerializer – deserializacja 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 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;
XmlSerializer – deserializacja 3
// Właściwy moment deserializacji.
Audi_TT = (Samochód)Serializer.Deserialize(XmlTextReader);
// Zamykamy strumień danych powiązany z plikiem Samochód.xm
XmlTextReader.Close();
}
}
Serializacja – bazy danych 1
CREATE DATABASE Pojazdy
GO
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, I
) ON [PRIMARY]
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;
Serializacja – bazy danych 3
using 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;");
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");
}
}
}
Deserializacja – bazy danych 1
using 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");
}
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]);
}