Hello!
Egy xml fájlt egy adott Schema ellenében validálni nem ügy. ;)
Van egy alkalmazásom amiben gyakran változik egy xml fájl, és
én épp ilyen gyakran szeretném validálni.
Mivel mindig tudom, hogy hol történt a változás, ezért olyan megoldást keresek,
amelyik lokálisan csak az érintett Node-ot illetve annak tartalmát validálja.
(A többiben úgysem történt változás.)
Persze, megtehetném, hogy az egész fájlt validálom, de nem akarom, hogy belassítsa a dolgokat...
Van valakinek valami ötelete? Ismer valaki olyan validatort ami ilyet tud?
- 1493 megtekintés
Hozzászólások
Hát, nem tudom mennyire gyorsítaná észrevehetően a dolgokat. Legalább az adott node szülőjétől kell elindulni a validáláshoz, azt is kalkuláld bele, tehát maga az adott node nem elég.
Milyen validátort használsz? Nem ismerek olyan progit, amit keresel, de javasolnám a libxml részeként terjesztett xmllint programot, ha számít a sebesség. C-ben íródott, tehát gyors és támogat DTD, Schema és RELAX-NG validálást.
- A hozzászóláshoz be kell jelentkezni
Talán van egy olyan flag Sax-ban, hogy XMLFragment, de most hirtelen nincs semmim ahol meg tudnám nézni.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Mint fentebb irtak, eleg problemas ez, hiszen a sema definialja a parent child-jeinek a tipusat, tehat a parent node-tol kezdve kell validalj. Nomarmost, ha egy egyszintes dokumentumfad van, akkor effektiv sebessegdifferencia nem lesz a teljes doksi es a masik modszer kozt.
Amugy en amondo vagyok, hogy ha a te reszedrol tudod garantalni a valtozasok validitasat (ez teszt szinten ki kellene deruljon), akkor nem szukseges folyamatosan ellenorizgetni. Persze ehhez a bemeno adatokon eroteljes validalast kell vegrehajtani.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
>Nomarmost, ha egy egyszintes dokumentumfad van, akkor effektiv sebessegdifferencia nem lesz a teljes doksi es a masik modszer kozt.
Nem egyszintes dokumentumfám van. ;)
>Amugy en amondo vagyok, hogy ha a te reszedrol tudod garantalni a valtozasok validitasat (ez teszt szinten ki kellene deruljon), akkor nem szukseges folyamatosan ellenorizgetni.
Nem tudom garantálni. Épp ezért kell a validálás. ;)
- A hozzászóláshoz be kell jelentkezni
worker thread, ami csak a validálást végzi?
átadod neki az adat, majd az elszöszöl vele és beírja az xmlbe.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Oke, kifejtem bovebben:
Szoval, ha a xml fragmentumot nem csak ugy kapod valahonnet, hanem te magad a ket szep kezecskeddel pakolaszod ossze, akkor elmeletben tudod garantalni az xml validitasat. Ha az xml fragmentumot valakitol atveszed, akkor viszont - fuggoen attol, hogy egy vagy tobb node-t veszel at - az atvett adatot kell validalni, nem pedig a kiirando adatot. Ha tobb node-t veszel at, akkor regex-szel szetszeded, es a node-kat kulon-kulon levalidalod, csak neked kell osszetenni a semat hozza, hogy az legyen a gyoker, amit szeretnel.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Arra gondolsz, hogy:
-adott egy node, amit validálni szeretnék.
-adott egy schema a teljes xmlhez.
amit csinálok:
-kiveszem a schema-ból azt a részt ami az adott node-ra vonatkozik, és új schémát csinálok belőle, mintha node lenne a root elem
-validálom az új schémával a node-ot
Ha erre akartál célozni, hát ez is költséges lehet... attól függ persze, hogy a schémát mennyire nehéz átszabni. Erről tudsz valamit mondani?
Csak hogy jobban érts: egy xml editort kezdtem el csinálni. Tehát kezdetben van egy xml fájl ami valid. A user egy xml fragmentumot megváltoztat, és én a módosított xml fragmentumot akarom validálni.
- A hozzászóláshoz be kell jelentkezni
XSLT-vel esetleg átszabni a sémát? Gondolom meg lehet csinálni, bár csak alapokkal vagyok tisztában XSLT-vel...
Amúgy az xmllintről, amit fentebb említettem még annyit, hogy 13K soros doksit ilyen hamar validál le:
> /usr/bin/time -h xmllint --noent --valid --noout book.xml
0.17s real 0.11s user 0.05s sys
> wc -l book.xml
13150 book.xml
Lehet nem éri meg ennyit szenvedni a fragmentekkel, ha mindez ilyen hamar megvan. Nyílván lineáris idejű a validálási algoritmus, ezért még egy 130K soros fájlon is elhanyagolható a validálási idő. Szerintem több időt vesztesz a fragmentált validálással, amíg a szkripted összedobálja a cuccokat és levalidálja a fragmentet.
- A hozzászóláshoz be kell jelentkezni
>Szerintem több időt vesztesz a fragmentált validálással, amíg a szkripted összedobálja a cuccokat és levalidálja a fragmentet.
Megfontolandó, amit írtál de még egy kicsit invesztigálok, hátha találok valami megoldást...
- A hozzászóláshoz be kell jelentkezni
Na visual c++ már megvan:
http://msdn.microsoft.com/en-us/library/ms763796(VS.85).aspx
Most már csak dzsávában kéne....
- A hozzászóláshoz be kell jelentkezni
Na asszem meg lesz a java-ban is:
A dom 3 level kell nekem.
https://developer.mozilla.org/en/DOM_Levels
Java-ban pl az oracle implementálta:
http://download.oracle.com/docs/cd/B14099_19/web.1012/b12024/org/w3c/do…
Ha minden olyan szép mint amilyennek az API-ban látszik akkor menni fog.
^^Használta már valaki? Tapasztalat?
- A hozzászóláshoz be kell jelentkezni