ugrás a tartalomhoz

Regexp leegyszerűsítése

janoszen · 2008. Jan. 27. (V), 20.30
Kedves mindenki,

beleütköztem egy számomra nem túl triviális problémába. Szerettem volna az XHTML 1.0 DTD-ből PHP osztályokat generálni, de megakadtam ennél a kifejezésnél:

<!ENTITY % head.misc "(script|style|meta|link|object)*">

<!ELEMENT head (%head.misc;,
     ((title, %head.misc;, (base, %head.misc;)?) |
      (base, %head.misc;, (title, %head.misc;))))>


Szépen látszik, hogy a %head.misc elemei plusz az egy kötelező title tag van vegyítve, de ezt a kifejezést valahogy elemeznem kellene, hogy értelmes listát kapjak a kötelező illetve opcionális gyerekelemekről.

A programot szeretném később akár más DTD-kre is használni, tehát a kézzel szerkesztős megoldás nem preferált.

Ha ismertek valamilyen módszert a reguláris kifejezések egyszerűsítésére, kérlek, ne tartsátok vissza.
 
1

Rossz kérdés

janoszen · 2008. Jan. 28. (H), 09.14
Rosszul tettem föl a kérdést, ezt a kifejezést nem igazán lehet jobban egyszerűsíteni, azt kellett volna megkérdeznem, hogyan állapítható meg az elemek számossága.
2

Vagyis..

Ronyn · 2008. Jan. 28. (H), 13.58
...olyan mintát szeretnél ami illeszkedik az adott szövegre,független attol hogy hány részböl áll,és mégis külön kezelje a részeket?
3

Számosság

janoszen · 2008. Jan. 28. (H), 15.29
Nem, csak az egyes elemek számosságára vagyok kiváncsi. Tehát, hogy title-ből pontosan egy darab lehet, base-ből 0 vagy 1, meta-ból akárhány, stb.
4

Ha jol értem...

Ronyn · 2008. Jan. 28. (H), 15.52
...-bár azt nem irtad hogy mi van ha pl. 2 base elemet talál,és azt sem hogy ez csak egyfajta ellenörzés/elemzés egy minta alapján,vagy csereszoveg is van-én egy fuggvény hivást illesztenék a csereben(ha van a base;title;stb helyére,ami egyrészt visszaadja az adott találatot,másrészt akár számolja egy static változoval,illetve akár más funkciot is elvégez szukség esetén..pl.:ha 3 base van...
5

Nem jó kérdés

Rici · 2008. Jan. 28. (H), 19.51
Ez a kérdés sajnos nem tehető fel értelmesen egy tetszőleges reguláris kifejezés esetében. Hiszen simán lehetséges olyan reguláris kifejezés egy DTD-ben, hogy az elemek "számossága" nemcsak a szülő elemtől függ, hanem pl. egymástól is. Lehet olyat írni, hogy alapból pontosan egy darab x elemed lehet, de ha van egy y elemed, akkor az után tetszőleges számú x elem szerepelhet.

Magyarul ezt nem úszod meg egy véges automata nélkül, amelyet a reguláris kifejezés alapján építesz fel.

Azonkívül azt is érdemes meggondolni, hogyha nem egy elem lehetséges gyerekelemeiről van szó, hanem a teljes dokumentumról, akkor a DTD-kkel általában nem reguláris nyelveket határozunk meg, hanem CF (környezetfüggetlen) nyelveket. Tehát ha tényleg elemezni akarod a dokumentumot, esetleg felkínálni a következő lehetséges elemet, akkor nem úszod meg egy általános CF parser megírása nélkül. Aminek nem egyszerű nekiugarni.
6

Ettől féltem

janoszen · 2008. Jan. 28. (H), 20.50
Sajnos ettől féltem. Az lett volna a tervem, hogy egy DOM node, amikor hozzáadok egy gyerekelemet, el tudjam róla dönteni, hogy szabad-e azt hozzáadni vagy marhaságot csinált aki megpróbálta és dobok exception-t. Szerettem volna a lehetséges tageket mint osztály megvalósítani és valamilyen szabálykészletet fölállítani, ami viszonylag költség-hatékonyan le tudja ellenőrizni a gyerekelemeit.
7

Hasonló létezik

Rici · 2008. Jan. 28. (H), 22.56
Bizonyos XML megvalósításokban ilyen létezik, miszerint megadsz neki egy DTD-t vagy xsd-t inicializáláskor, és csak annak megfelelő dokumentumot enged beolvasni. Konkrét példát a .NET base class libraryból tudok mondani, de nyilván más platformokon is létezik ilyesmi.

DOM node-ok egyesével való beszúrására nehézkes ilyet elképzelni, hiszen egy séma előírhatja, hogy ha x elem szerepel, akkor y-nak is kell, és akkor x beszúrása után egyből hibát kapsz, hiszen még nincs ott az y.
8

Jogos...

janoszen · 2008. Jan. 29. (K), 09.25
Jogos, az elemek hiányát utólag elemezném ki, csak az egyértelműen nem megengedett elemek beszúrását szeretném megakadályozni. Bár lehet, hogy járhatóbb út az utólagos ellenőrzés.
9

könyv erről a témáról?

Hodicska Gergely · 2008. Feb. 10. (V), 17.29
Tudnál esetleg ajánlani egy jó könyvet erről a témáról? Csóró villanykarosként ez a téma teljesen kimaradt, ha épp adódik egy kis időm, szívesen utána olvasnék. (Lehetőleg valamilyen gyakorlatiasabb iromány érdekelne, nem annyira fromális).


Köszi,
Felhő
10

Melyik téma?

Rici · 2008. Feb. 16. (Szo), 14.23
Az a kérdés, hogy pontosan melyik téma? A formális nyelvek általános elmélete, vagy konkrétan az XML dokumentumoknál szóbajövő parse-olási lehetőségek? Mert utóbbiról nem nagyon tudok könyvet, viszont a formális nyelvek elméletéhez van egy jó könyv. De azt érdemes tudni, hogy mint a legtöbb egyetemi tankönyvnél, igazi kihívás ebből megtanulni magadtól, anélkül, hogy számonkérésekkel kényszerítenének rá. :) Viszont az is igaz, hogyha sikerül megérteni, akkor bátrabban neki lehet ugrani a gyakorlatiasabb témáknak.