Wyklad xmlparse handout


Perl a XML
Narzędzia informatyczne w językoznawstwie
Perl - Przetwarzanie XML

3515 modułów w CPAN zawiera w nazwie skrót XML
Marcin Junczys-Dowmunt

Perl jest językiem przeznaczonym do przetwarzania tekstu
junczys@amu.edu.pl

Dokumenty XML to pliki tekstowe

Perl jest silnie związany z WWW, podobnie jak XML
Zakład Logiki Stosowanej
http://www.logic.amu.edu.pl
7. maja 2008
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 1/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 2/1
Generowanie danych XML Generowanie danych XML - Przykład
1 my @persons = (

Najbardziej podstawowy sposób tworzenia plików XML to { f_name => "Tomasz", s_name => "Kowalski" },
{ f_name => "Bartosz", s_name => "Nowak" }
generowanie dokumentów  na piechotę .
);

Dokumenty XML są plikami tekstowymi, możemy więc
5
korzystać ze standardowych funkcji Perla z zakresu
my $xml = "\n";
przetwarzania tekstu.
$xml .= "\n";
foreach my $person (@persons) {

W przypadku większych fragmentów tekstu, korzystanie z
$xml .= <zapisu łańcuchów znakowych w cudzysłowie jest niewygodne.
10

Można wtedy korzystać z tzw. here-documents.
$person->{f_name}
$person->{s_name}
here-document to zapis, który mówi, że od nowej linii po

identyfikatorze poprzedzonym znakami<XMLEND
napotkania identyfikatora należy traktować wszystko jako
15 }
tekst ujęty w podwójnym cudzysłowie.
$xml .= "
\n";

Wewnątrz here-document działa interpolacja zmiennych.
print $xml;
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 3/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 4/1
Wczytywanie danych XML - Co to jest parser? Parsery odtwarzające strukturę drzewiastą dokumentu

Przy generowanie dokumentu XML struktura danych narzuca
Cały dokument XML jest konwertowany na pojedynczą
strukturę dokumentu XML.
strukturę danych.

Odwrotnie struktura wczytywanego pliku XML ma wpływ na
Podobnie jak sam dokument XML ta struktura danych ma
strukturę danych, która powstaje w pamięci komputera.
strukturę drzewa, w którym węzły reprezentują elementy,
atrybuty, dane tekstowe i inne fragmenty dokumentu XML.

Proces odtwarzania struktury hierarchicznej na podstawie
danych linearnych nazywamy parsingiem.
Parser udostępnia funkcje służące do uzyskania dostępu do
danych lub ich manipulacji, np. tworzenie i podczepianie

W przypadku XML dotyczy to np. identyfikacji znaczników,
nowych węzłów.
zbudowania struktury zagnieżdżenia itp. na podstawie ciągu
znaków.
Cała struktura danych jest przechowywana w pamięci, w
przypadku dużych dokumentów XML może to stanowić

Parsing zajmuje się składniowym aspektem przetwarzania
poważny problem. Struktura danych może zajmować do 30
dokumentów XML.
razy tyle pamięci co postać tekstowa dokumentu XML.

Rozróżnia się dwa paradygmaty parsingu XML: parsing

Takie parsery sprawdzają poprawność dokumentu XML zanim
odtwarzający strukturę drzewa XML w pamięci, parsing
udostępnią dane.
strumieniowy oparty na wydarzeniach.
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 5/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 6/1
Parsery strumieniowy / zdarzeniowe Standardowe sposoby przetwarzania XML

Parsery strumieniowe nie budują drzewa w pamięci, tylko
generują strumień zdarzeń, które są przechwytywane oraz
przetwarzane na bieżąco przez tzw. funkcje callback.

Różnym zdarzeniom przydziela się różne funkcje callback.

Standardowymi interfejsami do parserów XML dla różnych

Odpowiednie zdarzenia są generowane w momentach gdy
języków programowania są np. DOM (Document Object
parser w trakcie wczytywania natrafia np. na znaczniki
Model) oraz SAX (Simple API for XML).
otwierające, znaczniki zamykające itp.

Odpowiadają im moduły XML::DOM oraz XML::SAX.

Parser udostępnia dane z dokumentu XML w trakcie

XML::DOM to interfejs do drzewiastej struktury dokumentu.
przetwarzania dokumentu. Nie musi wczytać całość

XML::SAX obsługuje parsery strumieniowe.
dokumentu.

Parser strumieniowy udostępnia dane zanim sprawdzi
poprawność składniową dokumentu.

Wymagania pamięciowe takich parserów są niskie i możemy
przetwarzać wielkie dokumenty XML, niestety obsługa jest
bardziej skomplikowana.
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 7/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 8/1
Przykład dokumentu XML (leksykon.xml) Moduł XML::DOM


1 use XML::DOM;

use Data::Dumper;
analiza
my $parser = new XML::DOM::Parser;

my $doc = $parser->parsefile("leksykon.xml");
rzeczownik
5
żeński
my $nodes = $doc->getElementsByTagName ("forma");
process
my $n = $nodes->getLength();


for(my $i = 0; $i < $n; $i++) {
analiza
10 my $text = $nodes->item($i)->getFirstChild();
analizy
analizie my $forma = $text->getNodeValue();
...
my $przy = $nodes->item($i)->getAttribute("p");

print "Forma: $forma - Przypadek: $przy\n";

}
...

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 9/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 10/1
Moduł XML::SAX XML::Simple
1 use XML : : SAX : : Expat ;
my $ p a r s e r = XML : : SAX : : Expat- ( H a n d l e r = MyHandler- ( ) ) ;
>new > >new

XML::Simple został stworzony z myślą o plikach
my $ r e f = $ p a r s e r - a r s e f i l e (  l e k s y k o n . xml  ) ;
>p
konfiguracyjnych zapisanych w XML.
5 package MyHandler ;
sub new {

my $ t y p e = shift; Moduł ten może służyć do prostych zadań związanych z
my $ o b j = { d a t a = {} } ;
>
przetwarzaniem XML.
return bless $obj , $ t y p e ;
10 }

Jest to interfejs oparty na strukturze drzewiastej dokumentu.
sub s t a r t e l e m e n t {
my( $ s e l f , $prop ) = @ ;

Nie ma jednak typowego interfejsu jak w przypadku
if( $prop- eq  forma  ) {
>{Name}
15 $ s e l f - a t a}->{last} =  forma  ;
>{d
XML::DOM.
$ s e l f - a t a}->{t e x t } =   ;
>{d
$ s e l f - a t a}->{p r z y p a d e k } = $prop- A t t r i b u t e s  }->{ {}p }->{  V a l ue  } ;
>{d >{

} } Dostęp do węzłów odbywa się za pomocą zwykłych
zagnieżdżonych struktur danych, czyli anonimowych tablic i
20 sub c h a r a c t e r s {
my( $ s e l f , $prop ) = @ ;
haszów.
if ( $ s e l f - a t a}->{last} eq  forma  ) {
>{d
$ s e l f - a t a}->{t e x t } .= $prop- };
>{d >{Data
} }
XML::Simple nie radzi sobie z mieszaną treścią, tzn. gdy
25
sub e n d e l e m e n t {
element zawiera tekst w którym pojawiają się inne elementy.
my( $ s e l f , $prop ) = @ ;
if( $prop- eq  forma  ) {
>{Name}
Np. To jest przykład
print  Forma : $ s e l f - a t a}->{t e x t } - P r zy pad ek : $ s e l f - a t a}->{p r z y p a d e k }\n ;
>{d >{d
30 $ s e l f - a t a}->{last} =   ; zwraca dziwne wyniki.
>{d
} }
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 11/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 12/1
Moduł XML::Simple Wczytywanie dokumentów XML za pomocą XML::Simple
1 $VAR1 = {
 w p i s  = [ {
>
 i n f o r m a c j e  = [ {
>
1 use XML::Simple;
 semantyka  = [  p r o c e s s  ] ,
>
5  czesc mowy  = [  r z e c z o w n i k  ] ,
>
 r o d z a j  = [  me s k i  ]
>
} ] ,
my $xml = new XML::Simple(ForceArray => 1);
 formy  = [ {
>
>
my $data = $xml->XMLin("leksykon.xml");  forma  = [ {
10  l  =  1  ,
>
5
 p  =  mian  ,
>
 c o n t e n t  =  a n a l i z a 
>
foreach my $wpis (@{$data->{wpis}}) {
} ,
{
my $formy = $wpis->{formy}->[0]->{forma};
15  l  =  1  ,
>
foreach my $forma (@$formy) {
 p  =  dop  ,
>
 c o n t e n t  =  a n a l i z y 
>
my $f = $forma->{content};
} ,
{
10 my $p = $forma->{p};
20  l  =  1  ,
>
>
print "Forma: $f - Przypadek: $p\n";  p  =  c e l  ,
 c o n t e n t  =  a n a l i z i e 
>
}
} ]
} ] ,
}
25  l e m a t  = [  a n a l i z a  ] ,
>
 n r  =  1 
>
} ]
};
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 13/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 14/1
Tworzenie dokumentów XML za pomocą XML::Simple Kontrolowanie działania modułu XML::Simple
1 use XML::Simple;
my $xml = new XML::Simple(
1 use XML::Simple;
ForceArray => [ "wpis" ],
use Data::Dumper;
5 GroupTags => { "formy" => "forma" },
);
my $xml = new XML::Simple(ForceArray => 1);
5 my $data = $xml->XMLin("leksykon.xml");
my $data = $xml->XMLin("lex.xml");
print Dumper($data);
10 foreach my $wpis (@{$data->{wpis}}) {
foreach my $forma (@{$wpis->{formy}}) {
print $xml->XMLout($data);
my $f = $forma->{content};
my $p = $forma->{p};
print "Forma: $f - Przypadek: $p\n";
15 }
}
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 15/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 16/1
Wczytywanie dokumentów XML za pomocą XML::Simple Inne przydatne moduły do przetwarzanie XML
XML::Twig
1 $VAR1 = {
 w p i s  = [ {
>

XML::Twig jest jakby hybrydą parsera opartego na drzewach
 i n f o r m a c j e  = {
>
 semantyka  =  p r o c e s s  ,
>
oraz parsera opartego na strumieniach zdarzeń.
5  czesc mowy  =  r z e c z o w n i k  ,
>
 r o d z a j  =  me s k i 
>
} ,
Pozwala na tworzenie struktur drzewiastych, ale może być
 formy  = [ {
>
 l  =  1  ,
>
ograniczony do określonych podelementów.
10  p  =  mian  ,
>
 c o n t e n t  =  a n a l i z a 
>

W ten sposób umożliwia wczytywanie dużych dokumentów,
} ,
{
dla których są tworzona gałęzie (twigs) a nie całe drzewa.
 l  =  1  ,
>
15  p  =  dop  ,
>
 c o n t e n t  =  a n a l i z y 
>
} ,
XML::Dumper
{
 l  =  1  ,
>
20  p  =  c e l  ,
>

Moduł podobny do Data::Dumper oraz XML::Simple
 c o n t e n t  =  a n a l i z i e 
>
} ] ,

 l e m a t  =  a n a l i z a  , Tworzy XML-ową reprezentację struktur danych w Perlu.
>
 n r  =  1 
>
25 } ]

Konstrukcje nie zawsze czytelne (np. struktury cykliczne)
};

Potrafi odtworzyć oryginalną strukturę danych z pliku
XML-owego.
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 17/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 18/1


Wyszukiwarka

Podobne podstrony:
Wyklad04 2008 handout
Wyklad1 2008 handout
Wyklad03 2008 handout
Wyklad2 2008 handout
Wyklad05 2008 handout
Wyklad4 handout
Wyklad07 handout
Wyklad3 handout
Wyklad17 handout
20151012 MichalTrzesiok Statystyka wyklad2 miary statystyczne handout
Wyklad06 handout
Wyklad5 handout
Wyklad2 handout
20151019 MichalTrzesiok Statystyka wyklad3 analiza korelacji handout
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
AGH Sed 4 sed transport & deposition EN ver2 HANDOUT

więcej podobnych podstron