🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

11 total messages Started by pbk++ Fri, 28 Mar 2008 08:10
Przetwarzanie annotation + nieformalne reguly
#9770
Author: pbk++
Date: Fri, 28 Mar 2008 08:10
40 lines
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
#9771
Author: pbk++
Date: Fri, 28 Mar 2008 08:13
6 lines
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
#9772
Author: szomiz
Date: Fri, 28 Mar 2008 09:23
19 lines
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
#9773
Author: pbk++
Date: Fri, 28 Mar 2008 10:35
58 lines
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
#9774
Author: szomiz
Date: Fri, 28 Mar 2008 11:44
79 lines
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
#9775
Author: pbk++
Date: Fri, 28 Mar 2008 12:20
16 lines
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
#9776
Author: szomiz
Date: Fri, 28 Mar 2008 12:41
22 lines
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
#9777
Author: pbk++
Date: Fri, 28 Mar 2008 13:07
38 lines
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
#9778
Author: szomiz
Date: Fri, 28 Mar 2008 13:50
53 lines
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
#9779
Author: szomiz
Date: Fri, 28 Mar 2008 18:42
21 lines
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
#9780
Author: TOUDIdel
Date: Sat, 05 Apr 2008 20:59
19 lines
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