Toon posts:

[XML] DTD "probleem" *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een beetje problemen met een DTD:

<!ELEMENT auto (naam, bouwjaar, fabrikant, hp, snelheid, gewicht, lengte, breedte, hoogte, benzine, aandrijving, versnellingen, foto)>
<!ELEMENT naam (apple|orange)>
<!ELEMENT bouwjaar (#PCDATA)>
<!ELEMENT fabrikant (#PCDATA)>
<!ELEMENT hp (#PCDATA)>
<!ELEMENT snelheid (#PCDATA)>
<!ELEMENT gewicht (#PCDATA)>
<!ELEMENT lengte (#PCDATA)>
<!ELEMENT breedte (#PCDATA)>
<!ELEMENT hoogte (#PCDATA)>
<!ELEMENT benzine (#PCDATA)>
<!ELEMENT aandrijving (#PCDATA)>
<!ELEMENT versnellingen (#PCDATA)>
<!ELEMENT foto (#PCDATA)>

Hier heb ik een bijbehorend XML document met alle gegevens. Zoals je ziet zou er bij naam alleen "apple" of "orange" mogen worden ingevuld. Maar als ik iets heel anders invul bij "naam" in het XML document, gaat alles gewoon door alsof er niets aan de hand is. Ik had verwacht dat IE aan de hand van de DTD dan wel een fout zou geven of zo.
Of heb ik nu een heel verkeerd idee over een DTD document? Of is misschien de syntax niet juist?

Thnx

Verwijderd

Het is een beetje de vraag of je vindt dat een applicatie een XML-bestand eerst moet valideren en goedkeuren voor deze gebruikt mag worden. In principe hoeft dat blijkbaar dus heemaal niet, en probeert IE zo goed mogelijk er iets van te maken.

Verwijderd

Topicstarter
Ik maak op dit moment gebruik van Cocoon en XSL documenten om de XML data in een website te tonen. De "bedoeling" is eigenlijk dat ik dus een melding krijg of zo dat mijn XML niet goed is. Wat voor nu heeft anders dat DTD document?
Ik weet niet erg veel van Cocoon, XML, DTD en dergelijke het is voor een schoolprojectje.

Moet ik hiervoor dan een extra item in de pipeline opnemen of zo?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:33

Robtimus

me Robtimus no like you

Heb zelf even een test XML bestand gemaakt, en mijn vermoedens werden bevestigd:
<!ELEMENT naam (apple|orange)> klopt niet: nu verwacht de parser een element genaamd apple of orange. De foutmelding die ik nml kreeg:
E:/Temp/test.xml [4:10] : Error: unexpected character content within element 'naam'
E:/Temp/test.xml [4:17] : Error: premature end to content of element 'naam'. Expecting child element 'apple' or 'orange'
Wat jij wilt kan volgens mij niet met een DTD.

Kijk eens naar XML Schema, daar is veeeeel meer mee mogelijk. Bv niet alleen zeggen dat iets #PCDATA moet zijn, maar ook bv een getal tussen 4 en 7, of een bepaalde string.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
Nou, ik zou heel graag die error van jou willen zien :D Want dat is waar ik eigenlijk naar op zoek ben :) ... Zoiets had ik gewoon verwacht, een error dat het "apple" of "orange" moet zijn.
In plaats daarvan krijg ik gewoon de bedoelde pagina te zien, met de door mij ingevulde (andere) waardes. Terwijl hij moet zeggen dat het fout is, error of melding maakt niet uit :) Zo lijkt het of heel die DTD niets doet :S

Ligt dit misschien aan Cocoon of zo?
Als ik de XML gewoon open op mijn lokale computer krijg ik gewoon de structuur van het XML bestand te zien, ook geen errors.

Misschien is mijn XML fout?


<?xml version="1.0"?>
<!DOCTYPE auto SYSTEM "auto.dtd">
<document naam = "Automobiles">

<auto>
<naam></naam>
<bouwjaar>2002</bouwjaar>
<fabrikant>Porsche</fabrikant>
<hp>612</hp>
<snelheid>330</snelheid>
<gewicht>1.380</gewicht>
<lengte>4.613</lengte>
<breedte>1.921</breedte>
<hoogte>1.166</hoogte>
<benzine>91</benzine>
<aandrijving>achter</aandrijving>
<versnellingen>6</versnellingen>
<foto>car2.jpg</foto>
</auto>
</document>

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Wat jij wilt kan volgens mij niet met een DTD.
Het moet wel mogelijk zijn met een DTD wanneer je de waarden apple/orange als attribuut in een element plaatst :)
XML:
1
<!ATTLIST naam type (apple|orange) "apple">

Je moet echter wel een default waarde voor het attribuut meegeven, maar dat maakt weinig uit.

Zie ook:
DTD Attributes

Tip: kijk eens naar schema's voor je xml-bestanden in plaats van een DTD :)
XML Schema

[ Voor 8% gewijzigd door DeverauX op 13-06-2003 22:18 ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:33

Robtimus

me Robtimus no like you

Verwijderd schreef op 13 June 2003 @ 21:51:
Nou, ik zou heel graag die error van jou willen zien :D Want dat is waar ik eigenlijk naar op zoek ben :) ... Zoiets had ik gewoon verwacht, een error dat het "apple" of "orange" moet zijn.
In plaats daarvan krijg ik gewoon de bedoelde pagina te zien, met de door mij ingevulde (andere) waardes. Terwijl hij moet zeggen dat het fout is, error of melding maakt niet uit :) Zo lijkt het of heel die DTD niets doet :S
Ik gebruik XMLValid van Elcel (http://www.elcel.com/products/xmlvalid.html) daarvoor. Command line, werkt perfect!
Ligt dit misschien aan Cocoon of zo?
Als ik de XML gewoon open op mijn lokale computer krijg ik gewoon de structuur van het XML bestand te zien, ook geen errors.

Misschien is mijn XML fout?


<?xml version="1.0"?>
<!DOCTYPE auto SYSTEM "auto.dtd">
<document naam = "Automobiles">

<auto>
<naam></naam>
<bouwjaar>2002</bouwjaar>
<fabrikant>Porsche</fabrikant>
<hp>612</hp>
<snelheid>330</snelheid>
<gewicht>1.380</gewicht>
<lengte>4.613</lengte>
<breedte>1.921</breedte>
<hoogte>1.166</hoogte>
<benzine>91</benzine>
<aandrijving>achter</aandrijving>
<versnellingen>6</versnellingen>
<foto>car2.jpg</foto>
</auto>
</document>
Ja, document is niet bekend :) Verder mis je dus onder naam OF apple OF orange.
DeverauX schreef op 13 juni 2003 @ 22:16:
[...]

Het moet wel mogelijk zijn met een DTD wanneer je de waarden apple/orange als attribuut in een element plaatst :)
XML:
1
<!ATTLIST naam type (apple|orange) "apple">

Je moet echter wel een default waarde voor het attribuut meegeven, maar dat maakt weinig uit.
Hoeft niet, je kan ook #REQUIRED gebruiken om aan te duiden dat het gewoonweg ingevuld MOET worden, of #IMPLIED zodat het totaal weggelaten mag worden, dus ook zonder default. Persoonlijk ben ik echter tegen #IMPLIED.

Ik ben het trouwens met je eens dat sommige childelements misschien beter attributen kunnen zijn, maar ok.

[ Voor 12% gewijzigd door Robtimus op 14-06-2003 14:35 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1