XML file-jaim esetében külső DTD-t szeretnék használni, csakhogy kísérleteim szerint a PHP (4.3) XML-értelmező függvényei csak "standalone file-oknál" működnek jól, tehát csak belső DTD-t hajlandók felismerni (próbáltam xml_parse_into_struct-ot és xml_set_element_handler-t is, mindkettőnél ugyanúgy viselkedett), egyébként figyelmen kívül hagyják.
Valaki próbálkozott már ezzel? Sikerült külső DTD-t felismertetni ezekkel az értelmezőkkel?
Tudna nekem valaki segíteni?
Az problémám, hogy egy nodevalue -ba egy szóközt kellene beletennem, bele is teszem, de a kész xml-be nem kerül bele. Ha nem szóközt írok bele, akkor beleteszi.
Delphiben írom.
Köszi a gyors válaszért. Letöltöttem a csomagot, de semmi leírás nincs benne (sem a weblapon), hogy kell használni.
A bison.exe ennyit hajlandó elárulni:
Az érdekesség kedvéért megemlítem, hogy e pillanatban yacc-kal (pontosabban bison-nal) elemzek XML-t.
Olyan lexikális elemző kell hozzá, amelyik képes a <tag, </tag <?tag szerű elemeket egy lexikális egységként kezelni...
Ahogy nézem, ID-nek csak betűvel vagy aláhúzással kezdődő stringet fogad el... Azt hiszem, ezt buktam... Na sebaj, legfeljebb majd nem az xml ellenőrzi az egyedi id-t.
Épp egy DTD-t barkácsolok, ahol az egyik tag attribútuma ez:
link ID #REQUIRED
Elvileg ez azt követeli meg, hogy a "link" attribútum értéke egyedi legyen, viszont reklamál, ha üres stringet adok meg, még akkor is, ha csak egyetlen tagnél van üres string. Tudja valaki, miképpen tudom előírni, hogy egyetlen üres string is elfogadható legyen egyedi id-ként?
Javasolom Gottdank Tibor: Webszolgáltatások - XML alapú kommunikáció az Interneten c. könyvét, melyben az XML értelmezőt és a DTD-t is alaposan körüljárja. A könyv most jelent meg.
XML parser lehet "validating" és "non-validating". El?bbi ellen?rzi, hogy a dokumentumod megfelel-e a DTD-ben leírt szabályoknak, az utóbbi pedig csak azt ellen?rzi, hogy a dokumentum szintakszisa megfelel-e az XML speckónak.
Ha a parsered validating, akkor kiabálni fog, ha megadsz attribútumot egy olyan elemhez, amihez nincs definiálva.
Én is kezdő vagyok, úgyhogy együtt tanulunk. :) Nézd meg ezt: DTD Elements. Itt meg sem említik lehetőségként, csak a (#PCDATA)-t, ami logikus is („Elements with only character data”). Ha egy fejezetet visszamész, ott már beszélnek valami CDATA-ról, csak nem látom, hogy ez hol kapcsolódik a további anyaghoz.
Lehet... nagyon kezdő vagyok a témában, mint említettem.
Tképp... akár lehet is.
Csak az volt a fura, hogy szerinte (CDATA) helyett (CDATA) volt ott... :-o
Reménytelen. Azt egyáltalán nem fogadja el. Eleve nem tudom, mi a fene az a #.
Mert ugye a típus eredetileg PCDATA ill. CDATA lenne.
Talán hétfőn sikerül a munkatársak közt találni valakit...
Nem, azt már csak kínomban írtam bele, hogy hátha azzal jó lesz. Érdekes módon (#PCDATA)-val jó.
Szóval qrvára nem értem, de mind1...
Ráadásul nincs egy igazán jól sikerült doksim hozzá, mert ami a www.w3c.org-on van, az valami katasztrófa számomra ;-)
Persze. Mint kiderült egy normáls ellenőrző program figyelembe veszi és szól, ha nem definiáltál attribútumot egy tag-hez, de az XML-ben szerepel. Az IE6 úgy döntött, hogy neki nem kötelező. Vagy - amit írtam, de még nem volt alkalmam kipróbálni: lehet, hogy mégis így van jól, mert itthon úgy próbáltam, hogy az XML tartalmazta a definíciókat, a munkahelyi linuxomon meg úgy, hogy külön DTD-ben volt minden. No majd ha a linuxomban járok, megnézem ezt is.
No... 1 rejtéllyel kevesebb. Perszehogy nem én vagyok a hülye, hanem az exploder :-(
Ma rászántam magam, hogy a linuxomon is körülnézzek. Ott találtam egy ... nem jut eszembe a neve... valami xmlli... nem tudom a végét. Szóval ez képes szintaktikai ellenőrzést végezni az XML file-on és ő bizony már sírt, ha olyan tag-nek adtam attribútumot, amelyhez a DTD-ben nem volt megfelelő definíció.
A másik lehetőség, hogy mégis én vagyok a hülye, mert a dokumentumba ágyazott leírás nem egyenértékű mégsem a külön DTD file-ban elhelyezettekkel...
Ha nem adok meg ATTLIST-et akkor bármit enged beírni. Persze lehet, hogy csak azt tudom előírni vele, hogy amit megadok az milyen formátumú legyen, de ezeken kívül bármi mást is odaírhatok... No mind1, majd megpróbálok keresni az eddigieknél használhatóbb leírást (eddig csak 1-2 nem igazán tökéletes tutorialt nézegettem, ref.guide-t meg hasonlókat még nem)
És ha egyszerűen nem adsz meg az ATTLIST-et? Végülis nem kötelező az. De nem akarok sokat kötekedni, valójában nem értek én ehhez egyáltalán. :( Esetleg próbálj meg az egyik XML-edből DTD generátorral csinálni egy minimál DTD-t, és teszteld azzal.
Jajj.. bocs... most olvastam el, hogy mit írtam eredetileg :-)
Szóval a lényeg, hogy pl. a DTD-ben, vagy az XML elején a leíró részben szeretném mindezt definiálni:
<!ELEMENT PARAM (CDATA)>
<!ATTLIST PARAM ?????>
A ????? helyére vajon mit kell írni ahhoz, hogy az elemző/feldolgozó program hibát jelezzen, ha véletlenül megadok valamilyen attribútumot a PARAM mellé.
Bocs, lehet, hogy én vagyok nagyon eltévedve.
Voltam egy tanfolyamon, ahol kaptunk egy rövid bevezetést az XML rejtelmeibe.
Itt emlegette az előadó, hogy pl. a DTD file-ban, v. az XML elején lehet definiálni az egyes tagok tulajdonságait, így pl. az !ATTLIST (??) segítségével azt, hogy milyen attribútumok szerepelhetnek egy tag mellett. Ezután a feldolgozó program tudja ellenőrizni, hogy szintaktikailag rendben van-e az illető file. (ez pl. lehet akár egy IE is)
Ebből úgy gondoltam, hogy ha kikötéseket lehet megfogalmazni ezekre az attribútumokra, akkor miért ne lehetne letiltani őket?