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

  • SGML/XML, interpret XML Namespaces, Validate an SGML/XML DOM-term

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:

  1. translacja XML-term do kodu XML
  2. translacja kodu XML do strukturalnego termu XML'owego
pl/miw/miw08_prolog_xml/parsowanie.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0