<!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>
<!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)>
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(..., ..., ...)|...])]
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:
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")] ) ] ) ] ).
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.
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 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.
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:
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)]) ]))
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: