Thread View: pl.comp.xml
11 messages
11 total messages
Started by pbk++
Fri, 28 Mar 2008 08:10
Przetwarzanie annotation + nieformalne reguly
Author: pbk++
Date: Fri, 28 Mar 2008 08:10
Date: Fri, 28 Mar 2008 08:10
40 lines
2413 bytes
2413 bytes
Witam szanownych kolegów i proszę o pomoc.
Dostałem zadanie polegające na napisaniu klas obsługujących dokument
XML. Dokument ten powinienem walidować za pomocą zadanej schemy. I to
już zrobiłem. Niestety powinienem reagować na zawarte w schemie
nieformalne, z punktu widzenia składni xml, reguły walidacyjne, tzn.
uruchamiać dodatkową kontrolę zawartości merytorycznej dokumentu
niezależnie od formalnej zgodności xml'a z definicją.
Reguły te są zapisane w elementach <xs:annotation><xs:documentaction> w
schemie, przykład:
<xs:attribute name="Typ" use="required">
<xs:annotation>
<xs:documentation source="list">15</xs:documentation>
<xs:documentation source="rule">R39, R40</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
Znaczenie reguł jest dane słowno-muzycznie, np.
R39 - JEŚLI /SAD/Zgloszenie/Rodzaj/@PodTyp = "C" WTEDY
/SAD/Zgloszenie/Rodzaj/@Typ ="H"
R40 - JEŚLI /SAD/Zgloszenie/Rodzaj/@PodTyp = "D" WTEDY
/SAD/Zgloszenie/Rodzaj/@Typ ="A"
Oczywiście występują reguły bardziej złożone.
I tutaj dochodzimy do sedna mojego problemu. Nie wiem jak uruchamiać
walidację po tych dodatkowych regułach. Czy powinienem na wstępie
wyszukać w schemie wszystkie nieformalne reguły i potem przechodzić
przez DOM i kolejno walidować? A może jest jakaś inna, lepsza metoda?
Jeśli ktoś mógłby mnie naprowadzić to byłoby fajnie.
--
Piotrek
Re: Przetwarzanie annotation + nieformalne reguly
Author: pbk++
Date: Fri, 28 Mar 2008 08:13
Date: Fri, 28 Mar 2008 08:13
6 lines
1057 bytes
1057 bytes
Zapomniałem napisać, że używam xerces'a. Wciąż waham się czy lepsza będzie analiza xml za pomocą DOM'a czy SAX'a. -- Piotrek
Re: Przetwarzanie annotation + nieformalne reguly
Author: szomiz
Date: Fri, 28 Mar 2008 09:23
Date: Fri, 28 Mar 2008 09:23
19 lines
1876 bytes
1876 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości news:fsi9nr$g1g$2@nemesis.news.neostrada.pl... Zapomniałem napisać, że używam xerces'a. > Wciąż waham się czy lepsza będzie analiza xml za pomocą DOM'a czy SAX'a. Jezeli masz zaleznosci miedzy polami (a masz...) to SAX'em sie albo zajedziesz, albo stworzysz wlasna (ergo kulawa) namiastke DOM'a. Po drugie ani jedno ani drugie nie bedzie szybkie. No chyba, ze chodzi o prace z pojedynczymi dokumentami. Ja temat _tych_ dokumentow znam od strony przyjmowania, a tam wydajnosc miala, oj miala, znaczenie. Transformacja bedzie najszybsza. A swoja droga: kto ma budzet, zeby wejsc na _ten_ rynek? Bo tort zostal podzielony jeszcze przed wejsciem do UE... sz.
Re: Przetwarzanie annotation + nieformalne reguly
Author: pbk++
Date: Fri, 28 Mar 2008 10:35
Date: Fri, 28 Mar 2008 10:35
58 lines
3040 bytes
3040 bytes
szomiz pisze:
> Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości
> news:fsi9nr$g1g$2@nemesis.news.neostrada.pl...
> Zapomniałem napisać, że używam xerces'a.
>
>
> Jezeli masz zaleznosci miedzy polami (a masz...) to SAX'em sie albo
> zajedziesz, albo stworzysz wlasna (ergo kulawa) namiastke DOM'a.
Tak myślałem, implementację mam opartą na DOM'ie.
> Po drugie ani jedno ani drugie nie bedzie szybkie. No chyba, ze chodzi o
> prace z pojedynczymi dokumentami. Ja temat _tych_ dokumentow znam od strony
> przyjmowania, a tam wydajnosc miala, oj miala, znaczenie.
Pojedyncze dokumenty. Walidacja przed wysłaniem na 'Twoją stronę'.
> Transformacja bedzie najszybsza.
Czyli proponujesz najpierw formalną walidację dokumentu, potem zaś XSLT.
Ale widzisz nadal nie umiem uruchomić dodatkowej kontroli na poziomie
dokumentu. Zadanie mam postawione w ten sposób, że to parser ma sam
wyzwolić sprawdzenie odpowiedniej reguły (zaszytej jako metoda i
dokładnie wiedzącej co ma robić, metoda ta może, jak sugerujesz
korzystać z XSLT, lub przeglądać zawartość dokumentu).
Uruchamianie reguł nieformalnych można sprecyzować jako wywołanie
jakiejś konkretnej funkcji np. CheckInformalRule() z parametrami jak
nazwa reguły (literał), wskaźnik na element (DOMNode), funcja ta jest
rozdzielnikiem wołającym metody obsługujące funkcje obsługi
poszczególnych reguł, np.
bool CheckInformalRule( DOMNode *Node, std::string RuleCode)
{
if ( RuleCode == std::string("R11"))
return CheckR11();
else if ( ....)
else
return false;
}
Mój problem jest więc taki: jak powiązać analizowany element DOM z
adnotacją zaszytą w definicji elementu w schemie.
Teraz pytanie wynika z braku wiedzy o Xalanie ;-)
>
> A swoja droga: kto ma budzet, zeby wejsc na _ten_ rynek? Bo tort zostal
> podzielony jeszcze przed wejsciem do UE...
Ten kto produkuje programy współpracujące w Celiną
;-)
--
Piotrek
Re: Przetwarzanie annotation + nieformalne reguly
Author: szomiz
Date: Fri, 28 Mar 2008 11:44
Date: Fri, 28 Mar 2008 11:44
79 lines
4555 bytes
4555 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości news:fsii1r$6nt$1@nemesis.news.neostrada.pl... >> Po drugie ani jedno ani drugie nie bedzie szybkie. No chyba, ze chodzi o >> prace z pojedynczymi dokumentami. Ja temat _tych_ dokumentow znam od >> strony przyjmowania, a tam wydajnosc miala, oj miala, znaczenie. > Pojedyncze dokumenty. Walidacja przed wysłaniem na 'Twoją stronę'. Nie moja. Ja tam tylko dwa drobiazgi, z ktorych jeden (zwiazany z walidacja) byl dostepny do niedawna na stronach MF w zrodlach. >> Transformacja bedzie najszybsza. > Czyli proponujesz najpierw formalną walidację dokumentu, potem zaś XSLT. Wiecej, proponuje nawet formalna walidacje przy pomocy xslt. > Ale widzisz nadal nie umiem uruchomić dodatkowej kontroli na poziomie Poniewaz pozwala ona na precyzyjne okreslenie co, gdzie i dlaczego jest zle w dowolnym momencie. A "schemowanie" (nawet przy dostepie do wszystkich bledow, a nie pierwszego napotkanego) jest praktycznie nie do powiazania z operacja wykonana na dokumencie. > dokumentu. Zadanie mam postawione w ten sposób, że to parser ma sam Jezeli to zadanie biznesowe - troche sie pomeczysz. Jezeli naukowe mozna sprobowac dotrzec do osoby, ktora te reguly opracowuje. > wyzwolić sprawdzenie odpowiedniej reguły (zaszytej jako metoda i dokładnie > wiedzącej co ma robić, metoda ta może, jak sugerujesz I to jest bardzo takie sobie podejscie do zagadnienia. Przeciez te reguly podawane sa w spojny i niezmieniajacy sie od lat sposob (w wykorzystaniem z xPath'a nawiasem mowiac). > Uruchamianie reguł nieformalnych można sprecyzować jako wywołanie One sa formalne ;-) > jakiejś konkretnej funkcji np. CheckInformalRule() z parametrami jak nazwa > reguły (literał), wskaźnik na element (DOMNode), funcja ta jest > rozdzielnikiem wołającym metody obsługujące funkcje obsługi poszczególnych > reguł, np. W schemie masz informacje o regule. Trzeba trzymajac za ogon wezel znalezc jego definicje w xsd i stamtad wypuscic sprawdzanie. Z tym, ze niekoniecznie osobne dla kazdego R*. One przeciez sprowadzaja sie do ograniczonej kombinacji ograniczonej liczby operacji. > Mój problem jest więc taki: jak powiązać analizowany element DOM z > adnotacją zaszytą w definicji elementu w schemie. A to akurat jest bardzo proste. Schema musi jednoznacznie okreslac dokument. Metoda brute-force: isc od "gory" dokumentu znajdujac kolejne xs:element z wlasciwym dla poziomu name. Metoda wydajna: znalezc wszystkie xs:element z name jak analizowanego wezla, a nastepnie odrzucac te, ktorych nazwy (kolejnych) parentow w dokumencie i w schemie sie nie zgadzaja. >> A swoja droga: kto ma budzet, zeby wejsc na _ten_ rynek? Bo tort zostal >> podzielony jeszcze przed wejsciem do UE... > Ten kto produkuje programy współpracujące w Celiną Wiele firm produkuje, wiele firm produkowalo w momencie uruchomienia systemu. I dej Boze, zeby wszystkie projekty z elektroniczna wymiana dokumentow zakladaly takie odstepy czasowe od opublikowania schem (przemyslanych do szczegolu, choc pisanych w sposob, za ktorym nie przepadam) i wymagan (jak siadzesz kiedys do deklaracji podatkowych zatesknisz za konsekwencja i oszczednoscia z SAD'wo) do czasu obowiazku i ich korzystania. sz.
Re: Przetwarzanie annotation + nieformalne reguly
Author: pbk++
Date: Fri, 28 Mar 2008 12:20
Date: Fri, 28 Mar 2008 12:20
16 lines
1656 bytes
1656 bytes
szomiz pisze: >> Czyli proponujesz najpierw formalną walidację dokumentu, potem zaś XSLT. > > Wiecej, proponuje nawet formalna walidacje przy pomocy xslt. > Chcę dobrze zrozumieć. Proponujesz PEŁNĄ walidację (wraz z regułami typu R13, RW33, itd.) wykonać za pomocą XSLT? Jest to wykonalne? Bez pisania żadnego dodatkowego kodu walidującego w C++? Wybacz pytanie, ale nie jestem XMLGuru ;-) i nie znam jego możliwości (jeśli odpowiesz TAK, to będę musiał je poznać :-) ) -- Pozdrawiam Piotrek
Re: Przetwarzanie annotation + nieformalne reguly
Author: szomiz
Date: Fri, 28 Mar 2008 12:41
Date: Fri, 28 Mar 2008 12:41
22 lines
2207 bytes
2207 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości news:fsins1$ovo$1@atlantis.news.neostrada.pl... > Chcę dobrze zrozumieć. Proponujesz PEŁNĄ walidację (wraz z regułami typu > R13, RW33, itd.) wykonać za pomocą XSLT? Jest to wykonalne? Bez pisania Jest wykonalne. I o tyle urocze, ze przy zmianie schemy/regul w 95% bedzie dzialalo dalej dobrze, a te 5% zalatwi sie zmodyfikowaniem transformacji. > żadnego dodatkowego kodu walidującego w C++? No nie, tak calkiem to nie. Niektore podstawowe operacje bedzie warto / bedzie trzeba wyciagnac na zewnatrz (np. na datach nie da sie sensownie w transformacji pracowac). Ale tego po pierwsze nie bedzie duzo, a po drugie raczej nie bedzie sie to zmieniac przy zmianie schemy/regul (wiec nie ruszasz binariow!). Juz przez oszczednosci na procesie testowania wersji po zmianie wymagan warto rozwazyc takie opcje. sz.
Re: Przetwarzanie annotation + nieformalne reguly
Author: pbk++
Date: Fri, 28 Mar 2008 13:07
Date: Fri, 28 Mar 2008 13:07
38 lines
2681 bytes
2681 bytes
szomiz pisze: > Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości > news:fsins1$ovo$1@atlantis.news.neostrada.pl... > >> Chcę dobrze zrozumieć. Proponujesz PEŁNĄ walidację (wraz z regułami typu >> R13, RW33, itd.) wykonać za pomocą XSLT? Jest to wykonalne? Bez pisania > > Jest wykonalne. I o tyle urocze, ze przy zmianie schemy/regul w 95% bedzie > dzialalo dalej dobrze, a te 5% zalatwi sie zmodyfikowaniem transformacji. > >> żadnego dodatkowego kodu walidującego w C++? > > No nie, tak calkiem to nie. > > Niektore podstawowe operacje bedzie warto / bedzie trzeba wyciagnac na > zewnatrz (np. na datach nie da sie sensownie w transformacji pracowac). Ale > tego po pierwsze nie bedzie duzo, a po drugie raczej nie bedzie sie to > zmieniac przy zmianie schemy/regul (wiec nie ruszasz binariow!). Zgaduję: powinienem napisać takie przekształcenie, które wyrzuci mi na wyjściu tekst który powinienem sprawdzić ręcznie. Ten krótki test zaś analizuję za pomocą c++ i voila! O to Ci chodzi? > Juz przez oszczednosci na procesie testowania wersji po zmianie wymagan > warto rozwazyc takie opcje. > Chyba mnie przekonałeś. Zobaczymy co na to szefostwo. Jeśli byłbyś łaskaw to podpowiedz mi tytuły dobrych książek do nauki xslt. Jeszcze raz dziękuję za pomoc. Na dzisiaj kończę, wracam we wtorek. Pewnie będę próbował jeszcze coś z Ciebie wyciągnąć, dlatego z góry proszę o wybaczenie ;-) -- Piotrek
Re: Przetwarzanie annotation + nieformalne reguly
Author: szomiz
Date: Fri, 28 Mar 2008 13:50
Date: Fri, 28 Mar 2008 13:50
53 lines
3592 bytes
3592 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości news:fsiqv6$qa7$1@nemesis.news.neostrada.pl... >> Niektore podstawowe operacje bedzie warto / bedzie trzeba wyciagnac na >> zewnatrz (np. na datach nie da sie sensownie w transformacji pracowac). >> Ale tego po pierwsze nie bedzie duzo, a po drugie raczej nie bedzie sie >> to zmieniac przy zmianie schemy/regul (wiec nie ruszasz binariow!). > Zgaduję: powinienem napisać takie przekształcenie, które wyrzuci mi na > wyjściu tekst który powinienem sprawdzić ręcznie. >Ten krótki test zaś analizuję za pomocą c++ i voila! O to Ci chodzi? Mozna tak, ale o wiele wygodniej jest miec na wyjsciu dokument z wejscia z dodanymi elementami/atrybutami z wlasnej przestrzeni nazw informujacymi o bledach. >> Juz przez oszczednosci na procesie testowania wersji po zmianie wymagan >> warto rozwazyc takie opcje. > Chyba mnie przekonałeś. Zobaczymy co na to szefostwo. Jezeli zaczynacie temat - http://szomiz.republika.pl/ -> prosze poprzekazywac 1% na tych co tam napisane (w tym roku "liniowcy" tez moga!). Jezeli grzebiesz w istniejacym, sprzedajacym sie rozwiazaniu to cie prawdopodobnie wysla na drzewo ;-) > Jeśli byłbyś łaskaw to podpowiedz mi tytuły dobrych książek do nauki xslt. Nastepny... Ksiazka do nauki jezyka majacego mniej znacznikow niz HTML :/ Specyfikacja + przyklady z MSDN'a dadza dosc podstaw, zeby _ruszyc_. Zeby _zrobic_ trzeba sie przestawic na "myslenie xml'em", im wiecej modelami obiektowymi sie zajmowales - tym bedzie latwiej, im wiecej skladaniem danych z pseudo-relacyjnych sql'owych tabelek - tym trudniej. No i daj na msze albo na biedne dzieci, w ramach podziekowan, ze przyszlo ci sie zmagac ze schema, w ktorej typy sa definionawe wprost. Bez rozszerzen i ograniczen. Bo dopiero wtedy byla by jazda ;-) Ale jak ci sie bardzo nie spieszy, to mozesz poczekac na te, ktora sie wlasnie pisze ;> > Pewnie będę próbował jeszcze coś z Ciebie wyciągnąć, dlatego z góry Kto pyta nie bladzi? Kto pyta ten bladzi z innymi! Nie licz na zbyt wiele. Z kilku powodow nie chce wchodzic w merytoryke zagadnienia. sz.
Re: Przetwarzanie annotation + nieformalne reguly
Author: szomiz
Date: Fri, 28 Mar 2008 18:42
Date: Fri, 28 Mar 2008 18:42
21 lines
2007 bytes
2007 bytes
Wroc. > Metoda brute-force: isc od "gory" dokumentu znajdujac kolejne xs:element z > wlasciwym dla poziomu name. > Metoda wydajna: znalezc wszystkie xs:element z name jak analizowanego > wezla, a nastepnie odrzucac te, ktorych nazwy (kolejnych) parentow w > dokumencie i w schemie sie nie zgadzaja. W tym przypadku zadna metoda nie ma sensu, bo dzialamy z zalozeniem walidowania po regulach, wiec trzeba caly dokment przeleciec. Bo jak rozumiem rozmawiamy o walidowaniu w trakcie _tworzenia_ dokumentu. Bo jezeli nie (znaczy zespol cos tam nadlubal i trzeba to na koncu sprawdzic) to i tak trzeba pojechac po calosci. I to jest o wiele mniej skomplikowane. Z tym, ze wtedy zadanie z kategorii "trudne" przechodzi do kategorii "zmudne" ;) sz.
Re: Przetwarzanie annotation + nieformalne reguly
Author: TOUDIdel
Date: Sat, 05 Apr 2008 20:59
Date: Sat, 05 Apr 2008 20:59
19 lines
2029 bytes
2029 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości news:fsi9in$g1g$1@nemesis.news.neostrada.pl... >Dostałem zadanie polegające na napisaniu klas obsługujących dokument XML. >Dokument ten powinienem walidować za pomocą zadanej schemy. I to już >zrobiłem. Niestety powinienem reagować na zawarte w schemie nieformalne, z >punktu widzenia składni xml, reguły walidacyjne, tzn. uruchamiać dodatkową >kontrolę zawartości merytorycznej dokumentu niezależnie od formalnej >zgodności xml'a z definicją. >Reguły te są zapisane w elementach <xs:annotation><xs:documentaction> w >schemie, przykład: Generalnie problemy "sadowe" są z gatunku ciekawych, ale trza uważać by rozwiązań na pałę nie pisać. Niektóre źródła i wróble ćwierkają, że wkrótce o tych problemach całkiem fajny artykuł się w sieci pojawi, więc polecam tu zaglądać bo na pewno link do artykułu się pojawi, a wiele po nim powinno Ci się wyjaśnić. -- td
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads