Piotr Szwed Katedra Automatyki AGH XQPN – kolorowane sieci Petriego do przetwarzania danych XML za pomocą języka XQuery Piotr Szwed Katedra Automatyki AGH
Plan prezentacji Czym są sieci XQPN? Język XQuery Definicja sieci XQPN Wykonanie sieci Prototypowa implementacja Przewidywane zastosowania
Czym są sieci XQPN? Sieci XQPN (XQuery Petri Networks) Kolorowane sieci Petriego pozwalające na wykonywanie operacji na zawartości dokumentów XML przypisanych miejscom sieci. W sieciach XQPN łukom przypisane są wyrażenia – zapytania języka XQuery Motywacje Narzędzie do specyfikacji aplikacji internetowych wykorzystujących usługi sieciowe (web service). Celem jest przeprowadzenie automatycznych testów sterowanych wykonaniem tranzycji w sieci służącej, jako wzorzec
Język XQuery XQuery (ang. XML Query Language) jest językiem zapytań przeznaczonym do ekstrakcji danych z dokumentów XML i baz danych oferujących interfejs XML Prace zapoczątkowano w 2001. W styczniu 2007 język XQuery 1.0 otrzymał oficjalną rekomendację organizacji W3C Wiele implementacji: Saxon, Altova XML Oracle, IBM DB2, Microsoft SQL Server
XQuery - cechy języka Nadzbiór XPath Zapytania XQuery zwracają ciągi wartości atomowych lub znaczników XML (węzłów). Możliwość dodawania znaczników i modyfikacji struktury węzłów (w wynikowej sekwencji) Możliwość łączenia danych z różnych dokumentów Definiowanie zmiennych i funkcji użytkownika Wywoływanie zewnętrznych funkcji
XQuery – elementy składni Instrukcje FLWOR for $x in /bookstore/book where $x/price>30 order by $x/title return $x/title Przypisanie let $y := expression … Instrukcje warunkowe if(condition)then exp1 else exp2
Sieci XQPN - definicja XQPN = (P, T, A, Q, W, G) P – zbiór miejsc, T – zbiór tranzycji, P T = A P T T P zbiór łuków, Q: A Q, funkcja przydzielająca łukom zapytania XQuery, przez Q oznaczony jest zbiór wszystkich zapytań, W: P T (N {*}) (N {*}) funkcja przypisującą łukom wejściowym pary liczb określających krotność łuku. G: T Q jest funkcją przypisującą tranzycjom dozory, czyli zapytania XQuery zwracające wartości logiczne.
Sieci XQPN - znakowanie Znakowaniem sieci XQPN nazywamy funkcję M : P M, która przydziela miejscom dokumenty XML ze zbioru M. Zakładamy, że identyfikatora miejsca p jest też korzeniem dokumentu M(p) przypisanego do miejsca p P Nazwy korzeni dokumentów muszą być unikalne.
XQPN – łuki i wyrażenia Łuki wejściowe Łuki wyjściowe Usuwające węzły XML (delete) Odczytujące węzły XML (read) Wyrażenia: XPath, FLWOR, przypisanie let $x := expression Dopuszczalna jest zależność zmiennych wejściowych (nie cykliczna) Łuki wyjściowe Dodają węzły XML do miejsc wyjściowych Wyrażenia Odwołują się do zmiennych wejściowych Dopuszczalne jest stosowanie instrukcji FLWOR, if-then-else, dodawanie nowych znaczników
XQPN - przykład <store> <item id='7'/> <item id='12'/> <item id='13'/> <item id='21'/> <item id='27'/> </store> Zmiennej lokalnej $x zostanie przypisana sekwencja węzłów spełniająca predykat [./@id>12] Węzły zostaną przeniesione z miejsca store do out
XQPN - krotność Krotność określa liczbę elementów (węzłów), które zostaną odczytane lub usunięte z miejsc wejściowych podczas wykonania tranzycji. Krotność ma postać pary liczb [min,max] lub pojedynczego symbolu (min=max) Dopuszczalny jest symbol * (wszystkie elementy) Tranzycja usunie (odczyta) z sekwencji wejściowej co najmniej min elementów i co najwyżej max elementów Jeżeli sekwencja wejściowa zawiera mniej niż min węzłów, tranzycja nie może zostać wykonana Dla mul = 4 tranzycja jest niedopuszczalna Dla mul = * tranzycja usunie wszystkie elementy spełniające predykat [./@id>12] Dla mul = 1 tranzycja usunie jeden element
XQPN – wykonanie sieci Wykonanie sieci to ciąg odpaleń tranzycji Wykonanie tranzycji: Ustalenie wiązania Faza właściwa – usunięcie znaczników z miejsc wejściowych i dodanie znaczników do miejsc wyjściowych
XQPN – wyznaczanie wiązania 1 Sieci kolorowane CPN Wiązanie to przypisanie wartości do zmiennych w wyrażeniach. Sieci XQPN Zmienne związane przez wyrażenia Zmienne mogą zmieniać wartość w trakcie wykonania (iteracja) Stąd, w sieciach XQPN Wiązania wyznaczane wyłącznie dla zmiennych wejściowych W praktyce: ukrytych zmiennych związanych z łukami wejściowymi Do sekwencji węzłów, która ma zostać przypisana zmiennej stosuje się ograniczenia wynikające z krotności
XQPN – wyznaczanie wiązania 2 Algorytm wyznaczania wiązania 1. Wykonaj zapytanie exp-i i zapisz wynik w zmiennej tymczasowej: let $tmp := exp-i, 2. Wyznacz ciąg węzłów będących bezpośrednimi potomkami korzenia dokumentu przypisanego do miejsca, dla których wejściowe zapytanie zwróciłoby sekwencję $tmp: $inputset-i = local:upcast($tmp) 3. Jeżeli liczba elementów count($inputset-i) nie mieści się w przedziale określonym przez krotność łuku wejściowego – STOP, wiązanie jest niedozwolone 4. Zastosuj ograniczenie wynikające z krotności do ciągu $inputset-i i zapisz wynik w zmiennej $inputnodes-i : let $inputnodes-i := local:arbitray_select(inputset-i) 5. Wyznacz wiązanie zmiennej $xi jako: let $xi := $inputnodes-i exp-i
XQPN – dozory tranzycji Dozory są zapytaniami XQuery zwracającymi wartości logiczne. Są przypisane bezpośrednio tranzycjom. Dozory decydują o dopuszczalności tranzycji dla danego wiązania zmiennych łuków wejściowych. Często dozory można wyeliminować zastępując je zależnością (bardziej efektywne).
XQPN – odpalenie tranzycji Odpalenie tranzycji polega na uaktualnieniu zawartości danych w miejscach wejściowych i wyjściowych. Dla miejsc wejściowych return <pl-i>{/pl-i/* except $inputnodes-i}</pl-i> Dla miejsc wyjściowych obliczana jest wyjściowa sekwencja węzłów $outputnodes-j na podstawie wyrażenia przypisanego łukowi wyjściowemu return <pl-j>{/pl-j/* union $outputnodes-j}</pl-j>
XQPN – implementacja 1 Decyzje projektowe Które elementy algorytmu wykonania tranzycji mają być implementowane w środowisku XQuery, a które poza nim? Konieczność przeformułowania zapytań – dla zapewnienia zgodności ze specyfikacją sieci i poprawy efektywności Rozmiar dokumentów XML podlegających przetwarzaniu – bazy danych czy kilka elementów Dobór komponentu odpowiedzialnego za wykonanie zapytań XQuery
XQPN – implementacja 2 Dwie prototypowe implementacje Altova XML – interfejs COM, platforma .NET, C # Wydajny dla małych zbiorów danych Ciasny interfejs COM Manipulacje poza XQuery poprzez DOM Saxon-B – interfejs XQJ, platforma Java Mniej wydajny dla niewielkich dokumentów, bardziej wydajny dla dokumentów >10000 węzłów Łatwość manipulacji poza środowiskiem XQuery
XQPN – przewidywane zastosowania Automatyczna generacja przypadków testowych dla aplikacji wykorzystujących usługi sieciowe (web service) Pasywne testy aplikacji internetowych Generacja szkieletu aplikacji na podstawie modelu XQPN
XQPN – zastosowania 2 Model aplikacji wykorzystującej usługi sieciowe (automatyczna generacja scenariuszy testowych).
XQPN – zastosowania 3 Komponenty systemu do testowania usług sieciowych
Podsumowanie Sieci XQPN są proponowane jako narzędzie specyfikacji aplikacji wykorzystujących XML jako wewnętrzny format wymiany danych Miejsca sieci przechowują dokumenty XML (reprezentujące dane formularzy, rekordy bazy danych, itp.) Składnia wyrażeń przypisanych łukom jest zgodna z językiem XQuery W implementacjach do wykonania tranzycji używane są gotowe procesory XQuery
XQPN – kolorowane sieci Petriego do przetwarzania danych XML za pomocą języka XQuery Dziękuję za uwagę