[XML] DTD notatie verwarring

Pagina: 1
Acties:

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 01-09 21:49
Ik ben sinds gisteren -eindelijk- begonnen met XML .. Heb via m'n werk O'Reilly's XML in a Nutshell 2nd edition gekocht, aber jetzt ..

Nu ben ik in hoofdstuk 3 bezig met wat DTD notaties.

Daar staat dit:
Suppose you want to say that a name can contain just a first name, just a last name, or a first name and a last name with an indefinite number of middle names. This declaration achieves that:

<!ELEMENT name (last_name | (first_name, ( (middle_name+, last_name) | (last_name?) ) ) >
Ik voel me nu dus een ontzettende n00b, want volgens mij moet 't gezien die tekst iets anders zijn, namelijk:
<!ELEMENT name (first_name | last_name | (first_name, middle_name+, last_name) ) >
Ga ik hier finaal de mist in ? Zo ja waar :?

  • CubicQ
  • Registratie: September 1999
  • Laatst online: 07:48
volgens mij klopt die bovenste wel, alleen is het een beetje contra-intuitief opgeschreven. Die onderste klopt zowiezo niet, middle_name+ betekent dat er minimaal 1 middle_name aanwezig moet zijn, als je die vervangt door een * kan het wel weer.

Over die eerste:
stel alleen last_name: triviaal
alleen first_name: dan pak je dus (first_name, (a+, b) | c?), voor het tweede gedeelte kan je kiezen uit (a+, b) en c?, je kiest voor c? en 'zegt' daar nee tegen, je houdt dus alleen first_name over.
first_name en last_name, zie hierboven, alleen zeg je tegen c? ja.
first_name met een willekeurige (1+) hoeveelheid middlenames kies je de middelste voor.

Waarschijnlijk is het zo opgeschreven zodat je zoveel mogelijk met ? en + en | in aanraking komt ofzo...

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 01-09 21:49
sjiiiit,

hier begrijp ik nog steeds niet veel van :{
(ligt ongetwijfeld aan mij ;))

maar middle_name moest ook 1 of meer zijn (tenzij ik indefinite compleet verkeerd interpreteer, maar in dat geval snap ik de 'juiste' oplossing ook niet), dus vandaar + (bij mijn eigen 'oplossing') (staat ook bij de eerste btw)

En inderdaad, deze paragraaf gaat expliciet over 'the number of children', 'choices' en 'parentheses' :7

Verwijderd

DTD zuigt, lang leve XML Schema :+

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 01-09 21:49
da's hoofdstuk 16 :+

ik ben nu bij hoofdstuk 3 ... first things first please :)

  • tomato
  • Registratie: November 1999
  • Niet online
DTD's zuigen ja, XML Schema ook. Lang leve RELAX NG :+

  • tomato
  • Registratie: November 1999
  • Niet online
<!ELEMENT name (last_name | (first_name, ( (middle_name+, last_name) | (last_name?) ) ) >
Ik denk dat je kunt volgen dat we dit zo kunnen zien:


code:
1
2
3
4
5
6
7
8
9
10
11
last_name
OF
(
   first_name
   EN
   (
      (middle_name+ EN last_name)
      OF
      last_name?
   )
)


We kunnen dus eerst kiezen voor alleen 'last_name', deze hebben we dus vast.

Als we daar niet voor kiezen krijgen we sowieso eerst een 'first_name', dat klopt ook. In dat geval moet daar nog iets achter volgen, we kunnen weer kiezen. Laten we eerste de laatste optie bekijken, 0 of 1 keer 'last_name'. Kiezen we voor 0 keer 'last_name', dan hebben we in totaal alleen 'first_name'.

Kiezen we voor 1 keer 'last_name', dan hebben we een 'first_name' en een 'last_name', met niets daar tussen.

Gaan we terug naar de vorige keuze, daar konden we nog 1 of meer keer 'middle_name' en 1 keer 'last_name' kiezen. Aangezien we al 'first_name' hadden, komt dat altijd uit op een 'first_name' en 1 of meer keer 'middle_name' en 1 'last_name'.

Nu hebben we alle opties bekeken, ze voldoen allemaal aan de opdracht en ook alle mogelijkheden uit die opdracht zijn gedekt.

Je verwarring over de 'middle_name+' (dus 1 of meer keer), heeft te maken met het feit dat 0 keer 'middle_name' te bereiken is via een andere weg. Er zou in het voorbeeld ook een * gebruikt mogen worden in plaats van de +, maar dat voegt niets toe.

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 01-09 21:49
thanks tomato, 't begint al wat duidelijker te worden :Y)

Maar nu even terug naar mijn (mis-)vatting @ eerste post:
<!ELEMENT name (first_name | last_name | (first_name, middle_name+, last_name) ) >
als ik nou middle_name+ vervang door middle_name* , leest dat volgens mij als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
first_name
OF
last_name
OF
( 
    first_name
    EN
    "nul of meer" middle_name
    EN
    last_name
)


dan ben ik er toch ook :?

(als ik die engelse vraagstelling goed interpreteer, that is.)

Stel dat je wil zeggen dat een naam gedefinieerd wordt door alleen een voornaam, alleen een achternaam, of een voornaam en een achternaam en een onbepaald aantal 'tweede' namen.

ik lees hieruit dat als er een voornaam EN een achternaam is, dat er dan een onbepaald (dus ook 0 !) aantal 'tweede' namen moet zijn.

Lijkt mij eigenlijk nog steeds dat mijn definitie dan (ook) goed is; alhoewel 't minder wiskundig (pretty darn straightforward) geschreven is.

bwaah *puzzled* :X
Ik ga er maar eens een nachtje over slapen denk ik :+

  • CubicQ
  • Registratie: September 1999
  • Laatst online: 07:48
ja, met * is hij goed. Er zijn meestal wel meer manieren om dit soort dingen op te schrijven. In dit geval vind ik die manier van jou (wel die goede, met de * natuurlijk :)) eigenlijk ook wel mooier, ziet er voor mijn gevoel een stuk logischer uit.

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 01-09 21:49
CubicQ schreef op 01 augustus 2002 @ 20:56:
ja, met * is hij goed. Er zijn meestal wel meer manieren om dit soort dingen op te schrijven. In dit geval vind ik die manier van jou (wel die goede, met de * natuurlijk :)) eigenlijk ook wel mooier, ziet er voor mijn gevoel een stuk logischer uit.
*D

ok thanks, in dat geval twijfel ik toch niet meer zo erg aan mezelf :+

ik vind mijn notatie ook een stuk simpeler om te lezen eigenlijk. Maar zoals al gezegd: 't ging voornamelijk om 't leermoment bij dat boek-voorbeeld,. en daar zijn ze bij O'Reilly toch weer eens in geslaagd :7
Pagina: 1