XQPN – kolorowane sieci Petriego do przetwarzania danych

Download Report

Transcript XQPN – kolorowane sieci Petriego do przetwarzania danych

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
2
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
3
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
4
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
5
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
6
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.
7
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.
8
XQPN – łuki i wyrażenia
delete
Łuki wejściowe
output
read
•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
9
XQPN - przykład
let $x := /*/item[./@id>12]
$x
mul
T
store
<store>
<item
<item
<item
<item
<item
</store>
id='7'/>
id='12'/>
id='13'/>
id='21'/>
id='27'/>
out
• 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
10
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
let $x := /*/item[./@id>12]
$x
mul
store
•
•
•
T
out
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
11
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
12
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)
for $y in $x
return <item><id>
{ data($y/@id) }
</id></item>
let $x := /*/item[./@id>12]
1
store
T
out
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
13
XQPN – wyznaczanie wiązania 2
Algorytm wyznaczania wiązania
p-i
let x-j := exp-j
p-j
it2
T
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
r
it1
1. Wykonaj zapytanie exp-i i zapisz wynik w zmiennej
tymczasowej: let $tmp := exp-i,
let x-i := exp-i
...
itk
4. Zastosuj ograniczenie wynikające z krotności do ciągu
$inputset-i i zapisz wynik w zmiennej $inputnodes-i :
x
let $inputnodes-i :=
local:arbitray_select(inputset-i)
n
5. Wyznacz wiązanie zmiennej $xi jako:
let $xi := $inputnodes-i exp-i
14
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.
1
let $users := /users/user
users
$users/login = $fdata/@login and
$users/password = $fdata/@password
$users
let $fdata :=/form/formdata
T
logged
1
form
Często dozory można wyeliminować zastępując je zależnością (bardziej efektywne).
1
users
let $users := /users/user
[./login=$fdata/@login and
./password=$fdata/@password]
$users
let $fdata := /form/formdata
T
logged
1
form
15
XQPN – odpalenie tranzycji
pl-i
pl-j
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>
16
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
17
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
18
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
19
XQPN – zastosowania 2
Model aplikacji wykorzystującej usługi sieciowe
(automatyczna generacja scenariuszy testowych).
Test Data
View
Controller
Model
vgoods
let $ses := //vgoods/@session
let $vitem := //item
1
1
let $ses := //vgoods/@session
let $vitem := //item
1
[$iq>0 and $iq<=$vitem/stock and
$iq<=$item/stock]
let $item := //item[./@id=$vitem/@id]
goods
1
let $iq := //num
return <cartitem>{$ses}
<id>{string($itemid/
@id)}</id>
<quantity>{string($iq)}
</quantity></cartitem>
addToCart return <id>{$ses}</id>
inquantity
session
let $ses := //id
return <vcart
session='{$ses}'>...
vcart
1
cart
*
let $cart := //cartitem[./@session=$ses]
displayCart
let $items := //item[./@id=$cart/id]
*
1
[$iq=0 or $iq>$vitem/stock or
$iq>$item/stock]
let $item := //item[./@id=$vitem/@id]
goods
1
let $iq := //num
addToCartFail
vbuyerror
return <vbuyerror>{$ses} <id>{string($itemid)}</id>
<quantity>{string($iq)}</quantity> {$item/stock}</vbuyerror>
20
XQPN – zastosowania 3
Komponenty systemu do testowania usług sieciowych
XQPN Editor
Test Data
XQPN
Structure
Initial Marking XML
Model
XQPN EXecutor
DB Logger
Transition
Binding
Transition2Web
Mapper
Reached
Marking XML
WebApp
Proxy
(patched)
WebService
BD
Test Driver
Output XML
Comparator
Test Result
XML
DB content
XML
Test Case
Result
DB Logger
21
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
22
XQPN – kolorowane sieci Petriego do przetwarzania danych XML
za pomocą języka XQuery
Dziękuję za uwagę
23