Zajęcia 4 Dokumenty XML zapisywane w relacyjnej bazie danych


Sekcja: Tworzenie dokumentu XML z RDB.
50. Tworzymy tabelę do przechowywania danych.
Dokument quotes.xml jest na tyle prosty, że potrzebne do niego dane można przechować w
jednej tabeli relacyjnej bazy danych. Poniżej przedstawiono skrypt tworzący tabelę do
przechowywania danych.
drop table quotes;
create table quotes
(
nr serial primary key,
year integer,
phrase varchar(80),
author varchar(80)
);
insert into quotes (year,phrase,author)
values(1991,'Hasta la vista, baby!','Arnold Schwarzenegger');
insert into quotes (year,phrase,author)
values(2000,'This race is as tight as the rusted lug nuts on a 55
Ford.','Dan Rather');
insert into quotes (year,phrase,author)
values(2004,'This race is hotter than a Times Square Rolex.','Dan Rather');
insert into quotes (year,phrase,author)
values(1976,'Coca Cola to jest to!','Agnieszka Osiecka');
insert into quotes (year,phrase,author)
values(1410,'U nas mieczy dostatek','Wladyslaw Jagiello');
Przykład 50: Tworzymy tabelę do przechowywania danych.
51. Pobranie danych z tabeli i wyświetlenie.
Ustawiamy zmienną połączeniową i łączymy się z bazą za pomocą funkcji pg_connect().
Tworzymy zapytanie SQL, zadajemy je do bazy za pomocą funkcji pg_connect(). Pobieramy
dane za pomocą funkcji pg_fetch_row(). Funkcja pg_num_fields() pozwala nam oszacować
liczbę kolumn zwracanych przez zapytanie. Pobrane dane wyświetlamy w postaci tabeli
HTML.
$conn="host=localhost port=5432 dbname=inf1 user=inf1 password=123456";
$conn = pg_connect($conn);
if (!$conn) {echo "Wystąpił błąd połączenia z bazą
";exit;}
$query="SELECT year,phrase,author FROM quotes ORDER BY year";
$result = pg_query($conn,$query);
if (!$result) {echo "Wystąpił błąd zapytania SQL";exit;}
echo "";
$col=pg_num_fields($result);
while ($row = pg_fetch_row($result))
{
echo "";
for ($i=0;$i<$col;$i++){echo "";}
echo "";
}
echo "
";echo $row[$i];echo "
";
pg_close($conn);
?>
Przykład 51: Pobranie danych z tabeli i wyświetlenie.
52. Pobranie danych z tabeli, zapamiętanie i wyświetlenie.
Pobrane z tabeli quotes dane przed wyświetleniem są zapamiętane w tablicy
$quotes[$row][$col].
$conn="host=localhost port=5432 dbname=inf1 user=inf1 password=123456";
$conn = pg_connect($conn);
if (!$conn) {echo "Wystąpił błąd połączenia z bazą
";exit;}
$query="SELECT year,phrase,author FROM quotes ORDER BY year";
$result = pg_query($conn,$query);
if (!$result) {echo "Wystąpił błąd zapytania SQL";exit;}
$colNr=pg_num_fields($result);
$row=0;
while ($data = pg_fetch_row($result))
{
for ($col=0;$col<$colNr;$col++) {$quotes[$row][$col] = $data[$col];}
$row=$row+1;
}
pg_close($conn);
echo "";
for($row=0;$row{
echo "
";
for ($col=0;$col {echo "";}
echo "";
}
echo "
";echo $quotes[$row][$col];echo "
";
?>
Przykład 52: Pobranie danych z tabeli, zapamiętanie i wyświetlenie.
53. Tworzenie dokumentu XML z jednym cytatem.
Tworzymy dokument XML. Element root to . Do dokumentu wpisujemy
powiedzenie Agnieszki Osieckiej z 1976 r. 'Coca Cola to jest to'. Stworzony dokument
wyświetlamy na przeglądarce.
$dom = new DOMDocument("1.0","iso-8859-2");
$element = new DOMElement('quotes');
$element = $dom->appendChild($element);
$dom->formatOutput = true;
$quote = $dom->createElement('quote');
$quote->setAttribute('year', '1976');
$phrase = $dom->createElement('phrase');
$phraseText = $dom->createTextNode('Coca cola to jest to!');
$phrase->appendChild($phraseText);
$author = $dom->createElement('author');
$authorText = $dom->createTextNode('Agnieszka Osiecka');
$author->appendChild($authorText);
$quote->appendChild($phrase);
$quote->appendChild($author);
$dom->documentElement->appendChild($quote);
echo $dom->saveXML();
?>
Przykład 53: Tworzenie dokumentu XML z jednym cytatem.
54. Stworzenie arkusza XSL formatującego nasz dokument.
Za pomocą arkusza XSL formatujemy dokument. Dokument będzie dokumentem HTML. W
nagłówku umieszczamy napis 'Slawne powiedzenia'. Dokument wyświetlamy w formie tabeli
HTML. Instrukcja rozpoczyna pętlę pobierająca
wszystkie wystąpienia 'quotes/quote'. Instrukcja pobiera
atrybut year. Instrukcja pobiera pole tekstowe z elementu
. Instrukcja
kończy instrukcję pętli. Stworzony arkusz XSL
zapisujemy w pliku tabquotes.xsl.

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">



Slawne powiedzenia















Rok Powiedzenie Autor





Przykład 54: Stworzenie arkusza XSL formatującego nasz dokument.
55. Wyświetlenie dokumentu XML za pomocą arkusza XSL.
Dokument stworzony w sekcji 53 wyświetlamy za pomocą arkusza XSL.
$dom = new DOMDocument();
$dom->formatOutput = true;
$element = new DOMElement('quotes');
$element = $dom->appendChild($element);
$quote = $dom->createElement('quote');
$quote->setAttribute('year', '1976');
$phrase = $dom->createElement('phrase');
$phraseText = $dom->createTextNode('Coca cola to jest to!');
$phrase->appendChild($phraseText);
$author = $dom->createElement('author');
$authorText = $dom->createTextNode('Agnieszka Osiecka');
$author->appendChild($authorText);
$quote->appendChild($phrase);
$quote->appendChild($author);
$dom->documentElement->appendChild($quote);
$xml = new DOMDocument();
$xml=$dom;
$xsl = new DOMDocument();
$xsl->load('tabquotes.xsl');
$xslt = new XsltProcessor();
$xslt->importStylesheet($xsl);
$result = $xslt->transformToDoc($xml);
echo $result->saveXML();
?>
Przykład 55: Stworzenie arkusza XSL formatującego nasz dokument.
56. Gotowy dokument XML pobrany z bazy i wyświetlony.
Pobieramy dane z bazy do tablicy $quotes. Następnie budujemy dokument XML. Zbudowany
dokument wyświetlamy z użyciem arkusza XSL. W ten sposób zrealizowaliśmy założone
zadanie. Dokumenty XML są zwykle bardziej skomplikowane i wtedy dane nalezy
przechowywać w stosownej liczbie tabel.
$conn="host=localhost port=5432 dbname=quotesxml user=postgres
password=postgres";
$conn = pg_connect($conn);
if (!$conn) {echo "Wystąpił błąd połączenia z bazą
";exit;}
$query="SELECT year,phrase,author FROM quotes ORDER BY year";
$result = pg_query($conn,$query);
if (!$result) {echo "Wystąpił błąd zapytania SQL";exit;}
$colNr=pg_num_fields($result);
$row=0;
while ($data = pg_fetch_row($result))
{
for ($col=0;$col<$colNr;$col++) {$quotes[$row][$col] = $data[$col];}
$row=$row+1;
}
pg_close($conn);
$dom = new DOMDocument();
$element = new DOMElement('quotes');
for($row=0;$row {
$element = $dom->appendChild($element);
$dom->formatOutput = true;
$quote = $dom->createElement('quote');
$quote->setAttribute('year', $quotes[$row][0]); //year
$phrase = $dom->createElement('phrase');
$phraseText = $dom->createTextNode($quotes[$row][1]); //phrase
$phrase->appendChild($phraseText);
$author = $dom->createElement('author');
$authorText = $dom->createTextNode($quotes[$row][2]); //author
$author->appendChild($authorText);
$quote->appendChild($phrase);
$quote->appendChild($author);
$dom->documentElement->appendChild($quote);
} // gotowy xml
$xml = new DOMDocument();
$xml=$dom;
$xsl = new DOMDocument();
$xsl->load('tabquotes.xsl');
$xslt = new XsltProcessor();
$xslt->importStylesheet($xsl);
$result = $xslt->transformToDoc($xml);
echo $result->saveXML();
?>
Przykład 56: Gotowy dokument XML pobrany z bazy i wyświetlony.
Sekcja: Tworzenie tabeli SQL z dokumentu XML.
60. yródłowy dokument XML.
Dokonamy rozbioru poniższego dokumentu a pobrane z niego dane będziemy zapisywać w
tabeli SQL. Dokument quotes.xml jest na tyle prosty, że pobrane do niego dane można
przechować w jednej tabeli relacyjnej bazy danych. Postać tabeli będzie identyczna jak w
poprzednim rozdziale.



Mieczy ci u nas dostatek
Wladyslaw Jagiello


Mecz mozna przegrac, wygrac albo zremisowac
Kazimierz Gorski


Coca Cola to jest to!
Agnieszka Osiecka


Hasta la vista, baby!
Arnold Schwarzenegger


This race is as tight as the rusted lug nuts on a 55
Ford.

Dan Rather


This race is hotter than a Times Square Rolex.
Dan Rather


Byc albo nie byc
Wiliam Szekspir


Przykład 60: yródłowy dokument XML.
61. Czytamy dokument XML.
Tak jak na poprzednich zajęciach czytamy za pomocą klasa DOMDokument dokument XML
i wyświetlamy go za pomocą tabeli HTML.
$dom = new DOMDocument();
$dom->load('quotes.xml');
$row=0;
foreach ($dom->getElementsByTagname('quote') as $element)
{
$year = $element->getAttribute('year');
$quotes[$row][0]=$year;
foreach (($element->childNodes) as $e)
{
if (is_a($e, 'DOMElement'))
{
if ($e->tagName == 'phrase')
{$phrase = htmlspecialchars($e-
>textContent);$quotes[$row][1]=$phrase;}
elseif ($e->tagName == 'author')
{$author = htmlspecialchars($e-
>textContent);$quotes[$row][2]=$author;}
}
}
$row=$row+1;
}
echo "

Slynne powiedzenia

";
echo "";
for($row=0;$row {
echo "
";
for ($col=0;$col {echo "";}
echo "";
}
echo "
";echo $quotes[$row][$col];echo "
";
?>
Przykład 61: Czytamy dokument XML.
62. Zapis dokumentu do tabeli SQL.
Po odczytaniu zapisujemy plik do tabeli SQL. Przed zapisem kasujemy za pomocą instrukcji
TRUNCATE TABLE quotes poprzednią zawartość tabeli. Zapisane dane odczytujemy za
pomocą instrukcji SELECT year,phrase,author FROM quotes ORDER BY year i
wyświetlamy na przeglądarce aby zobaczyć co się zapisało.
$dom = new DOMDocument();
$dom->load('quotes.xml');
$row=0;
foreach ($dom->getElementsByTagname('quote') as $element)
{
$year = $element->getAttribute('year');
$quotes[$row][0]=$year;
foreach (($element->childNodes) as $e)
{
if (is_a($e, 'DOMElement'))
{
if ($e->tagName == 'phrase')
{$phrase = htmlspecialchars($e-
>textContent);$quotes[$row][1]=$phrase;}
elseif ($e->tagName == 'author')
{$author = htmlspecialchars($e-
>textContent);$quotes[$row][2]=$author;}
}
}
$row=$row+1;
}
$conn="host=localhost port=5432 dbname=inf1 user=inf1 password=123456";
$conn = pg_connect($conn);
if (!$conn) {echo "Wystąpił błąd połączenia z bazą
";exit;}
$query="TRUNCATE TABLE quotes";//echo $query;
$result = pg_query($conn,$query);
if (!$result) {echo "Wystąpił błąd zapytania SQL";exit;}
for($row=0;$row{
$year=$quotes[$row][0];
$phrase=$quotes[$row][1];
$author=$quotes[$row][2];
$query="INSERT INTO quotes(year,phrase,author)
VALUES('$year','$phrase','$author')";//echo $query;
$result = pg_query($conn,$query);
if (!$result) {echo "Wystąpił błąd zapytania SQL";exit;}
}
$query="SELECT year,phrase,author FROM quotes ORDER BY year";
$result = pg_query($conn,$query);
if (!$result)
{
echo "Wystąpił błąd zapytania SQL";exit;
}
echo "";
$col=pg_num_fields($result);
while ($row = pg_fetch_row($result))
{
echo "";
for ($i=0;$i<$col;$i++)
{echo "";}
echo "";
}
echo "
"; echo $row[$i]; echo "
";
pg_close($conn);
?>
Przykład 62: Zapis dokumentu do tabeli SQL.


Wyszukiwarka

Podobne podstrony:
Dokumenty XML w relacyjnych bazach danych czyli wojna światów I
Zajęcia 3 Odczyt i zapis dokumentów XML
2004 11 Porównanie serwerów relacyjnych baz danych Open Source [Bazy Danych]
01 Projektowanie relacyjnej bazy danych Czym jest relacyj
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie IV
relacje i klucze w bazie danych
,Inżynieria oprogramowania L, operacje w bazie danych biblioteki
Zestaw 1 Wprowadzenie do relacyjnych baz danych
2009 02 Relacyjna baza danych HSQLDB [Bazy Danych]
[03] Bazy Danych Relacyjny Model Danych
helion relacyjne bazy danych
Relacyjna baza danych agga
UML a relacyjne bazy danych
Relacyjna baza danych Access 2007
Podstawy baz danych zajecia 2 z SQL Tabela Biblioteka
Wykład 12 XML NOWOCZESNY STANDARD ZAPISU I WYMIANY DOKUMENTU

więcej podobnych podstron