Parsowanie prostych plików xml
Plik 'cd.xml'
<!DOCTYPE CD SYSTEM "cd.dtd">
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tylor</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
<TITLE>Greatest Hits</TITLE>
<ARTIST>Dolly Parton</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
<TITLE>Still got the blues</TITLE>
<ARTIST>Gary More</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin redords</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1990</YEAR>
Plik cd.dtd
<!ELEMENT CD (TITLE, ARTIST, COUNTRY, COMPANY, PRICE, YEAR?)*>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT ARTIST (#PCDATA)>
<!ELEMENT COUNTRY (#PCDATA)>
<!ELEMENT COMPANY (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!ELEMENT YEAR (#PCDATA)>
SWI-Prolog
Jeśli chodzi o SWI-Prolog udało sie zrobić następujące rzeczy:
Ze strony http://www.swi-prolog.org/ pobrano przykładowe użycie predykatów korzystających z biblioteki sgml2pl. Użyto predykatu xml2pro('cd.xml','cd.dtd',X) i pod X otrzymano postać prologową pliku cd.xml. W drugą stronę użyto predykatu pro2xml(postac_w_prologu,'plik.xml'). Poniżej przedstawiono postać w prologu wygenerowaną przez predykat xml2pro:
cd([], [title([], 'Empire Burlesque'),
artist([], 'Bob Dylan'),
country([], 'USA'),
company([], Columbia'),
price([], '10.90'),
year([], '1985'),
title([], 'Hide your heart'),
artist([], 'halo'),
country([], 'Polska'),
company([], 'EMI'),
price([], '23.90'),
year([], '1999')|...])
Podobnie działa predykat load_xml_file('cd.xml',T). PO jego użyciu otrzymano:
T = [element('CD', [], [
element('TITLE', [], ['Empire Burlesque']),
element('ARTIST', [], ['Bob Dylan']),
element('COUNTRY', [], ['USA']),
element('COMPANY', [], ['Columbia']),
element('PRICE', [], ['10.90']),
element('YEAR', [], [...]),
element(..., ..., ...)|...])]
BProlog
Udało się zainstalować BProlog oraz załadować biblioteke 'xml.pl'. Po sparsowaniu pliku 'cd.xml' otrzymano reprezentacje tego pliku xml w postaci termu w prologu.
Sposób działania:
Komenda cd(Dir) ustala ścieżke w której pracujemy, np. cd('C:/BProlog/Tools'). Tam muszą znajdować sie zarówno pilik xml jak i plik biblioteki 'xml.pl'.
Komenda cl(File) kompiluje i ładuje program, np. cl('xml.pl') kompiluje i ładuje biblioteke 'xml.pl'
Dalej posługujemy się predykatami zawartymi w biblotece, np. xml2pl('cd.xml','nowy.pl') tworzy plik nowy.pl zawierający postać prologową pliku cd.xml.
Poniżej przedstawiono wygenerowaną postać w prologu:
xml( [version="1.0", encoding="ISO-8859-1", standalone="no"],
[
doctype( 'CD', system( "cd.dtd" ) ),
element( 'CD',
[],
[
element( 'TITLE',[],[pcdata("Empire Burlesque")] ),
element( 'ARTIST',[],[pcdata("Bob Dylan")] ),
element( 'COUNTRY',[],[pcdata("USA")] ),
element( 'COMPANY',[],[pcdata("Columbia")] ),
element( 'PRICE',[],[pcdata("10.90")] ),
element( 'YEAR',[],[pcdata("1985")] ),
element( 'TITLE',[],[pcdata("Hide your heart")] ),
element( 'ARTIST',[],[pcdata("Bonnie Tylor")] ),
element( 'COUNTRY',[],[pcdata("UK")] ),
element( 'COMPANY',[],[pcdata("CBS Records")] ),
element( 'PRICE',[],[pcdata("9.90")] ),
element( 'YEAR',[],[pcdata("1988")] ),
element( 'TITLE',[],[pcdata("Greatest Hits")] ),
element( 'ARTIST',[],[pcdata("Dolly Parton")] ),
element( 'COUNTRY',[],[pcdata("USA")] ),
element( 'COMPANY',[],[pcdata("RCA")] ),
element( 'PRICE',[],[pcdata("9.90")] ),
element( 'YEAR',[],[pcdata("1982")] ),
element( 'TITLE',[],[pcdata("Still got the blues")] ),
element( 'ARTIST',[],[pcdata("Gary More")] ),
element( 'COUNTRY',[],[pcdata("UK")] ),
element( 'COMPANY',[],[pcdata("Virgin redords")] ),
element( 'PRICE',[],[pcdata("10.20")] ),
element( 'YEAR',[],[pcdata("1990")] )
] )
] ).
Amzi! Prolog
Wersja prologu Amzi! jest możliwa do ściągnięcia jako wersja „Free (Never Expires)”. Za inne wersje trzeba płacić. Do tej pory nie udało się skorzystać z biblioteki podanej w XML.pro.
EZY Prolog
Udało sie zainstalować EZY Prolog Suite. Jest to wersja darmowa tzw. EZY Prolog for students. Przetestowano program ezy_zml_laboratory.ezy. Program pozwala na wczytanie pliku xml i jego sparsowanie.
MINERVA
Minerva jest licencjonowanym produktem firmy IF Computer Japan. Jest możliwe posiadanie licencji ewaluacyjnej (wolnej od opłaty) ważnej na okres 2 miesięcy. Minerva może być nazwana jako Java Prolog ponieważ dostarcza funkcjonalności Prologu jako klasa Javy.
JIProlog
Po zainstalowaniu i uruchomieniu lub po uruchomieniu apletu na stronie parser zadziałał. Wersja tego prologu była bezpłatna, podczas działania wyświetlał sie tylko napis informujący użytkownika, że posiada wersje shareware unregistered. Zgodnie z przykładem udało sie otrzymać postać prologową po sparsowaniu pliku xml. Poszczególne kroki:
load_library('jipxxml.jar'). - ładowanie biblioteki do obsługi plików xml
load_library('jipxio.jar'). - ładowanie biblioteki do i/o dla plików
see('cd.xml'). - otworzenie pliku xml
xml_read_document(X) - przetworzenie dokumentu xml do postaci prologu
Istnieje też predykat create_xml_file(X) który zawarty jest w przykładowym programie xml_sample.pl. Predykat ten tworzy plik xml na podstawie termu prologowego. Istnieje też predykat xml_write_document(Handle,Term).
Poniżej przedstawiono wygenerowany plik w postaci prologowej:
X = xml_document([[version = 1.0, encoding = UTF-8],
xml_doctype(CD, [SYSTEM = cd.dtd], [])],
xml_element(CD, [],
[xml_element(TITLE, [], [xml_text(Empire Burlesque)]),
xml_element(ARTIST, [], [xml_text(Bob Dylan)]),
xml_element(COUNTRY, [], [xml_text(USA)]),
xml_element(COMPANY, [], [xml_text(Columbia)]),
xml_element(PRICE, [], [xml_text(10.90)]),
xml_element(YEAR, [], [xml_text(1985)]),
xml_element(TITLE, [], [xml_text(Hide your heart)]),
xml_element(ARTIST, [], [xml_text(Bonnie Tylor)]),
xml_element(COUNTRY, [], [xml_text(UK)]),
xml_element(COMPANY, [], [xml_text(CBS Records)]),
xml_element(PRICE, [], [xml_text(9.90)]),
xml_element(YEAR, [], [xml_text(1988)]),
xml_element(TITLE, [], [xml_text(Greatest Hits)]),
xml_element(ARTIST, [], [xml_text(Dolly Parton)]),
xml_element(COUNTRY, [], [xml_text(USA)]),
xml_element(COMPANY, [], [xml_text(RCA)]),
xml_element(PRICE, [], [xml_text(9.90)]),
xml_element(YEAR, [], [xml_text(1982)]),
xml_element(TITLE, [], [xml_text(Still got the blues)]),
xml_element(ARTIST, [], [xml_text(Gary More)]),
xml_element(COUNTRY, [], [xml_text(UK)]),
xml_element(COMPANY, [], [xml_text(Virgin redords)]),
xml_element(PRICE, [], [xml_text(10.20)]),
xml_element(YEAR, [], [xml_text(1990)])
]))
YAP Prolog
Wersja YAP Prolog jest bezpłatna użyciu w środowiskach akademickich. Istnieje biblioteka posiadająca możliwości związane z plikami XML/HTML (parsowanie plików XML lub HTML) - The PiLLoW Web Programming Library .
Wersje tej biblioteki są dostępne zarówno dla YAP Prolog jak i dla SWI Prolog oraz Ciao Prolog.
Jeśli chodzi o predykaty związane z XML jest dostępny xml2terms/2
Predykat ten wykorzystuje się na dwa sposoby:
translacja XML-term do kodu XML
translacja kodu XML do strukturalnego termu XML'owego