Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw2008_xtt_xmlpro [2008/06/03 18:41]
miw
pl:miw:miw2008_xtt_xmlpro [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Maksymilian Imioło ​   <​maximiolo@o2.pl>​ Maksymilian Imioło ​   <​maximiolo@o2.pl>​
  
Linia 5: Linia 7:
 Translacja XTTML do innych formatów z użyciem Prologu. Translacja XTTML do innych formatów z użyciem Prologu.
  
-====== Spotkania ====== 
-===== 08.03.04 ===== 
-  * parsowanie xml w prologu 
-  * obsługa XSD w prologu 
-  * poczytac: graphviz, RIF 
  
  
  
-===== 080318 ===== 
-  * poczytać... 
  
-===== 080408 ===== 
-  * translacja [[hekate:​hekate_markup_language|HML/​ARDML]] (produkowanego przez [[hekate:​VARDA]]) 
-  * przykład z [[hekate:​hekate_case_thermostat]] therm jako p. odn.  
-  * podejście: 
-    - mamy plik ARDML z Vardy (axg.) 
-    - parsujemy go w prologu 
-    - generujemy bazę wiedzy prologową dla VARDA (ard_att/1, ard_property/​1,​ ard_depend/​2,​ ard_hist/2) (assert(ard_att('​Thermostat'​))) (czyli to, co dostaniemy po listing(ard_depend),​listing(ard_attribute),​listing(ard_property),​listing(ard_hist).) 
-    - generujemy odpowiadający mu plik DOT 
  
-http://​www.swi-prolog.org/​packages/​sgml2pl.html +====== Spotkania====== 
-load_xml_file(+File,​ -ListOfContent)+ 
 +[[pl:miw:​miw2008_xtt_xmlpro:​spotkania|Spotkania]] 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
  
-np: 
-  <att name="​Thermostat"/>​ -> assert(ard_att('​Thermostat'​)). 
  
  
  
-===== 080415 ===== 
-  * parsowanie listy 
  
-===== 080422 ===== 
-  * generowanie prologu 
  
  
  
  
-===== 080603 ===== 
-  * testy kodu dla varda, po ang, upload do wiki 
-  * [[pl:​miw:​miw08_xtt_rif|XTT i RIF]] 
-===== 080610 ===== 
-  * sprawozd 
  
 ====== Projekt ====== ====== Projekt ======
Linia 363: Linia 355:
  
 Plik do parsowania: {{:​pl:​miw:​ard-vardy.xml|:​pl:​miw:​ard-vardy.xml}} Plik do parsowania: {{:​pl:​miw:​ard-vardy.xml|:​pl:​miw:​ard-vardy.xml}}
 +
 +
 +
 +
 +
 +
 +
  
  
Linia 374: Linia 373:
  
 Translator można uruchomić na kilka sposobów: Translator można uruchomić na kilka sposobów:
-  ​+===1=== 
 Załadować plik źródłowy i wpisać : translate('​Source.xml','​Destination.xml'​). ​ Załadować plik źródłowy i wpisać : translate('​Source.xml','​Destination.xml'​). ​
 Otrzymamy wydruk na ekranie monitora oraz, zapis do wskazanego pliku. Otrzymamy wydruk na ekranie monitora oraz, zapis do wskazanego pliku.
-  ​+======
  ​Załadować plik źródłowy i wpisać : translate('​Source.xml'​).  ​Załadować plik źródłowy i wpisać : translate('​Source.xml'​).
 Otrzymamy wydruk na ekranie monitora, jeśli będziemy chcieli zapisać do pliku to należy Otrzymamy wydruk na ekranie monitora, jeśli będziemy chcieli zapisać do pliku to należy
 wpisać: save('​Destination.xml'​). wpisać: save('​Destination.xml'​).
-  ​+===  ​===
  ​Można połączyć translator bezpośrednio z vardą umieszczając odpowiedni wpis w pliku "​VARDA.pl",​  ​Można połączyć translator bezpośrednio z vardą umieszczając odpowiedni wpis w pliku "​VARDA.pl",​
 ":​-ensure_loaded('​varda_pl2xml'​).",​ dzięki temu no załadowaniu vardy i wygenerowaniu pliku przy pomocy axg, ":​-ensure_loaded('​varda_pl2xml'​).",​ dzięki temu no załadowaniu vardy i wygenerowaniu pliku przy pomocy axg,
Linia 390: Linia 389:
 Poniżej znajdujesię kod translatora. Poniżej znajdujesię kod translatora.
 <code prolog> <code prolog>
 +%%%%%%%%%%%%%%%%%%%%% Load %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
 +translate(Source,​Dest):​-
 +load_structure(Source,​X,​[space(remove),​dialect(xml)]),​ %załadowanie pliku
 +Z=..X,​assertz(Z),​element(hml,​_,​A),​ %wyciągnięcie elementu hml
 +checkAtt(A),​ %analiza elementu "​attribute_set"​
 +checkProperty(A),​ %analiza elementu "​property_set"​
 +checkHistory(A),​ %analiza elementu "​tph"​
 +checkDepend(A),​ %analiza elementu "​ard"​
 +show, % wyświetlenie wyników
 +save(Dest). %zapis wyniku
  
-%%%%%%%%%%%%%%%%%%%%% Load%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
-translate(Source,​Dest):​-  
- load_structure(Source,​X,​[space(remove),​dialect(xml)]),​Z=..X,​assertz(Z),​element(hml,​_,​A),​ 
- checkAtt(A),​checkProperty(A),​checkHistory(A),​checkDepend(A),​show,​save(Dest). 
  
 translate(Source):​- translate(Source):​-
Linia 405: Linia 410:
  listing(ard_att),​listing(ard_property),​listing(ard_hist),​listing(ard_depend).  listing(ard_att),​listing(ard_property),​listing(ard_hist),​listing(ard_depend).
   
-%%%%%%%%%%%%%%%%%%%%%%%%%%% ​Zapis%%%%%%%%%%%%%%%%%%%%%%+%%%%%%%%%%%%%%%%%%%%%%%%%%% ​Save to file %%%%%%%%%%%%%%%%%%%%%%
 save(Dest):​- save(Dest):​-
  tell(Dest),​write('<?​xml version="​1.0"​ encoding="​utf-8"?>'​),​  tell(Dest),​write('<?​xml version="​1.0"​ encoding="​utf-8"?>'​),​
Linia 412: Linia 417:
   
 %%%%%%%%%%%%%%%%%%%%% Attribute_set%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% Attribute_set%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
 +
 checkAtt(A):​- ​ checkAtt(A):​- ​
- include(element(attribute_set,​_,​L),A), + include(element(attribute_set,​_,​Li),A), % sprawdzanie istnienia elementu 
- leng(L,​Dl1),​assert(viewList(List)),showAtt(L,Dl1,0).%,​viewList(List),​write(List).+ leng(Li,​Dl1), ​% wylicznie dlugości listy 
 + assert(viewList(_)), % deklarowanie pamięci 
 + showAtt(Li,​Dl1,​0). ​ 
  
-showAtt(L,0,Dl).+showAtt(_,0,_).
 showAtt(L,​D1,​Dl):​- showAtt(L,​D1,​Dl):​-
  D1>0,  D1>0,
  NewDlu is D1-1,  NewDlu is D1-1,
- deleteOne(Dl,​L,​element(att,​[name=ZX,​id=ID,_,_],[]))+ deleteOne(Dl,​L,​element(att,​[name=ZX,​_,​_,​_],​[])),​
- string_length(ID,​LENG),​ +
- LEE is LENG-4,+
  assert(memory(ZX)),​  assert(memory(ZX)),​
- memory(ZX), + memory(ZX),​  
- sub_string(ID,​4,​LEE,​_,​WY), + assert(ard_att(ZX)),​
- assert(ard_att(ZX)),​%nalezy(C,​W),+
  viewList(LisGlob),​add(LisGlob,​ZX,​LisGlob2),​  viewList(LisGlob),​add(LisGlob,​ZX,​LisGlob2),​
  retractall(viewList(_)),​  retractall(viewList(_)),​
Linia 434: Linia 441:
  showAtt(L,​NewDlu,​DlNew).  showAtt(L,​NewDlu,​DlNew).
  
-%%%%%%%%%%%%%%%%%%%%% Property_set%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+%%%%%%%%%%%%%%%%%%%%% Property_set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 checkProperty(A):​- ​ checkProperty(A):​- ​
- include(element(property_set,​_,​L2),A), + include(element(property_set,​_,​L),A), 
- leng(L2,D2), + leng(L,D), 
- assert(view(ListaGl)), + assert(view(_)), 
- showProp(L2,D2,0).+ showProp(L,D,0).
  
-showProp(L2,0,Dl2).+showProp(_,0,_).
 showProp(L2,​D2,​Dl2):​- showProp(L2,​D2,​Dl2):​-
  D2>0,  D2>0,
Linia 455: Linia 462:
  showProp(L2,​NewDlu2,​DlNew2).  showProp(L2,​NewDlu2,​DlNew2).
  
-writeProp(0,​L,Lista).+writeProp(0,​_,_).
 writeProp(CA,​[J1|L1],​Lel):​- writeProp(CA,​[J1|L1],​Lel):​-
  CA>0,  CA>0,
Linia 476: Linia 483:
  viewList(All),​  viewList(All),​
  NWyj is Wyj+1,  NWyj is Wyj+1,
- showName(All,​NWyj,​Name).%,​write(Name).+ showName(All,​NWyj,​Name).
  
 showName(All,​1,​Name):​- showName(All,​1,​Name):​-
Linia 484: Linia 491:
  deleteOne(Wyj-1,​All,​Name).  deleteOne(Wyj-1,​All,​Name).
  
-%%%%%%%%%%%%%%%%%%%%% Hist_set%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+%%%%%%%%%%%%%%%%%%%%% Hist_set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 checkHistory(A):​- ​ checkHistory(A):​- ​
  include(element(tph,​_,​L1),​A),​  include(element(tph,​_,​L1),​A),​
  leng(L1,​D1),​showlHist(L1,​D1,​0).  leng(L1,​D1),​showlHist(L1,​D1,​0).
  
-showlHist(L1,0,Dl).+showlHist(_,0,_).
 showlHist(L1,​D1,​Dl):​- showlHist(L1,​D1,​Dl):​-
  D1>0,  D1>0,
Linia 504: Linia 511:
  showlHist(L1,​NewDlu,​DlNew).  showlHist(L1,​NewDlu,​DlNew).
  
-%%%%%%%%%%%%%% ​pobrac ​src i dest%%%%%%%%%%+%%%%%%%%%%%%%% ​Get src i des t%%%%%%%%%%
 checkHist(Zr,​De,​Zrod,​Dest):​- ​ checkHist(Zr,​De,​Zrod,​Dest):​- ​
  atom_number(Zr,​Zrr),​  atom_number(Zr,​Zrr),​
Linia 520: Linia 527:
  deleteOne(Position-1,​All,​Output).  deleteOne(Position-1,​All,​Output).
  
-%%%%%%%%%%%%%%%%%%%%% Depend_set%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+%%%%%%%%%%%%%%%%%%%%% Depend_set %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 checkDepend(A):​- ​ checkDepend(A):​- ​
  include(element(ard,​_,​LisDep),​A),​  include(element(ard,​_,​LisDep),​A),​
  leng(LisDep,​DlDep),​wyswietlDepe(LisDep,​DlDep,​0).  leng(LisDep,​DlDep),​wyswietlDepe(LisDep,​DlDep,​0).
  
-wyswietlDepe(L1,0,Dl).+wyswietlDepe(_,0,_).
 wyswietlDepe(L1,​D1,​Dl):​- wyswietlDepe(L1,​D1,​Dl):​-
  D1>0,  D1>0,
Linia 540: Linia 547:
  wyswietlDepe(L1,​NewDlu,​DlNew).  wyswietlDepe(L1,​NewDlu,​DlNew).
  
-%%%%%%%%%%%%%% ​pobrac ​independent i dependent%%%%%%%%%%%%%%+%%%%%%%%%%%%%% ​Get independent i dependent %%%%%%%%%%%%%%
 checkDep(In,​De,​InOut,​DeOut):​- ​ checkDep(In,​De,​InOut,​DeOut):​- ​
  atom_number(In,​Inn),​  atom_number(In,​Inn),​
Linia 556: Linia 563:
  deleteOne(Position-1,​All,​Output).  deleteOne(Position-1,​All,​Output).
  
-%%%%%%%%%%%%%%%%%%%%%%%%%%%  ​Pozostałe ​%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%  ​Others ​%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 +% sprawdzanie istnienia elementów w liście
 include(X,​[X|_]). include(X,​[X|_]).
 include(X,​[_|Tail]) :- include(X,​[_|Tail]) :-
- include(X,​Tail). +include(X,​Tail). 
 +% obliczanie długości listy
 leng([],0). leng([],0).
 leng([_|Tail],​Dlug) :- leng([_|Tail],​Dlug) :-
- leng(Tail,​X),​ +leng(Tail,​X),​ 
- Dlug is X+1. +Dlug is X+1. 
 +% wyciąganie konkretnego elementu listy
 deleteOne(0,​[F|_],​F). deleteOne(0,​[F|_],​F).
 deleteOne(Poz,​[_|Xx],​W):​- deleteOne(Poz,​[_|Xx],​W):​-
- Poz>0, +Poz>0, 
- PozNew is Poz-1, +PozNew is Poz-1, 
- deleteOne(PozNew,​Xx,​W).+deleteOne(PozNew,​Xx,​W).
  
 +% dodanie do listy
 add([],​X,​[X]). add([],​X,​[X]).
 add([G|O],​X,​[G|R]):​- add([G|O],​X,​[G|R]):​-
- add(O,X,R).+add(O,X,R). 
 + 
  
  
Linia 584: Linia 594:
  
 {{:​pl:​miw:​varda_pl2xml.pl|Translator}} ​  ​{{:​pl:​miw:​input.xml|Plik wejściowy}} ​ {{:​pl:​miw:​out.pl|Plik wyjściowy}} {{:​pl:​miw:​varda_pl2xml.pl|Translator}} ​  ​{{:​pl:​miw:​input.xml|Plik wejściowy}} ​ {{:​pl:​miw:​out.pl|Plik wyjściowy}}
 +
 +
 +Dla potrzeb wyświetlenia wyników plik wyjściowy został powyżej dołączony z rozszerzeniem pl.
 +
 +
 +
 +
 +
 +
  
  
 ====Napotkane problemy==== ====Napotkane problemy====
 +===Usunięcie białych znaków===
 W pliku mamy znaczniki nowej lini np:​('​\n','​\n ​   ','​\n ​ ') bez ich usunięcia nie można dotrzeć do wnętrza pliku. W pliku mamy znaczniki nowej lini np:​('​\n','​\n ​   ','​\n ​ ') bez ich usunięcia nie można dotrzeć do wnętrza pliku.
 Korzystajac z "​usun"​ Korzystajac z "​usun"​
Linia 609: Linia 629:
 </​code>​ </​code>​
  
-Zapis:+ 
 +===Sprawdzanie długości stringów=== 
 +W porównaniu z Varda w wersji 0, należało znależć i zastosować odpowiednie predykatystring_lenht/​2 oraz sub_string/​4.
 <code prolog> <code prolog>
-tell('​ardII.xml'​),write('<?xml version="1.0" encoding="​utf-8"?>')+string_length(Bb,L), 
-listing(ard_att),listing(ard_property),​ + LEEE is L-4, 
-listing(ard_hist),listing(ard_depend),told.+ sub_string(Bb,​4,​LEEE,​_,​WYJ),​ 
 +</code> 
 +===Rzutowanie z stringa na inta=== 
 +<code prolog>​ 
 +atom_number(Zr,​Zrr) 
 +</​code>​ 
 +===Wyciąganie konkretnego elementu z listy=== 
 +Wyciąganie odpowiednich elementów z listy wykonywałem poniższym predykatem. 
 +<code prolog>​ 
 +deleteOne(0,​[F|_],​F). 
 +deleteOne(Poz,​[_|Xx],​W):​- 
 + Poz>0
 + PozNew is Poz-1, 
 + deleteOne(PozNew,Xx,W)
 +</​code>​ 
 +===Przechowywanie listy w pamięci=== 
 +W pamięciu przechowwane sa wszystkie atrybuty. 
 +<code prolog>​ 
 +writeProp(CA,C,​[]),​memoryList(Lista),​assert(ard_property(Lista)), 
 + view(ListaGlob),add(ListaGlob,​Lista,​ListaGlob2), 
 + retractall(view(_)),​ 
 + assert(view(ListaGlob2)),​ 
 + retractall(memoryList(_)),​ 
 +</​code>​ 
 +===Podczas kompilacji=== 
 +Podczas kompilacji otrzymuję komunikat, który jednak nie ma wpływu na otrzymany wynik translacji. 
 +<code prolog>​ 
 +ERROR: SGML2PL(xml):​ input.xml:​2:​ file "​.\hml.dtd"​ does not exist 
 +</​code>​ 
 +Błąd ten dotyczy linijki, która pojawiła sie w wersji 1 Vardy. 
 +<code prolog>​ 
 +<​!DOCTYPE hml SYSTEM "​hml.dtd">​ 
 </​code>​ </​code>​
  
pl/miw/miw2008_xtt_xmlpro.1212511272.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (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