Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
Nowa wersja
Both sides next revision
|
pl:miw:miw08_prolog_xml:przyklad [2008/05/25 23:40] miw |
pl:miw:miw08_prolog_xml:przyklad [2008/06/02 00:08] miw |
===== Przykład ===== | ===== Przykład ===== |
| |
| |
| |
| |
| |
Korzen dokumentu xml tworzymy wykorzystując predykat: | Korzen dokumentu xml tworzymy wykorzystując predykat: |
<code prolog> | <code prolog> |
create_root(hml). | create_root(Name,ID_name). |
</code> | </code> |
Po jego użyciu pojawi się nam główny element struktury prologowej stanowiący korzeń dokumentu xml. | 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> | <code prolog> |
3 ?- listing(element). | ?- create_root(hml,hml). |
| |
| Yes |
| ?- listing(element). |
| |
:- dynamic element/3. | :- dynamic element/3. |
element(hml, [id=hml_0], []). | element(hml, [id=hml_0], []). |
</code> | </code> |
| |
| |
| |
| |
| |
| |
| |
Dzieci do istniejących rodziców dodaje się za pomocą predykatu: | Dzieci do istniejących rodziców dodaje się za pomocą predykatu: |
<code prolog> | <code prolog> |
app_child(Parent,P_id,Child). | app_child(Parent,P_id,Child,ChildIdName). |
</code> | </code> |
W predykacie tym jako argumenty podajemy kolejno: | W predykacie tym jako argumenty podajemy kolejno: |
* 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 "_" | * 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 | * Nazwa dziecka |
Id dziecka zostanie nadane automatycznie. | * 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//** do rodzica **//hml//** (korzeń) | A więc dodanie dziecka o nazwie **//type_set//** i id **//typ_s//** do rodzica **//hml//** (korzeń) |
<code prolog> | <code prolog> |
4 ?- app_child(hml,_,type_set). | ?- app_child(hml,_,type_set,typ_s). |
</code> | </code> |
Powstaje następująca struktura, korzeń **//hml//** ma na liście dziecko **//type_set//** o automatycznie nadanym id. | Powstaje następująca struktura, korzeń **//hml//** ma na liście dziecko **//type_set//** z id o podanym prefiksie i przydzielonym numerze. |
<code prolog> | <code prolog> |
element(hml, [id=hml_0], [element(type_set, [id=typ_s_0], [])]). | element(hml, [id=hml_0], [element(type_set, [id=typ_s_0], [])]). |
| |
W podobny sposób dodajemy dzieci: | W podobny sposób dodajemy dzieci: |
* attribute_set <code prolog> ?- app_child(hml,_,attribute_set). </code> | * attribute_set <code prolog> ?- app_child(hml,_,attribute_set,att_s). </code> |
* property_set <code prolog> ?- app_child(hml,_,property_set). </code> | * property_set <code prolog> ?- app_child(hml,_,property_set,prp_s). </code> |
* tph <code prolog> ?- app_child(hml,_,tph). </code> | * tph <code prolog> ?- app_child(hml,_,tph,tph). </code> |
* ard <code prolog> ?- app_child(hml,_,ard). </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: | 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,How_much). | app_child(Parent,P_id,Child,ChildIdName,How_much). |
</code> | </code> |
| |
Po użyciu predykatu: | Po użyciu predykatu: |
<code prolog> | <code prolog> |
app_child(attribute_set,_,att,12). | app_child(attribute_set,_,att,att,12). |
</code> | </code> |
zostanie dodanych dwanaście dzieci do rodzica **//attribute_set//**. | zostanie dodanych dwanaście dzieci do rodzica **//attribute_set//**. |
| |
Podobnie dodajemy: | Podobnie dodajemy: |
* dzieci **//property//** do rodzica **//property_set//** <code prolog> ?- app_child(property_set,_,property,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,17).</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,6).</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//**. | 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: | 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,2)</code> | <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//**. | dodane zostaną dwoje dzieci **//attref//** do rodzica **//property//** o id **//id=prp_1//**. |
| |
| :!::!:UWAGA:!::!: |
| |
| 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. Powstały szkielet bez atrybutów znajduje się [[pl:miw:miw08_prolog_xml:przyklad:p1|tutaj]]. 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. 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 ==== | ==== 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ć |
| |
| :!::!:UWAGA:!::!: |
| |
| 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//** |
| |
| 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 ==== | ==== 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> |