Hulp! Heeft er iemand verstand van XML (DTD)?
change_status
Avatar
Hoofdrolspeler
RankRankRankRankRankRank
Totaal aantal Reacties:  1071
Geregistreerd  2002-07-30

Ik heb voor school het afgelopen jaar een DTD moeten schrijven om artikelen digitaal weer te geven en doorzoekbaar te maken, maar na ‘m al een aantal keer te hebben ingeleverd blijft de docent zeggen dat er iets niet klopt. De lessen zijn nu alleen inmiddels zo lang geleden dat ik zijn commentaar ook niet echt meer kan plaatsen… Als er hier iemand is die regelmatig met XML werkt, zou ik het fijn vinden als hij of zij er even naar zou willen kijken en me kan zeggen wat ik moet doen! (Voor het andere onderdeel binnen dit vak had ik het 10, dus het zou wel erg sneu zijn als ik het nu niet kan afronden… 😉)

Dit is mijn DTD:

          <!—E L E M E N T   D E C L A R A T I E S—>

<!ELEMENT artikel (voorwerk, tekst, nawerk*)>
<!ELEMENT voorwerk (auteur*, titel, samenvatting?, inleiding?, datum, instelling*)>
<!ELEMENT tekst (kop+, paragraaf+)>
<!ELEMENT nawerk (bron*, voetnoot*, literatuurlijst*)>

  <!ELEMENT auteur (voornaam, tussenv?, achternaam)>   
  <!ELEMENT titel (#PCDATA)>
  <!ELEMENT samenvatting (#PCDATA | trefwoord | naam | citaat)*>
  <!ELEMENT inleiding (#PCDATA | trefwoord | naam | citaat)*>
  <!ELEMENT datum (dag, maand, jaar)>
  <!ELEMENT instelling (#PCDATA)>
 
      <!ELEMENT voornaam (#PCDATA)>
      <!ELEMENT tussenv (#PCDATA)> 
      <!ELEMENT achternaam (#PCDATA)>
     
      <!ELEMENT dag (#PCDATA)>
      <!ELEMENT maand (#PCDATA)>
      <!ELEMENT jaar (#PCDATA)>

  <!ELEMENT kop (#PCDATA)>
  <!ELEMENT paragraaf (alinea+, kop*)>
   
  <!ELEMENT alinea (#PCDATA | tussenkop | trefwoord | naam | citaat | lijst)*>
 
      <!ELEMENT tussenkop (#PCDATA)>
      <!ELEMENT trefwoord (#PCDATA)>
      <!ELEMENT naam (voornaam, tussenv?, achternaam)> 
      <!ELEMENT citaat (#PCDATA)>
      <!ELEMENT lijst (#PCDATA)>
     
  <!ELEMENT bron (bronnaam, pagina)*>
  <!ELEMENT voetnoot (#PCDATA)>
      <!ELEMENT bronnaam (#PCDATA)>
      <!ELEMENT pagina (#PCDATA)>
     
 
  <!ELEMENT literatuurlijst (littit, litaut*, bronnaam*, instelling*, litdat, pagina)>
  <!ELEMENT littit (#PCDATA)>
  <!ELEMENT litdat (maand, jaar)>
  <!ELEMENT litaut (voornaam, tussenv?, achternaam)>

En dit is het commentaar wat ik erop kreeg:

Er zaten toch nog wat rare ongerijmdheden in je DTD.

Je definieert
<!ELEMENT tekst (kop+, paragraaf+)>
Dat betekent dat die bestaat uit eerst een heleboel koppen en dan een
heleboel paragrafen. En die paragrafen komen pas als alle koppen geweest
zijn. Je moet dit namelijk echt in volgorde lezen, als er komma’s tssen
de elementen staan.

Vervolgens zeg je dat een paragraaf bestaat uit alinea’s, waarna - als
de alinea’s op zijn - eventueel nog koppen kunnen volgen (??)
<!ELEMENT paragraaf (alinea+, kop*)>

Je definitie van een alinea kan ik dan wel weer bijna helemaal begrijpen
(en goedkeuren), alleen zie ik niet helemaal wat die “tussenkoppen” daar
doen.
<!ELEMENT alinea (#PCDATA | tussenkop | trefwoord | naam | citaat | lijst)*>
Die kunnen nu tamelijk willekeurig tussen alle andere gewone en
speciale) stukken tekst doorgestrooid worden.

Probeer van het geheel toch echt een duidelijke, logische structuur -
een echte boomstructuur - te maken:
een tekst die uit hoofdstukken bestaat,
waarbij elk hoofdstuk begint met een kop en daarna alinea’s
en elke alinea inderdaad uit de stukken tekst kan bestaan die jij
daarvoor opgaf.
In de artikelen zoals in het voorbeeld zat er verder geen tussennoveau
van paragrafen meer in. Als je die toch ook mogelijk wilt maken dan
krijg je in het bovenstaande gewoon één niveau meer:
elke hoofdstuk bestaat uit een kop gevolgd door paragrafen,
elke paragraaf bestaat uit een subkop gevolgd door alinea’s, enz.

Pas je DTD dus nog aan op basis van het bovenstaande.
Het is de bedoeling alleen nog die DTD in te leveren.

  [ # 1 ] 08 August 2009 11:50 AM
Avatar
Musical Ster
RankRankRankRankRankRankRankRankRank
Totaal aantal Reacties:  6522
Geregistreerd  2008-11-01

Hoi S7rin

Ik ga een poging wagen. Wanneer wil je het inleveren?
Ik wil het maandag nl. ook nog even met een collega bespreken.

  [ # 2 ] 08 August 2009 12:39 PM
Avatar
Musical Ster
RankRankRankRankRankRankRankRankRank
Totaal aantal Reacties:  6522
Geregistreerd  2008-11-01

Ik heb de volgende boomstructuur bedacht:

Artikel
  bestaat uit 1 of meer Hoofdstukken
      Elk hoofdstuk bestaat uit 1 Kop en 1 of meer Paragrafen
        Een paragraaf bestaat uit 0 of 1 tussenkop en 1 of meer Alineas

Het zou dan als volgt kunnen worden:

<!–E L E M E N T   D E C L A R A T I E S–>

<!ELEMENT artikel (voorwerk, hoofdstuk+, nawerk*)>

  <!ELEMENT voorwerk (auteur*, titel, samenvatting?, inleiding?, datum, instelling*)>
  <!ELEMENT hoofdstuk (kop, paragraaf+)>
  <!ELEMENT nawerk (bron*, voetnoot*, literatuurlijst*)>

    <!ELEMENT auteur (voornaam|voorletters, tussenv?, achternaam)>
    <!ELEMENT titel (#PCDATA)>
    <!ELEMENT samenvatting (#PCDATA | trefwoord | naam | citaat)*>
    <!ELEMENT inleiding (#PCDATA | trefwoord | naam | citaat)*>
    <!ELEMENT datum (dag, maand, jaar)>
    <!ELEMENT instelling (#PCDATA)>

      <!ELEMENT voornaam (#PCDATA)>
      <!ELEMENT voorletters (#PCDATA)>
      <!ELEMENT tussenv (#PCDATA)>
      <!ELEMENT achternaam (#PCDATA)>

      <!ELEMENT trefwoord (#PCDATA)>
      <!ELEMENT naam (voornaam|voorletters, tussenv?, achternaam)>
      <!ELEMENT citaat (#PCDATA)>
   
      <!ELEMENT dag (#PCDATA)>
      <!ELEMENT maand (#PCDATA)>
      <!ELEMENT jaar (#PCDATA)>
   
    <!ELEMENT kop (#PCDATA)>
    <!ELEMENT paragraaf (tussenkop?, alinea+)>

      <!ELEMENT tussenkop (#PCDATA)>
      <!ELEMENT alinea (#PCDATA | trefwoord | naam | citaat | lijst)*>

        <!ELEMENT lijst (#PCDATA)>

    <!ELEMENT bron (bronnaam | pagina)*>
    <!ELEMENT voetnoot (#PCDATA)>
     
      <!ELEMENT bronnaam (#PCDATA)>
      <!ELEMENT pagina (#PCDATA)>

    <!ELEMENT literatuurlijst (littit, litaut*, bronnaam*, instelling*, litdat, pagina)>
      <!ELEMENT littit (#PCDATA)>
      <!ELEMENT litaut (voornaam|voorletters, tussenv?, achternaam)>
      <!ELEMENT litdat (maand?, jaar)>

*edit*
Met dit DTD kan je tot op 2 niveau’s koppen hebben, meer in het algemeen kan je nog dieper gaan door de veronderstellen dat een paragraaf ook weer zelf uit paragrafen kan bestaan.
Het element voor een paragraaf wordt dan:
<!ELEMENT paragraaf ((tussenkop, paragraaf*) | (tussenkop, alinea*))*>

De volgende paragrafen voldoen hieraan

1.  Joseph (tussenkop)
  _   Joseph is een musical uit 1968 geschreven door Andrew Lloyd Webber (alinea)
P|1.1 _Producties (tussenkop)
A|  P |1.1.1 Producties buiten NL (tussenkop)
R|  A |  Verhaaltje over de Engelse producties (alinea)
A|  R |_     Verhaaltje over Broadway (alinea)
G|  P |1.1.2 Producties binnen NL (tussenkop)
R|  A |_     Verhaaltje over de Nederlandse productie (alinea)
A|1.2 Synopsys (tussenkop)
F|_   Verhaaltje over de inhoud van de musical (alinea)

[ Gewijzigd: 08 August 2009 01:34 PM by Hanstmf ]
  [ # 3 ] 08 August 2009 04:09 PM
Avatar
Hoofdrolspeler
RankRankRankRankRankRank
Totaal aantal Reacties:  1071
Geregistreerd  2002-07-30

Ik heb geen uiterlijke inleverdatum gekregen, dus dat maakt niet uit 😊
Alvast bedankt voor de moeite!!

Hanstmf - 08 August 2009 11:50 AM

Hoi S7rin

Ik ga een poging wagen. Wanneer wil je het inleveren?
Ik wil het maandag nl. ook nog even met een collega bespreken.

  [ # 4 ] 11 August 2009 10:34 AM
Avatar
Musical Ster
RankRankRankRankRankRankRankRankRank
Totaal aantal Reacties:  6522
Geregistreerd  2008-11-01

Alles wat onder de *edit* staat kan je vergeten.
Het is een mooie oplossing om te veronderstellen dat een paragraaf zelf ook weer uit paragrafen kan bestaan, maar dat wordt in een DTD niet ondersteund. De XML-validatie zal dan met schema’s moeten.

Alles wat boven de edit staat zou moeten werken. Je kan dan hoogstens op 2 niveaus diep

Artikel bestaat, naast voorwerk en nawerk, uit
  1 of meer hoofdstukken met
      1 kop en 1 of meer paragrafen per hoofdstuk
          waarbij een paragraaf bestaat uit evt. een tussenkop en 1 of meer alineas.

  [ # 5 ] 11 August 2009 12:01 PM
Avatar
Hoofdrolspeler
RankRankRankRankRankRank
Totaal aantal Reacties:  1071
Geregistreerd  2002-07-30

Dank je wel!
Ik had zelf ook al het vermoeden dat een paragraaf binnen een paragraaf problemen op zou leveren, dus ik had alles boven de *edit* al overgenomen en ingeleverd. Ik hoop dat het goed is zo!

  [ # 6 ] 11 August 2009 05:39 PM
Avatar
Musical Ster
RankRankRankRankRankRankRankRankRank
Totaal aantal Reacties:  6522
Geregistreerd  2008-11-01

S7rin - 11 August 2009 12:01 PM

Dank je wel!
Ik had zelf ook al het vermoeden dat een paragraaf binnen een paragraaf problemen op zou leveren, dus ik had alles boven de *edit* al overgenomen en ingeleverd. Ik hoop dat het goed is zo!

Ik hoor het graag.