Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_prolog_xml [2008/06/06 14:42] miw |
pl:miw:miw08_prolog_xml [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
Wojciech Szymański <wojtek.szym@gmail.com> | Wojciech Szymański <wojtek.szym@gmail.com> |
| |
| |
Przetestowano następujące implementacje prologu: SWI-Prolog, BProlog, Amzi! Prolog, MINERVA, JIProlog oraz YAP Prolog. | Przetestowano następujące implementacje prologu: SWI-Prolog, BProlog, Amzi! Prolog, MINERVA, JIProlog oraz YAP Prolog. |
| |
| |
| |
==== SWI-Prolog ==== | ==== SWI-Prolog ==== |
| |
SWI-Prolog posiada pakiet //**sgml2pl**// - [[http://www.swi-prolog.org/packages/sgml2pl.html|SWI-Prolog SGML/XML parser]]. Pakiet ten posiada możliwości parsowania dokumentów XML wraz z namespaces oraz plików XML opartych o model DOM. Podstawowym predykatem służącym do parsowania jest: //**load_xml_file(+File,-ListOfContents)**//. Natomiast predykat służący do przetworzenia postaci prologowej na postać xml ma postać: //**xml_write(+Stream, +Term, +Options)**//. | SWI-Prolog posiada pakiet //**sgml2pl**// - [[http://www.swi-prolog.org/packages/sgml2pl.html|SWI-Prolog SGML/XML parser]]. Pakiet ten posiada możliwości parsowania dokumentów XML wraz z namespaces oraz plików XML opartych o model DOM. Podstawowym predykatem służącym do parsowania jest: //**load_xml_file(+File,-ListOfContents)**//. Natomiast predykat służący do przetworzenia postaci prologowej na dokument XML ma postać: //**xml_write(+Stream, +Term, +Options)**//. |
| |
Po wpisaniu w prologu: | Po wpisaniu w prologu: |
] ). | ] ). |
</code> | </code> |
| |
| |
| |
| |
| |
==== JIProlog ==== | ==== JIProlog ==== |
Struktura postaci prologowej jest w postaci zagnieżdżonych termów zaczynając od //xml_document// i idąc wgłąb //xml_element//, //xml_attribute// oraz //xml_text//. | Dokument XML po sparsowaniu w JIProlog jest przedstawiony w postaci zagnieżdżonych termów zaczynając od //xml_document// i idąc wgłąb //xml_element//, //xml_attribute// oraz //xml_text//. |
| |
Charakterystyczne dla postaci prologowej są: | Charakterystyczne dla postaci prologowej są: |
| |
Po stworzeniu korzenia dokumentu XML przechodzimy do dodawania kolejnych dzieci. | Po stworzeniu korzenia dokumentu XML przechodzimy do dodawania kolejnych dzieci. |
| |
| |
| |
| |
| |
| |
| |
==== Dodawanie dzieci ==== | ==== Dodawanie dzieci ==== |
W predykacie tym jako argumenty podajemy kolejno: | W predykacie tym jako argumenty podajemy kolejno: |
* Nazwę rodzica | * Nazwę rodzica |
* Id rodzica - jeśli istnieje wiele elementów o tej samej nazwie, podajemy id rodzica, jeśli nie jest ważne do którego rodzica chcemy dodać dziecko wpisujemy "_" (dziecko zostanie dodane do pierwszego istniejącego rodzica) | * Id rodzica - jeśli istnieje wiele elementów o tej samej nazwie, podajemy id rodzica, jeśli nie jest ważne do którego rodzica chcemy dodać dziecko wpisujemy "_" (dziecko zostanie dodane do pierwszego istniejącego rodzica) |
| |
| :!::!:**//UWAGA//**:!::!: |
| |
| Kiedy podajemy **id** rodzica, do którego chcemy przypisać dziecko, podajemy pełny tekst, np. **//id=prp_1//**. |
* Nazwa dziecka | * Nazwa dziecka |
* prefiks id dziecka; Podając **ala** zostanie stworzony prefiks **ala_**, któremu automatycznie zostanie przydzielona kolejna liczba, np. **ala_1**. | * prefiks id dziecka; Podając **ala** zostanie stworzony prefiks **ala_**, któremu automatycznie zostanie przydzielona kolejna liczba, np. **ala_1**. |
W celu dodania za jednym razem większej ilości dzieci używamy predykatu pochodnego: | W celu dodania za jednym razem większej ilości dzieci używamy predykatu pochodnego: |
<code prolog> | <code prolog> |
app_child(Parent,P_id,Child,ChildIdName,How_much). | app_child(Parent,P_id,Child,ChildIdName,How_many). |
</code> | </code> |
Dodatkowym argumentem jest //**How_much**//, który oznacza ilość dodawanych dzieci. | Dodatkowym argumentem jest //**How_many**//, który oznacza ilość dodawanych dzieci. |
| |
Jest to przydatne np, podczas dodawania wielu dzieci **//att//** do rodzica **//attribute_set//**. | Jest to przydatne np, podczas dodawania wielu dzieci **//att//** do rodzica **//attribute_set//**. |
Podobnie dodajemy: | Podobnie dodajemy: |
* dzieci **//property//** do rodzica **//property_set//** <code prolog> ?- app_child(property_set,_,property,prp,18)</code> | * dzieci **//property//** do rodzica **//property_set//** <code prolog> ?- app_child(property_set,_,property,prp,18)</code> |
* dzieci **//trans//** do rodzica **//tph//** <code prolog> ?- app_child(tph,_,trans,trn,17).</code> | * dzieci **//trans//** do rodzica **//tph//** <code prolog> ?- app_child(tph,_,trans,tr,17).</code> |
* dzieci **//dep//** do rodzica **//ard//** <code prolog> ?- ?- app_child(ard,_,dep,dep,6).</code> | * dzieci **//dep//** do rodzica **//ard//** <code prolog> ?- ?- app_child(ard,_,dep,dp,6).</code> |
| |
Następnie pozostaje tylko dodanie odpowiednich dzieci **//attref//** do odpowiednich rodziców **//property//**. | Następnie pozostaje tylko dodanie odpowiednich dzieci **//attref//** do odpowiednich rodziców **//property//**. |
dodane zostaną dwoje dzieci **//attref//** z id o prefiksie //**att_r_**// do rodzica **//property//** o id **//id=prp_1//**. | dodane zostaną dwoje dzieci **//attref//** z id o prefiksie //**att_r_**// do rodzica **//property//** o id **//id=prp_1//**. |
| |
:!::!:UWAGA:!::!: | ---- |
| :!::!:**//UWAGA//**:!::!: |
| |
Kiedy podajemy **id** rodzica, do którego chcemy przypisać dziecko, podajemy pełny tekst, np. **//id=prp_1//**. | Kiedy podajemy **id** rodzica, do którego chcemy przypisać dziecko, podajemy pełny tekst, np. **//id=prp_1//**. |
| ---- |
| |
| |
W ten sposób stworzono cały szkielet dokumentu XML o zadanym korzeniu oraz zadanych dzieciach. Każdy element posiada własne, unikalne id. Ostatnią rzeczą będzie dodawanie odpowiednich atrybutów. | W ten sposób stworzono cały szkielet dokumentu XML o zadanym korzeniu oraz zadanych dzieciach. Każdy element posiada własne, unikalne id. Ostatnią rzeczą będzie dodawanie odpowiednich atrybutów. |
| |
| |
| |
==== Dodawanie atrybutów ==== | ==== Dodawanie atrybutów ==== |
* atrybut (//nazwa=wartość//), który chcemy dodać | * atrybut (//nazwa=wartość//), który chcemy dodać |
| |
:!::!:UWAGA:!::!: | ---- |
| |
| :!::!://**UWAGA**//:!::!: |
| |
Kiedy podajemy **id** elementu, do którego chcemy dodać atrybut, podajemy pełny tekst, np. **//id=att_0//**. | Kiedy podajemy **id** elementu, do którego chcemy dodać atrybut, podajemy pełny tekst, np. **//id=att_0//**. |
| |
Podobnie jest w przypadku podawania atrybutu. Podajemy pełny tekst zawierający znak **//"="//** , np. **//name=thermostat//** | Podobnie jest w przypadku podawania atrybutu. Podajemy pełny tekst zawierający znak **//"="//** , np. **//name=thermostat//** |
| ---- |
| |
Przykładowo użycie | Przykładowo użycie |
| |
W ten sam sposób możemy dodać każdy atrybut do każdego istniejącego elementu w "prologowej" strukturze XML. | W ten sam sposób możemy dodać każdy atrybut do każdego istniejącego elementu w "prologowej" strukturze XML. |
| |
| |
| |
Możemy też skorzystać z predykatu | Możemy też skorzystać z predykatu |
<code prolog> | <code prolog> |
zapisz(File). | save(File). |
</code> | </code> |
który zapisze w podanym pliku aktualną "prologową" strukturę XML oraz aktualny stan nadanych id, np. | który zapisze w podanym pliku aktualną "prologową" strukturę XML oraz aktualny stan nadanych id, np. |
<code prolog> | <code prolog> |
zapisz('wiedza.pl'). | save('wiedza.pl'). |
</code> | </code> |
| |