Search code examples
javahtmlxmldtd

Enumeration and Plus sign together in DTD file?


I have the following .dtd file

<!ELEMENT TVSCHEDULE (CHANNEL+)>
    <!ELEMENT CHANNEL (BANNER,DAY+)>
    <!ELEMENT BANNER (#PCDATA)>

    <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
    <!ELEMENT HOLIDAY (#PCDATA)>
    <!ELEMENT DATE (#PCDATA)>

    <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
    <!ELEMENT TIME (#PCDATA)>
    <!ELEMENT TITLE (#PCDATA)>
    <!ELEMENT DESCRIPTION (#PCDATA)>

    <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
    <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
    <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
    <!ATTLIST TITLE RATING CDATA #IMPLIED>
    <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

I don't quite understand this line:

    <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>

For the element DAY, it has DATE and Enumeration+ (either HOLIDAY or PROGRAMSLOT+), in the following statements, which one is correct?

A. DAY element only contains DATE and multiple HOLIDAY only

B. DAY element only contains DATE and multiple PROGRAMSLOT only

C. DAY element contains DATE and multiple HOLIDAY & PROGRAMSLOT

I don't understand why it can't be simplified to

<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT)+)>

Thanks


Solution

  • I think it is C: you must have a DAY followed by a sequence in which every item in the sequence is of type HOLIDAY or a sequence of PROGRAMSLOT

    Don't see the point of PROGRAMSLOT+. With

    <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT)+)>
    

    you can achieve the same flexibility. All following examples are correct in my opinion:

    DATE, HOLIDAY, HOLIDAY,HOLIDAY
    DATE, PROGRAMSLOT, PROGRAMSLOT, PROGRAMSLOT
    DATE, PROGRAMSLOT, HOLIDAY, HOLIDAY, PROGRAMSLOT
    DATE, HOLIDAY, PROGRAMSLOT, HOLIDAY, PROGRAMSLOT
    

    Following examples are invalid:

    DATE, DATE // DATE can only occur once
    DATE // the group of HOLIDAY OR PROGRAMLIST must occur at least once
    HOLIDAY, DATE // DATE must be the first element