Dziwna definicja tagu <DL> w dokumentacji

0

Ostatnio chcialem napisac swoj parser dla plikow HTML 4.01 w jezyku C. Dlatego siegnalem po specyfikacje HTML 4.01 na stronie W3C http://www.w3.org/TR/html4/ i w tagu DL mozemy przeczytac (s.106) jak i na samej gorze strony 34 jako przyklad:

<!-- definition lists - DT for term, DD for its definition -->

<!ELEMENT DL - - (DT|DD)+                           -- definition list -->

Natomiast co oznaczaja elementy skladni: (...), | oraz + czytamy na stronie 33:

( ... )
Delimits a group.
[...]
A+
A must occur one or more times.
[...]
A | B
Either A or B must occur, but not both.
[...]

Here are some examples from the HTML DTD:
[...]

<!ELEMENT DL - - (DT|DD)+ >

The DL element must contain one or more DT or DD elements in any order.

No wlasnie. "Element DL musi zawierac jeden lub wiecej elementow DT lub DD w dowolnej kolejnosci". Ponadto na stronie 107 podane sa nawet 2 przyklady uzycia (podam jeden z nich):

<DL>
  <DT>Dweeb
  <DD>young excitable person who may mature
    into a <EM>Nerd</EM> or <EM>Geek</EM>

  <DT>Hacker
  <DD>a cleverprogrammer

  <DT>Nerd
  <DD>technically bright but socially inept person
</DL>

Czyli jak widac w tagu DL jednak moga pojawic sie tagi DT i DD razem. Pojawienie sie jednego wcale nie wyklucza pojawienie sie drugiego mimo, ze w definicji elementu DL sa zgrupowane alternatywa wykluczajaca |. Z tego co wiem to "either ... or ..." = albo ... albo ...

Jak to jest w koncu? Czyzby blad dokumentacji? Czy ja tez czegos niedoczytalem?

0

http://pl.wikipedia.org/wiki/Wyra%C5%BCenie_regularne

"Pionowa kreska (ang. pipeline) | to operator OR np. jeśli napiszemy a|b|c oznacza to, że w danym wyrażeniu może wystąpić a lub b lub c."

0

Proponuje jeszcze raz UWAZNIE przeczytac to co napisalem oraz specyfikacje zanim cokolwiek napiszesz.

The content model of an element is specified with the following syntax. Please note that the list below is a simplification of the full SGML syntax rules and does not address, e.g., precedences.

( ... )
Delimits a group.
A
A must occur, one time only.
A+
A must occur one or more times.
A?
A must occur zero or one time.
A*
A may occur zero or more times.
+(A)
A may occur.
-(A)
A must not occur.
A | B
Either A or B must occur, but not both.
A , B
Both A and B must occur, in that order.
A & B
Both A and B must occur, in any order.

Skladnia DTD nie pokrywa sie ze skladnia wyrazen regularnych.
Either A or B must occur, but not both. = Albo A albo B musi wystapic, ale nie razem.
W DTD kreska pionowa | oznacza alternatywe wykluczajaca XOR a nie OR.

1

Tak, ale masz to wszystko zapięte w zwielokrotnienie. "(DT|DD)+" oznacza "DT albo DD" raz albo więcej razy po sobie. Więc de facto z każdym wystąpieniem "DT|DD" wybierasz jedno z nich i powtarzasz wszystko od nowa.

0

AAAAA no tak rzeczywiscie: Wczesniej myslalem ze to sie interpretuje w nastepujacy sposob:

  1. (DT|DD)+ najpierw wyrazenie w nawiasach czyli "wybierz jedno z dwoch: albo DT albo DD"
    zalozmy ze wewnatrz taga DL wystapilo jako pierwsze DT. Definicja zatem przyjmuje postac:
  2. (DT)+ nawiasy teraz grupuja jeden element zatem mozna je opuscic. Zatem mamy:
  3. DT+ plus oznacza ze skoro wczesniej wewnatrz taga DL wystapilo DT to teraz moga co najwyzej wystepowac tylko DT (bez DD).

Rev wielkie dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1