Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_prolog_xml:przyklad [2008/05/28 16:22] miw |
pl:miw:miw08_prolog_xml:przyklad [2008/06/02 19:58] miw |
===== Przykład ===== | |
| |
| |
| |
| |
| |
==== Tworzenie korzenia ==== | |
Korzen dokumentu xml tworzymy wykorzystując predykat: | |
<code prolog> | |
create_root(Name,ID_name). | |
</code> | |
Jako parametry podajemy kolejno: | |
* nazwę korzenia | |
* prefiks id, np. podając **cd**, zostanie stworzony **id=cd_0** gdzie **0** będzie kolejno nadawaną liczbą, startując od zera. | |
| |
Po użyciu tego predykatu pojawi się nam główny element struktury prologowej stanowiący korzeń dokumentu xml. | |
| |
Przykład: | |
<code prolog> | |
?- create_root(hml,hml). | |
| |
Yes | |
?- listing(element). | |
| |
:- dynamic element/3. | |
| |
element(hml, [id=hml_0], []). | |
</code> | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
==== Dodawanie dzieci ==== | |
Dzieci do istniejących rodziców dodaje się za pomocą predykatu: | |
<code prolog> | |
app_child(Parent,P_id,Child,ChildIdName). | |
</code> | |
W predykacie tym jako argumenty podajemy kolejno: | |
* 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 "_" | |
* Nazwa dziecka | |
* prefix nazwy id dziecka; Podając **ala** zostanie stworzony prefik **ala_**, któremu automatycznie zostanie przydzielona kolejna liczba, np. **ala_1**. | |
A więc dodanie dziecka o nazwie **//type_set//** i id **//typ_s//** do rodzica **//hml//** (korzeń) | |
<code prolog> | |
?- app_child(hml,_,type_set,typ_s). | |
</code> | |
Powstaje następująca struktura, korzeń **//hml//** ma na liście dziecko **//type_set//** z id o podanym prefiksie i przydzielonym numerze. | |
<code prolog> | |
element(hml, [id=hml_0], [element(type_set, [id=typ_s_0], [])]). | |
</code> | |
| |
W podobny sposób dodajemy dzieci: | |
* attribute_set <code prolog> ?- app_child(hml,_,attribute_set,att_s). </code> | |
* property_set <code prolog> ?- app_child(hml,_,property_set,prp_s). </code> | |
* tph <code prolog> ?- app_child(hml,_,tph,tph). </code> | |
* ard <code prolog> ?- app_child(hml,_,ard,ard). </code> | |
| |
W celu dodania za jednym razem większej ilości dzieci używamy predykatu pochodnego: | |
<code prolog> | |
app_child(Parent,P_id,Child,ChildIdName,How_much). | |
</code> | |
| |
Jest to przydatne np, podczas dodawania dzieci **//att//** do rodzica **//attribute_set//**. | |
Po użyciu predykatu: | |
<code prolog> | |
app_child(attribute_set,_,att,att,12). | |
</code> | |
zostanie dodanych dwanaście dzieci do rodzica **//attribute_set//**. | |
| |
Podobnie dodajemy: | |
* 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 **//dep//** do rodzica **//ard//** <code prolog> ?- ?- app_child(ard,_,dep,dep,6).</code> | |
| |
Następnie pozostaje tylko dodanie odpowiednich dzieci **//attref//** do odpowiednich rodziców **//property//**. | |
Tu ponownie wykorzystujemy wyżej wymieniany predykat, ale już z podaniem ID rodzica. Przykładowo, po wpisaniu: | |
<code prolog> ?- app_child(property,id=prp_1,attref,att_r,2)</code> | |
dodane zostaną dwoje dzieci **//attref//** do rodzica **//property//** o id **//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. Powstały szkielet bez atrybutów znajduje się [[pl:miw:miw08_prolog_xml:przyklad:p1|tutaj]]. Ostatnią rzeczą będzie dodawanie odpowiednich atrybutów. | |
| |
| |
| |
| |
==== Dodawanie atrybutów ==== | |
Atrybuty do wybranego elementu dodaje się przy użyciu predykatu, | |
<code prolog> | |
add_attribute(Parent,P_id,Attr). | |
</code> | |
gdzie jako argument podajemy kolejno: | |
* nazwę elementu, do którego chcemy dodać atrybut | |
* jego id | |
* atrybut, który chcemy dodać | |
| |
Przykładowo użycie | |
<code prolog> | |
?- add_attribute(att,id=att_0,name=thermostat). | |
</code> | |
spowoduje dodanie atrybutu **//name=thermostat//** do elementu **//att//** o id **//id=att_0//**. | |
| |
W ten sam sposób możemy dodać każdy atrybut do każdego istniejącego elementu w "prologowej" strukturze xml. | |
| |
| |
| |
==== Tworzenie pliku xml ==== | |
| |
Plik xml tworzymy przy użyciu predykatu | |
<code prolog> | |
prolog2xml(File). | |
</code> | |
Po wpisaniu: | |
<code prolog> | |
?- prolog2xml('test.xml'). | |
</code> | |
zostanie utworzony plik xml o nazwie test. | |
| |
Możemy też skorzystać z predykatu | |
<code prolog> | |
zapisz(File). | |
</code> | |
który zapisze w podanym pliku aktualną "prologową" strukturę xml oraz aktualny stan nadanych id, np. | |
<code prolog> | |
zapisz('wiedza.pl'). | |
</code> | |