diff options
author | Mike Hommey <mh@glandium.org> | 2004-03-25 06:59:32 +0000 |
---|---|---|
committer | Mike Hommey <mh@glandium.org> | 2004-03-25 06:59:32 +0000 |
commit | d09ab089457ae3c20cc98f9afa03379c6ebf9598 (patch) | |
tree | f34702d634972abbc1b478a4529149b548a1cd4c /test/valid/dtds | |
download | libxml2-upstream/2.6.8.tar.gz |
[svn-inject] Installing original source versionupstream/2.6.8
Diffstat (limited to 'test/valid/dtds')
-rw-r--r-- | test/valid/dtds/127772.dtd | 7 | ||||
-rw-r--r-- | test/valid/dtds/NewsMLv1.0.dtd | 1578 | ||||
-rw-r--r-- | test/valid/dtds/destfoo.ent | 1 | ||||
-rw-r--r-- | test/valid/dtds/nitf-2-5.dtd | 1004 | ||||
-rwxr-xr-x | test/valid/dtds/spec.dtd | 972 | ||||
-rw-r--r-- | test/valid/dtds/xhtml-lat1.ent | 196 | ||||
-rw-r--r-- | test/valid/dtds/xhtml-special.ent | 79 | ||||
-rw-r--r-- | test/valid/dtds/xhtml-symbol.ent | 242 | ||||
-rw-r--r-- | test/valid/dtds/xhtml.cat | 14 | ||||
-rw-r--r-- | test/valid/dtds/xhtml1-frameset.dtd | 1223 | ||||
-rw-r--r-- | test/valid/dtds/xhtml1-strict.dtd | 986 | ||||
-rw-r--r-- | test/valid/dtds/xhtml1-transitional.dtd | 1194 | ||||
-rw-r--r-- | test/valid/dtds/xhtml1.dcl | 179 | ||||
-rw-r--r-- | test/valid/dtds/xmlspec.dtd | 1102 |
14 files changed, 8777 insertions, 0 deletions
diff --git a/test/valid/dtds/127772.dtd b/test/valid/dtds/127772.dtd new file mode 100644 index 0000000..873fb35 --- /dev/null +++ b/test/valid/dtds/127772.dtd @@ -0,0 +1,7 @@ +<!ELEMENT a (b*)> + +<!ELEMENT b (#PCDATA)> +<!ATTLIST b xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink' + xlink:type (simple) #FIXED 'simple' + xlink:href CDATA #IMPLIED> + diff --git a/test/valid/dtds/NewsMLv1.0.dtd b/test/valid/dtds/NewsMLv1.0.dtd new file mode 100644 index 0000000..5799b29 --- /dev/null +++ b/test/valid/dtds/NewsMLv1.0.dtd @@ -0,0 +1,1578 @@ +<!--
+ ===========================================
+ NewsML Document Type Definition Version 1.0
+ ===========================================
+ International Press Telecommunications Council
+ 6 October 2000
+ Copyright (c) IPTC, 2000
+ All rights reserved
+ NewsML is a trademark of IPTC
+
+ ======================================
+ DO NOT REMOVE THESE LICENCE CONDITIONS
+ ======================================
+ LICENCE OF THE IPTC NewsML TRADEMARK TO NON-MEMBERS OF THE IPTC
+
+Use of the IPTC trademark shall be licensed by the IPTC ("the Licensor") to a
+Non-Member ("the Licensee") in consideration of the following obligations
+undertaken by the Licensee under the terms of this contract.
+
+ 1. The Licensee recognises the Licensor as the sole owner of the intellectual
+ property protected by the trademark.
+
+ 2. The Licensee recognises that the Licensor has the right to grant licenses
+ of the intellectual property protected by the trademark and has agreed to
+ grant such a licence to the Licensee in the terms set out in this contract.
+
+ 3. The Licensee shall not during the subsistence of this contract or at any
+ future time register to use in its own name as proprietor any of the
+ intellectual property protected by the trademark.
+
+ 4. The Licensee shall not claim any right title or interest in the
+ intellectual property or any part of it save as is granted by this contract.
+
+ 5. The Licensee shall immediately call to the attention of the Licensor the use
+ of any part of the intellectual property by any third party or any activity
+ of any third party which might in the opinion of the Licensee amount to
+ infringement of the rights protected by the trademark.
+
+ 6. The Licensee shall not assign the benefit of this contract or grant any
+ sub-licence without the prior written consent of the Licensor.
+
+ 7. Use of the IPTC trademark is licensed only to those Licensees who comply
+ with the requirements of the official published description of NewsML.
+
+ 8. The Licensee promises to respect the integrity and quality standard of the
+ trademark and shall refrain from all acts and omissions which threaten the
+ integrity of the trademark as a mark of quality.
+
+ 9. The Licensee shall communicate immediately to the IPTC any instances of
+ actual or suspected misuse or non-compliance with the official published
+ description of NewsML which come to the attention of the Licensee.
+
+10. The Licensee shall, at the request of the IPTC Management Committee acting
+ unanimously, accede to any reasonable request of the IPTC to inspect the
+ address of the Licensee to verify compliance and each Licensee shall afford
+ to the IPTC such assistance as is requested by the IPTC in response to the
+ latter's reasonable enquiries in instances of suspected non-compliance with
+ the official published description of NewsML requirements.
+
+The Licensee shall from time to time provide the IPTC with the full address of
+its place of business and that place will be deemed the Licensee's address.
+
+The IPTC reserves the right to terminate the use of the trademark by the
+Licensee at any time without notice or without the need to give reasons to the
+Licensee for such termination.
+
+This contract shall be governed and construed in accordance with the laws of
+England and Wales whose courts shall be courts of competent jurisdiction.
+-->
+<!--
+ ================
+ NOTE ON SPELLING
+ ================
+NewsML element and attribute names use US-English spellings. With this
+exception, this DTD and its accompanying specification use British English
+spellings.
+-->
+<!--
+ =============================
+ PARAMETER ENTITY DECLARATIONS
+ =============================
+-->
+<!--
+================================================================================
+ Attribute sets
+================================================================================
+-->
+<!--
+================================== assignment ==================================
+AssignedBy
+==========
+An identifier for the party assigning a piece of metadata. This can be a
+string that designates the party informally (for example, a person's name),
+or a pointer in the form a fragment identifier consisting of a # character
+followed by the Duid of a Topic corresponding to the party.
+
+Importance
+==========
+An indication of the importance the party assigning a piece of metadata
+attaches to it. The value of the Importance attribute is a formal name for a
+level of importance. Its meaning and permitted values are determined by a
+controlled vocabulary.
+
+Confidence
+==========
+An indication of the confidence with which a piece of metadata has been
+assigned. The value of the Confidence attribute is a formal name for a
+degree of confidence. Its meaning and permitted values are determined by a
+controlled vocabulary.
+
+HowPresent
+==========
+An indication of the way in which a piece of metadata applies. The value of
+the HowPresent attribute is a formal name for the way the metadata applies.
+Its meaning and permitted values are determined by a controlled vocabulary.
+
+DateAndTime
+===========
+The date and (optionally) time at which a piece of metadata was assigned.
+
+Uses the format CCYYMMDDTHHMMSS{+or-}HHMM (century, year, month, day, time
+separator, hours, minutes, seconds, timezone separator, hours, minutes). If
+only the Date is needed, then the substring from T onwards may be omitted.
+
+This is the Basic Format defined by ISO 8601. CCYY is a 4-digit year number.
+MM is a 2-digit month number. DD is a 2-digit day number. T is the letter 'T'.
+HH is a 2-digit hour number (using a 24-hour clock). MM is a 2 digit minute
+number. (Note that midnight may be represented as 2400 or 240000 on the date
+of the day that is ending, or as 0000 or 000000 on the date of the day that is
+beginning.)
+
+{+or-} is the '+' character or the '-' character, and the following HHMM are
+hours and minutes of offset from Universal Co-ordinated Time (UTC) as defined
+by ISO 8601. If the time is being expressed in UTC, then the timezone offset
+may be '+0000' or '-0000'. If the time is behind UTC, the timezone separator
+is '-'. If the time is ahead of UTC the timezone separator is '+'.
+
+Example: 10:27 p.m. in New York on 31 December 2000 would be expressed as
+"20001231T222700-0500" as New York is five hours behind UTC in winter.
+At the same moment in London, the date and time would be expressed as
+time would be expressed as "20010101T032700+0000" or as , "20010101T00+0000", as
+in London, it is now 3:27 a.m. on 1 January 2001. At the same moment in Paris,
+the date and time would be expressed as "20010101T042700+0100", as Paris is one
+hour ahead of UTC in winter, and it is now 4:27 a.m. on 1 January 2001.
+================================================================================
+
+-->
+<!ENTITY % assignment " AssignedBy CDATA #IMPLIED
+ Importance CDATA #IMPLIED
+ Confidence CDATA #IMPLIED
+ HowPresent CDATA #IMPLIED
+ DateAndTime CDATA #IMPLIED">
+
+<!--
+================================= formalname ===================================
+
+FormalName
+==========
+A string of characters whose meaning is determined by a controlled vocabulary.
+
+Vocabulary
+==========
+The Vocabulary attribute, if present, provides a pointer to a TopicSet which is
+the controlled vocabulary that can be used to resolve the meaning of the
+FormalName. The value of the Vocabulary attribute is an http URL or a NewsML
+URN, or the # character followed by the value of the Duid attribute of the a
+TopicSet in the current document.
+
+If there is no Vocabulary attribute, then the controlled vocabulary to be used
+is located by the following algorithm:
+- Proceed to the parent of the current element.
+- If it has a Catalog element as its immediate child, see whether that Catalog
+ contains a Resource element whose DefaultVocabularyFor child contains an XPath
+ pattern that is matched by the current element. If so, then the controlled
+ vocabulary is the resource identified by that Resource element.
+- If the parent does not meet the above condition, proceed to its parent and
+ check the same condition.
+- Continue until a vocabulary is found, or no further parent elements are
+ available because the root element has been reached and it too fails to meet
+ the condition.
+
+If there is no Vocabulary attribute and the above algorithm fails to identify
+a resource that serves as the controlled vocabulary, there is an error, which
+the NewsML system may signal to the user.
+
+The NewsML system may also signal an error if a vocabulary is successfully
+identified, but it contains no item that matches the value of the FormalName
+whose meaning is sought.
+
+Scheme
+======
+The Scheme attribute, if present, serves to distinguish which of possibly
+multiple naming schemes in the controlled vocabulary is the one that governs
+this FormalName. For a match to be obtained within the controlled vocabulary,
+the rule is that the FormalName and the Scheme must both match. If there is
+no Scheme attribute on the current element, the match will be to an item in
+the vocabulary that has the current formal name and no scheme. If there is a
+Scheme attribute on the current element, then both the formal name and the
+scheme in the controlled vocabulary must match.
+================================================================================
+-->
+<!ENTITY % formalname " FormalName CDATA #REQUIRED
+ Vocabulary CDATA #IMPLIED
+ Scheme CDATA #IMPLIED">
+
+<!--
+=================================== localid ====================================
+
+Duid
+====
+Duid is a "Document-unique Identifier". It must satisfy the rules for XML ID
+attributes: it must only contain name characters, and it must start with a
+name-start character (not a digit). Its value must be unique within any NewsML
+document.
+
+Every NewsML element type has Duid as an optional attribute. Combined with the
+Identifier element, providing a value for the Duid of any element in a NewsML
+document makes the element globally identifiable. The Identifier element gives
+global identification to the document, and the Duid provides local
+identification for the element within the document.
+
+Euid
+====
+Euid is an "Element-unique Identifier". Its value must be unique among elements
+of the same element-type and having the same parent element.
+
+Use of Euid attribute makes it possible to identify any NewsML element within
+the context of its local branch of the NewsML document tree. This makes it
+possible to copy, or include by reference, subtrees into new combinations in
+ways that would break the uniqueness of Duids (thereby forcing new Duids to be
+allocated), but still being able to retain the identity of each element. If
+Euids are maintained at every level, it is possible to identify, for example
+"The ContentItem whose Euid is abc within the NewsComponent whose Euid is def".
+Such identification patterns would be preserved even after "pruning and
+grafting" of subtrees.
+================================================================================
+-->
+<!ENTITY % localid " Duid ID #IMPLIED
+ Euid CDATA #IMPLIED">
+
+<!--
+================================================================================
+ Content Models
+================================================================================
+-->
+<!--
+===================================== data =====================================
+Where data is included, it may be directly in the form of a DataContent element,
+or in the form of DataContent wrapped in an Encoding element, or by reference
+through an Href attribute, in which case neither a DataContent nor an Encoding
+element will be present.
+================================================================================
+-->
+<!ENTITY % data " (Encoding
+ | DataContent )?">
+
+<!--
+==================================== party =====================================
+Person, organisation or company playing a specific role in the
+news workflow. The role being played is determined by the parent element. More
+information about it can be provided in the optional Comment subelements.
+================================================================================
+
+-->
+<!ENTITY % party " (Comment*
+ , Party+ )">
+
+<!--
+ =========================
+ ELEMENT TYPE DECLARATIONS
+ =========================
+-->
+<!--
+============================ AdministrativeMetadata ============================
+Information about the provenance of a NewsComponent.
+================================================================================
+-->
+<!ELEMENT AdministrativeMetadata (Catalog? , FileName? , SystemIdentifier? , Provider? , Creator? , Source* , Contributor* , Property* )>
+<!ATTLIST AdministrativeMetadata %localid; >
+<!--
+
+================================ AssociatedWith ================================
+A reference to a NewsItem with which this one is associated (for example, a
+series of articles, or a collection of photos, of which it is a part). The
+NewsItem attribute identifies the relevant NewsItem. Its value can be an
+http URL or a NewsML URN as described in the comment to PublicIdentifier. The
+Comment can be used to indicate the nature of the association.
+================================================================================
+
+-->
+<!ELEMENT AssociatedWith (Comment* )>
+<!ATTLIST AssociatedWith %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================ BasisForChoice ================================
+The content of this element is an XPath statement or element-type name
+identifying information within each NewsComponent or ContentItem that can be
+used as a basis for choice between equivalent NewsComponents or ContentItems.
+The root of the XPath corresponds to the NewsComponent or ContentItem itself.
+The optional Rank attribute allows providers to place a numerical order on the
+importance they think should be attached to the different bases for choice.
+Smaller numbers represent higher importance.
+================================================================================
+-->
+<!ELEMENT BasisForChoice (#PCDATA )>
+<!ATTLIST BasisForChoice %localid;
+ Rank CDATA #IMPLIED >
+<!--
+
+==================================== ByLine ====================================
+A natural-language statement of the author/creator information.
+================================================================================
+-->
+<!ELEMENT ByLine (#PCDATA | Origin )*>
+<!ATTLIST ByLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=================================== Catalog ====================================
+A container for Resource and TopicUse elements. Resource elements map URNs to
+URLs and indicate default vocabularies which apply to the formal names of
+certain elements within the subtree that begins with the immediate parent of
+the Catalog element. TopicUse elements indicate where in the NewsML document
+certain Topics are used. The optional Href attribute provides a pointer to
+a Catalog element elsewhere in this or another document. Its value consists of
+a # character followed by the value of the Duid attribute of the referenced
+Catalog element and preceded, if the referenced Catalog is not in the current
+document, by an http URL or a NewsML URN identifying the document or NewsItem
+in which the Catalog appears. If the Href attribute is present on a Catalog
+element, then that element should be empty. If it contains subelements, the
+NewsML system may signal an error.
+================================================================================
+-->
+<!ELEMENT Catalog (Resource* , TopicUse* )>
+<!ATTLIST Catalog %localid;
+ Href CDATA #IMPLIED >
+<!--
+=============================== Characteristics ================================
+Information about the physical characteristics of a ContentItem.
+================================================================================
+-->
+<!ELEMENT Characteristics (SizeInBytes? , Property* )>
+<!ATTLIST Characteristics %localid; >
+<!--
+=================================== Comment ====================================
+A natural-language description of, or statement about, the current element. The
+optional TranslationOf attribute is a pointer to another Comment element, of
+which this one is a direct translation.
+================================================================================
+-->
+<!ELEMENT Comment (#PCDATA )>
+<!ATTLIST Comment %localid;
+ xml:lang CDATA #IMPLIED
+ TranslationOf IDREF #IMPLIED >
+<!--
+================================= ContentItem ==================================
+A news object that carries or identifies content intended for presentation to
+humans.
+================================================================================
+-->
+<!ELEMENT ContentItem (Comment* , Catalog? , MediaType? , Format? , MimeType? , Notation? , Characteristics? , %data; )>
+<!ATTLIST ContentItem %localid;
+ Href CDATA #IMPLIED >
+<!--
+================================= Contributor ==================================
+An individual and/or company or organisation that modified or enhanced a news
+object after its creation.
+================================================================================
+-->
+<!ELEMENT Contributor (%party; )>
+<!ATTLIST Contributor %localid; >
+<!--
+================================== Copyright ===================================
+The copyright that pertains to a news object.
+================================================================================
+-->
+<!ELEMENT Copyright (Comment* , CopyrightHolder , CopyrightDate )>
+<!ATTLIST Copyright %localid;
+ %assignment; >
+<!--
+================================ CopyrightDate =================================
+A natural-language statement of the copyright date.
+================================================================================
+
+-->
+<!ELEMENT CopyrightDate (#PCDATA | Origin )*>
+<!ATTLIST CopyrightDate %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=============================== CopyrightHolder ================================
+A natural-language statement indicating who owns the copyright.
+================================================================================
+-->
+<!ELEMENT CopyrightHolder (#PCDATA | Origin )*>
+<!ATTLIST CopyrightHolder %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ CopyrightLine =================================
+A natural-language statement of the copyright information.
+================================================================================
+-->
+<!ELEMENT CopyrightLine (#PCDATA | Origin )*>
+<!ATTLIST CopyrightLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=================================== Creator ====================================
+An individual and/or company or organisation that created a news object.
+================================================================================
+-->
+<!ELEMENT Creator (%party; )>
+<!ATTLIST Creator %localid; >
+<!--
+================================== CreditLine ==================================
+A natural-language statement of credit information.
+================================================================================
+-->
+<!ELEMENT CreditLine (#PCDATA | Origin )*>
+<!ATTLIST CreditLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================= DataContent ==================================
+The data that carries the content of a ContentItem.
+================================================================================
+-->
+<!ELEMENT DataContent ANY>
+<!ATTLIST DataContent %localid; >
+<!--
+================================= DateAndTime ==================================
+A formal representation of a date and, optionally, time, expressed in ISO 8601
+Basic Format, as described in the comment to the DateAndTime attribute within
+the assignment ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT DateAndTime (#PCDATA )>
+<!ATTLIST DateAndTime %localid; >
+<!--
+==================================== DateId ====================================
+A date identifier of a NewsItem in short ISO 8601 Basic Format (CCYYMMDD), as
+described in the comment to the DateAndTime attribute within the assignment
+ENTITY declaration above. The DateId is part of the formal identification of the
+NewsItem, and must remain the same through successive revisions of the same
+NewsItem.
+================================================================================
+-->
+<!ELEMENT DateId (#PCDATA )>
+
+<!--
+================================== DateLabel ===================================
+A string representation of a date or date and time, used by human users to help
+identify a NewsItem.
+================================================================================
+-->
+<!ELEMENT DateLabel (#PCDATA )>
+<!ATTLIST DateLabel %localid; >
+<!--
+=================================== DateLine ===================================
+A natural-language statement of the date and/or place of creation.
+================================================================================
+-->
+<!ELEMENT DateLine (#PCDATA | Origin )*>
+<!ATTLIST DateLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+============================ DefaultVocabularyFor ==============================
+An indication that the parent Resource provides the default vocabulary that
+determines the meanings and permitted values of the data occurring in a
+particular part of a NewsML document subtree. The Context attribute is an
+XPath statement identifying the data to which the default vocabulary applies.
+The optional Scheme attribute identifies the relevant naming scheme if the
+Resource contains more than one naming scheme. If the Resource is a NewsML
+TopicSet, then the meaning of the data identified by the Context is provided
+by the Topic whose FormalName subelement matches that data. If the Resource is
+not a NewsML TopicSet, then the way in which it is interpreted in order to
+provide a meaning for the data is not defined by NewsML but by the authority
+that governs whatever format the Resource uses.
+
+Example:
+<DescriptiveMetadata>
+ <Catalog>
+ <Resource Duid="resource1">
+ <Urn>urn:newsml:iptc.org:20001006:Ranking:1</Urn>
+ <Url>www.iptc.com/vocabularies/iptc-rank.xml</Url>
+ <DefaultVocabularyFor Context="@Confidence"/>
+ <DefaultVocabularyFor Context="@Importance"/>
+ </Resource>
+ <Resource Duid="resource2">
+ <Urn>urn:newsml:iptc.org:20001006:TopicTypes:1</Urn>
+ <Url>www.iptc.com/vocabularies/iptc-topictype.xml</Url>
+ <DefaultVocabularyFor Context="TopicType@FormalName"/>
+ </Resource>
+ </Catalog>
+ <TopicSet>
+ <Topic Duid="topic1">
+ <TopicType FormalName="Person">
+ <Description Variant="Name">Bill Clinton</Description>
+ <Description Variant="Position">President of the USA</Description>
+ </Topic>
+ </TopicSet>
+ <TopicOccurrence
+ AssignedBy="Desk Editor"
+ Confidence="High"
+ HowPresent="principal subject"
+ Topic="#topic1"/>
+</DescriptiveMetadata>
+================================================================================
+-->
+<!ELEMENT DefaultVocabularyFor EMPTY>
+<!ATTLIST DefaultVocabularyFor %localid;
+ Context CDATA #REQUIRED
+ Scheme CDATA #IMPLIED >
+<!--
+==================================== Delete ====================================
+An instruction to delete an element within a NewsItem. The NewsItem is
+the previous revision of the current one, and the element to be deleted is the
+one whose Duid value is equal to the value of the Delete element's DuidRef
+attribute.
+================================================================================
+-->
+<!ELEMENT Delete EMPTY>
+<!ATTLIST Delete %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================= DerivedFrom ==================================
+A reference to an NewsItem from which this one is derived. The NewsItem attribute
+identifies the relevant NewsItem. Its value can be an http URL or a NewsML URN
+as described in the comment to PublicIdentifier.
+================================================================================
+-->
+<!ELEMENT DerivedFrom (Comment* )>
+<!ATTLIST DerivedFrom %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================= Description ==================================
+A description that identifies a Topic, thereby indicating the meaning of a
+formal name associated with that Topic. The xml:lang attribute indicates what
+language the description is in. The optional Variant attribute allows multiple
+descriptions to be given in the same language, and meaningfully distinguished
+from one another.
+================================================================================
+-->
+<!ELEMENT Description (#PCDATA )>
+<!ATTLIST Description %localid;
+ xml:lang CDATA #IMPLIED
+ Variant CDATA #IMPLIED >
+<!--
+============================= DescriptiveMetadata ==============================
+Information describing the content of a NewsComponent.
+================================================================================
+-->
+<!ELEMENT DescriptiveMetadata (Catalog? , Language* , Genre? , SubjectCode* , OfInterestTo* , TopicOccurrence* , Property* )>
+<!ATTLIST DescriptiveMetadata %localid;
+ %assignment; >
+<!--
+=================================== Encoding ===================================
+The encoding of the data comprising the content of a ContentItem.
+================================================================================
+-->
+<!ELEMENT Encoding %data;>
+<!ATTLIST Encoding %localid;
+ Notation CDATA #REQUIRED >
+<!--
+=================================== EndDate ====================================
+A natural-language statement of the date at which specified usage rights come
+to an end.
+================================================================================
+-->
+<!ELEMENT EndDate (#PCDATA | Origin )*>
+<!ATTLIST EndDate %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+=================================== FileName ===================================
+The suggested or actual storage file name for a NewsItem.
+================================================================================
+-->
+<!ELEMENT FileName (#PCDATA )>
+<!ATTLIST FileName %localid; >
+<!--
+================================= FirstCreated =================================
+The date and, optionally, time at which a NewsItem was first created, expressed
+in ISO 8601 Basic Format, as described in the comment to the DateAndTime
+attribute within the assignment ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT FirstCreated (#PCDATA )>
+<!ATTLIST FirstCreated %localid; >
+<!--
+================================= FormalName ===================================
+A string of characters whose meaning is determined by a naming scheme within a
+controlled vocabulary. The controlled vocabulary may (but is not required to)
+take the form of a NewsML TopicSet. The optional Scheme attribute determines
+which naming scheme applies, when several exist within the same controlled
+vocabulary.
+================================================================================
+-->
+<!ELEMENT FormalName (#PCDATA )>
+<!ATTLIST FormalName %localid;
+ Scheme CDATA #IMPLIED >
+<!--
+==================================== Format ====================================
+An indication of the format of a ContentItem. The value of the FormalName
+attribute is a formal name for the Format. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Format EMPTY>
+<!ATTLIST Format %localid;
+ %formalname; >
+<!--
+================================= FutureStatus =================================
+An indication of the status a NewsItem will have at a specified future date. The
+value of the FormalName attribute is a formal name for the FutureStatus. Its
+meaning is determined by a controlled vocabulary as described in the comment
+to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT FutureStatus EMPTY>
+<!ATTLIST FutureStatus %localid;
+ %formalname; >
+<!--
+==================================== Genre =====================================
+An indication of the Genre of a NewsComponent. The value of the FormalName
+attribute is a formal name for the Genre. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Genre EMPTY>
+<!ATTLIST Genre %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================== Geography ===================================
+A natural-language statement of the geographical area or areas to which
+specified usage rights apply.
+================================================================================
+-->
+<!ELEMENT Geography (#PCDATA | Origin )*>
+<!ATTLIST Geography %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+=================================== HeadLine ===================================
+A displayable headline.
+================================================================================
+-->
+<!ELEMENT HeadLine (#PCDATA | Origin )*>
+<!ATTLIST HeadLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ Identification ================================
+Identification information for the NewsItem.
+================================================================================
+-->
+<!ELEMENT Identification (NewsIdentifier , NameLabel? , DateLabel? , Label* )>
+<!ATTLIST Identification %localid; >
+<!--
+================================= InsertAfter ==================================
+An instruction to insert content after a designated element within a NewsItem.
+The content to be inserted is the content of the InsertAfter element. The
+NewsItem into which it is to be inserted is the previous revision of the current
+one, and the element after which it is to be inserted is the one whose Duid
+value is equal to the value of the InsertAfter element's DuidRef attribute.
+================================================================================
+-->
+<!ELEMENT InsertAfter ANY>
+<!ATTLIST InsertAfter %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================= InsertBefore =================================
+An instruction to insert content before a designated element within a NewsItem.
+The content to be inserted is the content of the InsertBefore element. The
+NewsItem into which it is to be inserted is the previous revision of the current
+one, and the element before which it is to be inserted is the one whose Duid
+value is equal to the value of the InsertBefore element's DuidRef attribute.
+================================================================================
+-->
+<!ELEMENT InsertBefore ANY>
+<!ATTLIST InsertBefore %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================= Instruction ==================================
+An instruction from a news provider to the recipient of a NewsItem. A special
+case of Instruction is an indication of the effect the current revision of a
+NewsItem has on the status of any previous revisions of the NewsItem that may
+still be on the recipient's system. In this case, it will contain one or more
+RevisionStatus elements. Otherwise, the value of the FormalName attribute is a
+formal name for the Instruction, and its meaning is determined by a controlled
+vocabulary as described in the comment to the formalname ENTITY declaration
+above.
+================================================================================
+-->
+<!ELEMENT Instruction (RevisionStatus* )>
+<!ATTLIST Instruction %localid;
+ %formalname; >
+<!--
+================================= KeywordLine ==================================
+A displayable set of keywords relevant to a news object. This can be used by a
+NewsML system to assist manual or automated searches.
+================================================================================
+-->
+<!ELEMENT KeywordLine (#PCDATA | Origin )*>
+<!ATTLIST KeywordLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+==================================== Label =====================================
+A human-readable label for a NewsItem.
+================================================================================
+-->
+<!ELEMENT Label (LabelType , LabelText )>
+<!ATTLIST Label %localid; >
+<!--
+=================================== LabelText ==================================
+The text that constitutes a Label of a given LabelType.
+================================================================================
+-->
+<!ELEMENT LabelText (#PCDATA )>
+<!ATTLIST LabelText %localid; >
+<!--
+================================= LabelType ====================================
+A user-defined type of label. The value of the FormalName attribute is a formal
+name for the LabelType. Its meaning and permitted values are determined by a
+controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT LabelType EMPTY>
+<!ATTLIST LabelType %localid;
+ %formalname; >
+<!--
+=================================== Language ===================================
+An indication of the, or a, language used in a content item. The value of the
+FormalName attribute is a formal name for the Language. Its meaning and
+permitted values are determined by a controlled vocabulary as described in the
+comment to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Language EMPTY>
+<!ATTLIST Language %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================= Limitations ==================================
+A natural-language statement of the terms and conditions that apply to the
+specified usage rights.
+================================================================================
+-->
+<!ELEMENT Limitations (#PCDATA | Origin )*>
+<!ATTLIST Limitations %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+================================== MediaType ===================================
+An indication of the media type of a ContentItem. The value of the FormalName
+attribute is a formal name for the MediaType. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT MediaType EMPTY>
+<!ATTLIST MediaType %localid;
+ %formalname; >
+<!--
+=================================== Metadata ===================================
+An container for a user-defined type of metadata.
+================================================================================
+-->
+<!ELEMENT Metadata (Catalog? , MetadataType , Property+ )>
+<!ATTLIST Metadata %localid; >
+<!--
+=============================== MetadataType ===================================
+An indication of the type of metadata that is represented by the Property
+elements within this Metadata element. The value of the FormalName attribute is
+a formal name for the MetadataType. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT MetadataType EMPTY>
+<!ATTLIST MetadataType %localid;
+ %formalname; >
+<!--
+=================================== MimeType ===================================
+An indication of the MIME-type of a ContentItem. The value of the FormalName
+attribute is a formal name for the MimeType. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT MimeType EMPTY>
+<!ATTLIST MimeType %localid;
+ %formalname; >
+<!--
+================================== NameLabel ===================================
+A string used by human users as a name to help identify a NewsItem. Its form is
+determined by the provider. It might be identical to the textual content of
+the SlugLine element, for example, but even if this is so, the system should not
+process the NameLabel as a slugline. Nothing can be assumed about the nature of
+the string within NameLabel beyond the fact that it can help to identify the
+NewsItem to humans.
+================================================================================
+-->
+<!ELEMENT NameLabel (#PCDATA )>
+<!ATTLIST NameLabel %localid; >
+<!--
+================================ NewsComponent =================================
+A container for news objects, used to identify the role of news objects in
+relation to one another, and to ascribe metadata to them. The Essential
+attribute indicates whether the provider considers that this NewsComponent
+is essential to the meaning of the NewsComponent within which it is contained.
+The EquivalentsList attribute indicates whether or not the NewsItems or
+NewsItemRefs, NewsComponents or ContentItems contained within this one are
+equivalent to one another in content and/or meaning
+================================================================================
+-->
+<!ELEMENT NewsComponent (Comment* , Catalog? , TopicSet* , Role? , BasisForChoice* , NewsLines? , AdministrativeMetadata? , RightsMetadata? , DescriptiveMetadata? , Metadata* , ( (NewsItem | NewsItemRef )+ | NewsComponent+ | ContentItem+ )? )>
+<!ATTLIST NewsComponent %localid;
+ Essential (yes | no ) 'no'
+ EquivalentsList (yes | no ) 'no'
+ xml:lang CDATA #IMPLIED >
+<!--
+================================= NewsEnvelope =================================
+Information about the transmission of one or more NewsItems as a NewsML
+document.
+================================================================================
+-->
+<!ELEMENT NewsEnvelope (TransmissionId? , SentFrom? , SentTo? , DateAndTime , NewsService* , NewsProduct* , Priority? )>
+<!ATTLIST NewsEnvelope %localid; >
+<!--
+================================ NewsIdentifier ================================
+A globally unique identifier for a NewsItem.
+================================================================================
+-->
+<!ELEMENT NewsIdentifier (ProviderId , DateId , NewsItemId , RevisionId , PublicIdentifier )>
+
+<!--
+=================================== NewsItem ===================================
+A managed set of information representing a point of view, at a given time, on
+some event or events. Its Identification and NewsManagement provide
+manageability. It may contain either a NewsComponent, or one or more Updates
+that modify aspects of a previous Revision of the same NewsItem, or a
+TopicSet.
+================================================================================
+-->
+<!ELEMENT NewsItem (Comment* , Catalog? , Identification , NewsManagement , (NewsComponent | Update+ | TopicSet )? )>
+<!ATTLIST NewsItem %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================== NewsItemId ==================================
+An identifier for the NewsItem. The combination of NewsItemId and DateId must
+be unique among NewsItems that emanate from the same provider. Within these
+constraints, the NewsItemId can take any form the provider wishes. It may take
+the form of a name for the NewsItem that will be meaningful to humans, but this
+is not a requirement. The provider may optionally relate the values of
+NewsItemId to a controlled vocabulary, which is invoked by the Vocabulary
+attribute. The value ofthe Vocabulary attribute may be an http URL, a NewsML
+URN, or the # character followed by the value of the Duid attribute of a
+TopicSet in the current document. The Scheme attribute, if present, serves to
+distinguish which of possibly multiple naming schemes in the controlled
+vocabulary is the one that governs the NewsItemId.
+================================================================================
+-->
+<!ELEMENT NewsItemId (#PCDATA )>
+<!ATTLIST NewsItemId Vocabulary CDATA #IMPLIED
+ Scheme CDATA #IMPLIED >
+<!--
+================================= NewsItemRef ==================================
+A pointer to a NewsItem that is deemed to replace the NewsItemRef element. The
+NewsItem attribute is a pointer to the relevant NewsItem. Its value can be an
+http URL, or a NewsML URN as described in the comment to PublicIdentifier, or a
+fragment identifier consisting of a # character followed by the Duid of a
+NewsItem in the current document.
+================================================================================
+-->
+<!ELEMENT NewsItemRef (Comment* )>
+<!ATTLIST NewsItemRef %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================= NewsItemType =================================
+An indication of the type of a NewsItem. The value of the FormalName attribute
+is a formal name for the NewsItemType. Its meaning and permitted values are
+determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT NewsItemType EMPTY>
+<!ATTLIST NewsItemType %localid;
+ %formalname; >
+<!--
+=================================== NewsLine ===================================
+A newsline of a type not included in the NewsML specification.
+================================================================================
+-->
+<!ELEMENT NewsLine (NewsLineType , NewsLineText+ )>
+<!ATTLIST NewsLine %localid; >
+<!--
+=================================== NewsLineText ===================================
+The text of a NewsLine of user-defined type.
+================================================================================
+-->
+<!ELEMENT NewsLineText (#PCDATA | Origin )*>
+<!ATTLIST NewsLineText %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ NewsLineType ==================================
+An indication of a user-defined NewsLine type. The value of the FormalName
+attribute is a formal name for the NewsLineType. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment
+to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT NewsLineType EMPTY>
+<!ATTLIST NewsLineType %localid;
+ %formalname; >
+<!--
+================================== NewsLines ===================================
+A container for all the NewsLines that a NewsComponent has.
+================================================================================
+-->
+<!ELEMENT NewsLines ( (HeadLine , SubHeadLine? )* , ByLine* , DateLine* , CreditLine* , CopyrightLine* , RightsLine* , SeriesLine* , SlugLine* , KeywordLine* , NewsLine* )>
+<!ATTLIST NewsLines %localid; >
+<!--
+================================ NewsManagement ================================
+Information relevant to the management of a NewsItem.
+================================================================================
+-->
+<!ELEMENT NewsManagement (NewsItemType , FirstCreated , ThisRevisionCreated , Status , StatusWillChange? , Urgency? , RevisionHistory? , DerivedFrom* , AssociatedWith* , Instruction* , Property* )>
+<!ATTLIST NewsManagement %localid; >
+<!--
+==================================== NewsML ====================================
+A NewsML document, which must contain a NewsEnvelope and one or more NewsItems,
+and may include a Catalog element and a TopicSet element.
+================================================================================
+-->
+<!ELEMENT NewsML (Catalog? , TopicSet* , (NewsEnvelope , NewsItem+ ) )>
+<!ATTLIST NewsML %localid; >
+<!--
+================================= NewsProduct ==================================
+An identifier for a product to which all the NewsItems in a NewsML document
+belong. The value of the FormalName attribute is a formal name for the
+NewsProduct. Its meaning and permitted values are determined by a controlled
+vocabulary as described in the comment to the formalname ENTITY declaration
+above.
+================================================================================
+-->
+<!ELEMENT NewsProduct EMPTY>
+<!ATTLIST NewsProduct %localid;
+ %formalname; >
+<!--
+================================= NewsService ==================================
+An identifier for a service to which all the NewsItems in a NewsML document
+belong. The value of the FormalName attribute is a formal name for the
+NewsService. Its meaning and permitted values are determined by a controlled
+vocabulary as described in the comment to the formalname ENTITY declaration
+above.
+================================================================================
+-->
+<!ELEMENT NewsService EMPTY>
+<!ATTLIST NewsService %localid;
+ %formalname; >
+<!--
+=================================== Notation ===================================
+An indication of the notation of a ContentItem. The value of the FormalName
+attribute is a formal name for the Notation. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Notation EMPTY>
+<!ATTLIST Notation %localid;
+ %formalname; >
+<!--
+================================= OfInterestTo =================================
+An indication of the target audience of a NewsItem. The value of the FormalName
+attribute is a formal name for the target audience. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment to
+the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT OfInterestTo (Relevance? )>
+<!ATTLIST OfInterestTo %localid;
+ %formalname;
+ %assignment; >
+<!--
+==================================== Origin ====================================
+A wrapper for all or part of the text of a piece of text, which provides a
+pointer to an item of data corresponding formally to what is being described
+here in natural language. The Href attribute identifies the relevant data, and
+may be an http URL or a NewsML URN as described in the comment to
+PublicIdentifier, optionally including a fragment identifier. Alternatively, it
+can be a simple fragment identifier consisting of a # character followed by the
+value of the Duid of an element in the current document.
+================================================================================
+-->
+<!ELEMENT Origin (#PCDATA | Origin )*>
+<!ATTLIST Origin %localid;
+ %assignment;
+ Href CDATA #IMPLIED >
+<!--
+=================================== Party ======================================
+An indication of the person, company or organisation that has a particular
+relationship to this NewsItem in the news workflow. The value of the FormalName
+attribute is a formal name for the Party. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Party EMPTY>
+<!ATTLIST Party %localid;
+ %formalname;
+ Topic CDATA #IMPLIED >
+<!--
+=================================== Priority ===================================
+An indication of the priority notation of a NewsItem. The value of the
+FormalName attribute is a formal name for the Priority. Its meaning and
+permitted values are determined by a controlled vocabulary as described in
+the comment to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Priority EMPTY>
+<!ATTLIST Priority %localid;
+ %formalname; >
+<!--
+=================================== Property ===================================
+A property of a NewsComponent or of a Topic. The property has a name and either
+a simple Value or a complex value consisting of a set of further properties.
+
+Value
+=====
+A string representation of the value of a Property.
+
+ValueRef
+========
+A pointer to the value of the Property. This might be a Topic in a TopicSet, or
+any other piece of data. If both Value and ValueRef are provided, then ValueRef
+identifies the actual value of the property, with Value simply providing a
+string representation or mnemonic for it.
+
+
+Example:
+<Catalog>
+ <Resource Duid="resource1">
+ <Urn>urn:newsml:reuters.com:20001001:Physical Characteristics:3</Urn>
+ <Url>www.reuters.com/vocabs/physical.xml</Url>
+ <Url>www.iptc.com/vocabularies/memberdefined/reuters/physical.xml</Url>
+ <DefaultVocabularyFor Scheme="short" Context="Metadata/Property[@FormalName='Width']"/>
+ </Resource>
+</Catalog>
+<Property FormalName="Width" Vocabulary="#resource1">
+ <Property FormalName="Unit" ValueRef="urn:newsml:iptc.org:20001006:units:1#cm"/>
+ <Property FormalName="Quantity" Value="7.5"/>
+</Property>
+
+AllowedValues
+=============
+The AllowedValues attribute, if present, is a pointer to a controlled vocabulary
+that delimits the set of allowed values for the property. This may be an http
+URL, or a NewsML URN, or a fragment identifier consisting of a # charactger
+followed by the Duid of an element in the current document. The pointer must
+reference either a Resource element that designates an external controlled
+vocabulary, or a TopicSet element, that is itself the controlled vocabulary.
+================================================================================
+-->
+<!ELEMENT Property (Property* )>
+<!ATTLIST Property %localid;
+ %formalname;
+ %assignment;
+ Value CDATA #IMPLIED
+ ValueRef CDATA #IMPLIED
+ AllowedValues CDATA #IMPLIED >
+<!--
+=================================== Provider ===================================
+An individual and/or company or organisation that released a news object for
+publication.
+================================================================================
+-->
+<!ELEMENT Provider (%party; )>
+<!ATTLIST Provider %localid; >
+<!--
+================================== ProviderId ==================================
+An identifier for the news provider that produced the NewsItem. The
+provider's ID is specified in the element content. This should be an Internet
+domain name that is owned by the provider at the date identified by the DateId
+subelement of the NewsIdentifier, or the name for the Provider drawn from a
+controlled vocabulary identified by a URN specified in the Vocabulary attribute.
+This will ensure that the identity of the provider can be inferred unambiguously
+from the full NewsIdentifier.
+
+Example:
+<NewsIdentifier>
+ <ProviderId>iptc.org</ProviderId>
+ <DateId>20001001</DateId>
+ <NewsItemId>NewsML version 1.0</NewsItemId>
+ <RevisionId>1</RevisionId
+</NewsIdentifier>
+
+Because the domain name "iptc.org" was owned on 1 October 2000 by the
+International Press Telecommunications Council (IPTC) and no-one else, it is
+certain that IPTC is the provider in this case.
+================================================================================
+-->
+<!ELEMENT ProviderId (#PCDATA )>
+<!ATTLIST ProviderId Vocabulary CDATA #IMPLIED >
+<!--
+=============================== PublicIdentifier ===============================
+A public identifier (in the sense defined by the XML 1,0 Specification) for a
+NewsItem. This is the NewsML URN, and must be constructed as follows:
+
+If the ProviderId is a domain name
+
+urn:newsml:{ProviderId}:{DateId}:{NewsItemId}:{RevisionId}{RevisionId@Update}
+
+If the ProviderId is name drawn from a controlled vocabulary
+
+urn:newsml:|{ProviderId@Vocabulary}|{ProviderId}|:{DateId}:{NewsItemId}:{RevisionId}{RevisionId@Update}
+
+where {x} means "the content of the x subelement of the NewsIdentifier" and
+{x@y} means "the value of the y attribute of the x subelement of the
+NewsIdentifier", with the exception that if the Update attribute of the
+RevisionId element has its default value of N, it is omitted from the URN, and
+that the Vocabulary attribute of the ProviderId element is stripped of the
+substring "urn:" with which it begins. The Vocabulary attribute of ProviderId
+necessarily begins with the characters "urn:" because, as stated in the
+comment to the ProviderId element above, it must take the form of a URN
+identifying a controlled vocabulary.
+
+Note that the existence of this URN enables the NewsItem to be referenced
+unambiguously by pointers from other XML elements or resources. Within such
+pointers, if the RevisionId, its preceding : character and its following Update
+qualifier are omitted, then the pointer designates the most recent revision at
+the time it is resolved.
+================================================================================
+-->
+<!ELEMENT PublicIdentifier (#PCDATA )>
+
+<!--
+================================== Relevance ===================================
+An indication of the relevance of a NewsItem to a given target audience. The
+value of the FormalName attribute is a formal name for the Relevance. Its
+meaning and permitted values are determined by a controlled vocabulary as
+described in the comment to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Relevance EMPTY>
+<!ATTLIST Relevance %localid;
+ %formalname;
+ %assignment; >
+<!--
+=================================== Replace ====================================
+An instruction to replace a designated element within a NewsItem. The element
+that is to replace the designated element is the content of the Replace element.
+The NewsItem within which the replacement takes place is the previous revision
+of the current one, and the element to be replaced is the one whose Duid
+value is equal to the value of the Replace element's DuidRef attribute.
+================================================================================
+-->
+<!ELEMENT Replace ANY>
+<!ATTLIST Replace %localid;
+ DuidRef CDATA #REQUIRED >
+<!--
+================================== Resource ====================================
+An indication where a given resource can be found, and whether it is to be used
+as the default vocabulary for certain formal names within the current subtree
+of a NewsML document. The Urn attribute provides a NewsML URN for the resource.
+THe Url attribute(s) provide(s) a location or locations where the resource may
+be found. The DefaultVocabularyFor element contains an XPath pattern. The
+identified resource acts as default vocabulary for any element within the
+subtree whose root is the parent of the current Catalog, that matches this XPath
+pattern.
+================================================================================
+-->
+<!ELEMENT Resource (Urn? , Url* , DefaultVocabularyFor* )>
+<!ATTLIST Resource %localid; >
+<!--
+=============================== RevisionHistory ================================
+A pointer to a file containing the revision history of the NewsItem.
+================================================================================
+-->
+<!ELEMENT RevisionHistory EMPTY>
+<!ATTLIST RevisionHistory %localid;
+ Href CDATA #REQUIRED >
+<!--
+================================== RevisionId ==================================
+A positive integer indicating which Revision of a given NewsItem this is. Any
+positive integer may be used, but it must always be the case that of two
+instances of a NewsItem that have the same ProviderId, DateId and NewsItemId,
+the one whose RevisionId has the larger value must be the more recent revision.
+A RevisionId of 0 is not permitted. The PreviousRevision attribute must be
+present, and its value must be equal to the content of the RevisionId element
+of the NewsItem's previous revision, if there is one, and 0 if the NewsItem has
+no previous revision. If the NewsItem contains an Update element or elements,
+then the Update attribute must be set to U. If the NewsItem consists only of a
+replacement set of NewsManagement data, then the Update attribute must be set
+to A. If neither of these is the case, then the Update attribute must be set
+to N.
+================================================================================
+-->
+<!ELEMENT RevisionId (#PCDATA )>
+<!ATTLIST RevisionId PreviousRevision CDATA #REQUIRED
+ Update CDATA #REQUIRED >
+<!--
+================================ RevisionStatus ================================
+Indicates the status that previous revisions now has as a result of the release
+of the current revision. The optional Revision attribute is an integer, equal to
+the RevisionId of the revision in question. If it is not present, then the
+status applies to ALL previous revisions, without exception.
+================================================================================
+-->
+<!ELEMENT RevisionStatus (Status )>
+<!ATTLIST RevisionStatus %localid;
+ Revision CDATA #IMPLIED >
+<!--
+================================= RightsHolder =================================
+A string of text indicating who has the usage rights, optionally enriched with
+pointers to further information about the relevant people, companies or
+organisations.
+================================================================================
+-->
+<!ELEMENT RightsHolder (#PCDATA | Origin )*>
+<!ATTLIST RightsHolder %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+================================== RightsLine ==================================
+A displayable version of rights information. Note that this is distinct from
+copyright information. Copyright information is about who owns a news object;
+rights information is about who is allowed to use it, in what way and under
+what circumstances.
+================================================================================
+-->
+<!ELEMENT RightsLine (#PCDATA | Origin )*>
+<!ATTLIST RightsLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================ RightsMetadata ================================
+Information about the rights pertaining to a NewsComponent.
+================================================================================
+-->
+<!ELEMENT RightsMetadata (Catalog? , Copyright* , UsageRights* , Property* )>
+<!ATTLIST RightsMetadata %localid;
+ %assignment; >
+<!--
+===================================== Role =====================================
+An identifier of the role played by a NewsComponent within a NewsComponent
+that contains it. The outermost NewsComponent within a NewsItem need not
+specify a Role attribute value. The value of the FormalName attribute is a
+formal name for the Role. Its meaning and permitted values are determined by
+a controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT Role EMPTY>
+<!ATTLIST Role %localid;
+ %formalname; >
+<!--
+=================================== SentFrom ===================================
+An individual and/or company or organisation from whom the NewsML document is
+being sent.
+================================================================================
+-->
+<!ELEMENT SentFrom (%party; )>
+<!ATTLIST SentFrom %localid; >
+<!--
+==================================== SentTo ====================================
+An individual and/or company or organisation to whom the NewsML document is
+being sent.
+================================================================================
+-->
+<!ELEMENT SentTo (%party; )>
+<!ATTLIST SentTo %localid; >
+<!--
+================================== SeriesLine ==================================
+A displayable version of information about a news object's place in a series.
+================================================================================
+-->
+<!ELEMENT SeriesLine (#PCDATA | Origin )*>
+<!ATTLIST SeriesLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+================================== SizeInBytes =================================
+The exact size in bytes of a ContentItem's inline or referenced data object.
+================================================================================
+-->
+<!ELEMENT SizeInBytes (#PCDATA )>
+<!ATTLIST SizeInBytes %localid; >
+<!--
+=================================== SlugLine ===================================
+A string of text, possibly embellished by hyperlinks and/or formatting, used to
+display a NewsItem's slug line. (Note that the meaning of the term "slug line",
+and the uses to which it is put, are a matter for individual providers to
+define within their own workflow and business practice.)
+================================================================================
+-->
+<!ELEMENT SlugLine (#PCDATA | Origin )*>
+<!ATTLIST SlugLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+==================================== Source ====================================
+An individual and/or company or organisation that provided source material for
+a news object. The optional NewsItem attribute must be present in the case of
+a syndicated NewsItem. It provides the URN of the NewsItem that is being
+syndicated. Note that a sequence of Source elements can be used to indicate the
+sequence of syndicators through which a NewsItem has passed.
+================================================================================
+-->
+<!ELEMENT Source (%party; )>
+<!ATTLIST Source %localid;
+ NewsItem CDATA #IMPLIED >
+<!--
+================================== StartDate ===================================
+A natural-language statement of the date at which specified usage rights come
+into effect.
+================================================================================
+-->
+<!ELEMENT StartDate (#PCDATA | Origin )*>
+<!ATTLIST StartDate %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
+<!--
+==================================== Status ===================================
+An indication of the Status of a NewsItem. The value of the FormalName
+attribute is a formal name for the Status. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Status EMPTY>
+<!ATTLIST Status %localid;
+ %formalname; >
+<!--
+=============================== StatusWillChange ===============================
+Advance notification of a status change that will automatically occur at the
+specified date and time. For example, an item with a Status of "embargoed" might
+have a StatusWillChange element stating that the status will become "usable" at
+a specified time. This is equivalent to announcing in advance the time at which
+the embargo will end and the item will be released.
+================================================================================
+-->
+<!ELEMENT StatusWillChange (FutureStatus , DateAndTime )>
+<!ATTLIST StatusWillChange %localid; >
+<!--
+================================= SubHeadLine ==================================
+A displayable subsidiary headline.
+================================================================================
+-->
+<!ELEMENT SubHeadLine (#PCDATA | Origin )*>
+<!ATTLIST SubHeadLine %localid;
+ xml:lang CDATA #IMPLIED >
+<!--
+=================================== Subject ====================================
+An indication of the Subject of a NewsItem. The value of the FormalName
+attribute is a formal name for the Subject. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Subject EMPTY>
+<!ATTLIST Subject %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================= SubjectCode ==================================
+A container for the IPTC Subject Codes that indicate the subject of a NewsItem,
+as defined in the IPTC Information Interchange Model. It consists of one more
+Subject, SubjectMatter and SubjectDetail elements, optionally amplified by one
+or more SubjectQualifier elements.
+================================================================================
+-->
+<!ELEMENT SubjectCode ( (Subject | SubjectMatter | SubjectDetail ) , SubjectQualifier* )*>
+<!ATTLIST SubjectCode %localid;
+ %assignment; >
+<!--
+================================ SubjectDetail =================================
+An indication of the SubjectDetail of a NewsItem. The value of the FormalName
+attribute is a formal name for the SubjectDetail. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment
+to the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT SubjectDetail EMPTY>
+<!ATTLIST SubjectDetail %localid;
+ %formalname;
+ %assignment; >
+<!--
+================================ SubjectMatter =================================
+An indication of the SubjectMatter of a NewsItem. The value of the FormalName
+attribute is a formal name for the SubjectMatter. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment to
+the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT SubjectMatter EMPTY>
+<!ATTLIST SubjectMatter %localid;
+ %formalname;
+ %assignment; >
+<!--
+=============================== SubjectQualifier ===============================
+An indication of the SubjectQualifier of a NewsItem. The value of the FormalName
+attribute is a formal name for the SubjectQualifier. Its meaning and permitted
+values are determined by a controlled vocabulary as described in the comment to
+the formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT SubjectQualifier EMPTY>
+<!ATTLIST SubjectQualifier %localid;
+ %formalname;
+ %assignment; >
+<!--
+=============================== SystemIdentifier ===============================
+A system identifier (in the sense defined by the XML 1,0 Specification) for a
+NewsItem.
+================================================================================
+-->
+<!ELEMENT SystemIdentifier (#PCDATA )>
+<!ATTLIST SystemIdentifier %localid; >
+<!--
+============================= ThisRevisionCreated ==============================
+The date and, optionally, time at which the current revision of a NewsItem was
+created, expressed in ISO 8601 Basic Format, as described in the comment to the
+DateAndTime attribute within the assignment ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT ThisRevisionCreated (#PCDATA )>
+<!ATTLIST ThisRevisionCreated %localid; >
+<!--
+==================================== Topic =====================================
+This element provides information about a thing (Topic) named by a formal
+name or occurring in a NewsComponent. A Topic must have one or more TopicType
+subelements, which state what type of Topic it is. The optional Details
+attribute provides a pointer, in the form of a URL or URN, to additional
+information about the Topic.
+================================================================================
+-->
+<!ELEMENT Topic (Comment* , Catalog? , TopicType+ , FormalName* , Description* , Property* )>
+<!ATTLIST Topic %localid;
+ Details CDATA #IMPLIED >
+<!--
+=============================== TopicOccurrence ================================
+An indication that a particular topic occurs within the content of a
+NewsComponent. The optional HowPresent attribute indicates the nature of that
+topic's occurrence. The value of the Topic attribute must consist of a #
+character followed by the value of the Duid attribute of a Topic in the current
+document.
+================================================================================
+-->
+<!ELEMENT TopicOccurrence EMPTY>
+<!ATTLIST TopicOccurrence %localid;
+ %assignment;
+ Topic CDATA #IMPLIED >
+<!--
+================================== TopicSet ====================================
+A container for Topics. The value of the FormalName attribute is a formal name
+for the TopicSet. Its meaning and permitted values are determined by a
+controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT TopicSet (Comment* , Catalog? , TopicSetRef* , Topic* )>
+<!ATTLIST TopicSet %localid;
+ %formalname; >
+<!--
+================================= TopicSetRef ==================================
+A pointer to a TopicSet that is to be merged with the current one. The TopicSet
+attribute is a pointer to the relevant TopicSet. Its value can be an http URL,
+or a NewsML URN as described in the comment to PublicIdentifier, or a fragment
+identifier consisting of a # character followed by the Duid of a TopicSet in the
+current document. The presence of a TopicSetRef child in a TopicSet has the
+effect that all the Topics in the referenced TopicSet are included by reference
+within the current TopicSet. When this merging results in there exising two
+FormalName grandchildren of the same TopicSet that have the same content and
+the same Scheme attribute value, then the Topics whose children are in fact the
+same topic, and are deemed to be merged. The merging of Topics need not be
+performed physically by the system, but the meaning of the data is
+exactly the same as if the merging were actually performed. Merging two
+Topcis consists of creating a single Topic that contains all the children of
+both, and eliminating duplicates.
+================================================================================
+-->
+<!ELEMENT TopicSetRef (Comment* )>
+<!ATTLIST TopicSetRef %localid;
+ TopicSet CDATA #IMPLIED >
+<!--
+================================== TopicType ===================================
+An indication of the type of a Topic. The value of the FormalName attribute is
+a formal name for the TopicType. Its meaning and permitted values are determined
+by a controlled vocabulary as described in the comment to the formalname ENTITY
+declaration above.
+================================================================================
+-->
+<!ELEMENT TopicType EMPTY>
+<!ATTLIST TopicType %localid;
+ %formalname; >
+<!--
+================================== TopicUse ====================================
+An indication of where a particular Topic is used in a NewsML document. The
+value of the Topic attribute must consist of a # character followed by the
+value of the Duid of a Topic in the current document. The value of the Context
+attribute is an XPath pattern indicating the context where the referenced topic
+is used within the subtree to which the current Catalog applies. If the Context
+attribute is not present, the TopicUse element simply states that this topic is
+present somewhere in the subtree.
+================================================================================
+-->
+<!ELEMENT TopicUse EMPTY>
+<!ATTLIST TopicUse Topic CDATA #REQUIRED
+ Context CDATA #IMPLIED >
+<!--
+================================ TransmissionId ================================
+An identifier for the NewsML document transmission. This should be unique among
+all distinct transmissions from the same publisher. If a transmission is
+repeated (perhaps because the sender is not confident that it was successfully
+received) then the same TransmissionId content may be used, but a Repeat
+attribute should be provided to distinguish the second transmission from the
+first. The form that the value of the Repeat attribute takes is determined by
+the provider. Likewise, the format for the TransmissionId itself is for the
+provider to decide. It could for example consist of a channel identifier
+followed by a sequence number.
+================================================================================
+-->
+<!ELEMENT TransmissionId (#PCDATA )>
+<!ATTLIST TransmissionId %localid;
+ Repeat CDATA #IMPLIED >
+<!--
+==================================== Update ====================================
+A modification to an existing NewsItem. This can be an insertion, replacement
+or deletion. Note that the Update element cannot be used to modify the
+NewsManagement or Identification element, or any of their descendants.
+Modifications to these parts of the NewsItem can be made by issuing the
+NewsItem under the current revision number, with only the Identification and
+NewsManagement elements present. These will replace the previous Identification
+and NewsManagement elements in their totality.
+================================================================================
+-->
+<!ELEMENT Update (InsertBefore | InsertAfter | Replace | Delete )*>
+<!ATTLIST Update %localid; >
+<!--
+=================================== Urgency ====================================
+An indication of the urgency of a NewsItem. The value of the FormalName
+attribute is a formal name for the Urgency. Its meaning and permitted values
+are determined by a controlled vocabulary as described in the comment to the
+formalname ENTITY declaration above.
+================================================================================
+-->
+<!ELEMENT Urgency EMPTY>
+<!ATTLIST Urgency %localid;
+ %formalname; >
+<!--
+===================================== Url ======================================
+A URL that can be used to locate a Resource.
+================================================================================
+-->
+<!ELEMENT Url (#PCDATA )>
+<!ATTLIST Url %localid; >
+<!--
+===================================== Urn ======================================
+A URN that provides a global identifier for a resource. This will typically (but
+not necessarily) be a NewsML URN as described in the comment to PublicIdentifier.
+================================================================================
+-->
+<!ELEMENT Urn (#PCDATA )>
+<!ATTLIST Urn %localid; >
+<!--
+================================= UsageRights ==================================
+Information about the usage rights pertaining to a NewsComponent.
+================================================================================
+-->
+<!ELEMENT UsageRights (UsageType? , Geography? , RightsHolder? , Limitations? , StartDate? , EndDate? )>
+<!ATTLIST UsageRights %localid;
+ %assignment; >
+<!--
+================================== UsageType ===================================
+A natural-language indication of the type of usage to which the rights apply.
+================================================================================
+-->
+<!ELEMENT UsageType (#PCDATA | Origin )*>
+<!ATTLIST UsageType %localid;
+ xml:lang CDATA #IMPLIED
+ %assignment; >
diff --git a/test/valid/dtds/destfoo.ent b/test/valid/dtds/destfoo.ent new file mode 100644 index 0000000..0791e1a --- /dev/null +++ b/test/valid/dtds/destfoo.ent @@ -0,0 +1 @@ +<dest id='foo'/> diff --git a/test/valid/dtds/nitf-2-5.dtd b/test/valid/dtds/nitf-2-5.dtd new file mode 100644 index 0000000..253e620 --- /dev/null +++ b/test/valid/dtds/nitf-2-5.dtd @@ -0,0 +1,1004 @@ + <!--
+ News Industry Text Format
+ Document Type Definition - Version 2.5
+ http://www.nitf.org/
+
+ Copyright (c) 2000. All Rights Reserved.
+ International Press Telecommunications Council
+ http://www.iptc.org
+
+ Last changed: 9 August 2000 wb/kr/ak
+
+ For the list of modifications from previous releases, see:
+ http://www.nitf.org/recent-modifications.html
+
+ For the list of proposed modifications, see:
+ http://www.nitf.org/proposed-changes.html
+-->
+
+
+
+<!ENTITY % enriched-text '
+ #PCDATA
+ | chron
+ | copyrite
+ | event
+ | function
+ | location
+ | money
+ | num
+ | object.title
+ | org
+ | person
+ | postaddr
+ | virtloc
+ | a
+ | br
+ | em
+ | lang
+ | pronounce
+ | q
+ '>
+
+<!ENTITY % block.head "dateline?, copyrite?, abstract?">
+<!ENTITY % block.content "p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr">
+<!ENTITY % block.end "datasource?">
+
+
+<!ENTITY % global-attributes '
+ id ID #IMPLIED
+ '>
+<!ENTITY % common-attributes '
+ %global-attributes;
+ class NMTOKENS #IMPLIED
+ style CDATA #IMPLIED
+ lang NMTOKEN #IMPLIED
+ dir (ltr | rtl) #IMPLIED
+ '>
+<!ENTITY % cell.align '
+ align (left | center | right | justify | char) #IMPLIED
+ char CDATA #IMPLIED
+ charoff CDATA #IMPLIED
+ '>
+<!ENTITY % cell.valign '
+ valign (top | middle | bottom | baseline) #IMPLIED
+ '>
+<!ENTITY % url.link '
+ md CDATA #IMPLIED
+ '>
+<!ENTITY % boolean '(true | false)'>
+
+
+<!ELEMENT nitf (head, body)>
+<!ATTLIST nitf
+ %global-attributes;
+ uno CDATA #IMPLIED
+ version CDATA #FIXED "-//IPTC-NAA//DTD NITF-XML 2.1//EN"
+ change.date CDATA #FIXED "4 July 2000"
+ change.time CDATA #FIXED "1900"
+ baselang CDATA #IMPLIED
+ class NMTOKENS #IMPLIED
+ >
+
+
+<!ELEMENT head (title?, meta*, tobject?, iim?, docdata?, pubdata*, revision-history*)>
+<!ATTLIST head
+ %global-attributes;
+ >
+
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title
+ %global-attributes;
+ type (
+ main
+ | subtitle
+ | parttitle
+ | alternate
+ | abbrev
+ | other
+ ) #IMPLIED
+ >
+
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+ %global-attributes;
+ http-equiv NMTOKEN #IMPLIED
+ name NMTOKEN #IMPLIED
+ content CDATA #REQUIRED
+ >
+
+<!ELEMENT tobject (tobject.property*, tobject.subject*)>
+<!ATTLIST tobject
+ %global-attributes;
+ tobject.type CDATA "news"
+ >
+
+ <!ELEMENT tobject.property EMPTY>
+ <!ATTLIST tobject.property
+ %global-attributes;
+ tobject.property.type CDATA "current"
+ >
+
+ <!ELEMENT tobject.subject EMPTY>
+ <!ATTLIST tobject.subject
+ %global-attributes;
+ tobject.subject.ipr CDATA "IPTC"
+ tobject.subject.refnum NMTOKEN #REQUIRED
+ tobject.subject.code CDATA #IMPLIED
+ tobject.subject.type CDATA #IMPLIED
+ tobject.subject.matter CDATA #IMPLIED
+ tobject.subject.detail CDATA #IMPLIED
+ >
+
+<!ELEMENT iim (ds*)>
+<!ATTLIST iim
+ %global-attributes;
+ ver NMTOKEN #IMPLIED
+ >
+
+ <!ELEMENT ds EMPTY>
+ <!ATTLIST ds
+ %global-attributes;
+ num NMTOKEN #REQUIRED
+ value CDATA #IMPLIED
+ >
+
+<!ELEMENT docdata (
+ correction
+ | evloc
+ | doc-id
+ | del-list
+ | urgency
+ | fixture
+ | date.issue
+ | date.release
+ | date.expire
+ | doc-scope
+ | series
+ | ed-msg
+ | du-key
+ | doc.copyright
+ | doc.rights
+ | key-list
+ )*>
+<!ATTLIST docdata
+ %global-attributes;
+ >
+
+ <!ELEMENT correction EMPTY>
+ <!ATTLIST correction
+ %global-attributes;
+ info CDATA #IMPLIED
+ id-string CDATA #IMPLIED
+ reg-src CDATA #IMPLIED
+ >
+
+ <!ELEMENT evloc EMPTY>
+ <!ATTLIST evloc
+ %global-attributes;
+ iso-cc CDATA #IMPLIED
+ state-prov CDATA #IMPLIED
+ county-dist CDATA #IMPLIED
+ city CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc-id EMPTY>
+ <!ATTLIST doc-id
+ %global-attributes;
+ regsrc CDATA #IMPLIED
+ id-string CDATA #IMPLIED
+ >
+
+ <!ELEMENT del-list (from-src)*>
+ <!ATTLIST del-list
+ %global-attributes;
+ >
+
+ <!ELEMENT from-src EMPTY>
+ <!ATTLIST from-src
+ %global-attributes;
+ src-name CDATA #IMPLIED
+ level-number CDATA #IMPLIED
+ >
+
+ <!ELEMENT urgency EMPTY>
+ <!ATTLIST urgency
+ %global-attributes;
+ ed-urg NMTOKEN #IMPLIED
+ >
+
+ <!ELEMENT fixture EMPTY>
+ <!ATTLIST fixture
+ %global-attributes;
+ fix-id CDATA #IMPLIED
+ >
+
+ <!ELEMENT date.issue EMPTY>
+ <!ATTLIST date.issue
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT date.release EMPTY>
+ <!ATTLIST date.release
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT date.expire EMPTY>
+ <!ATTLIST date.expire
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc-scope EMPTY>
+ <!ATTLIST doc-scope
+ %global-attributes;
+ scope CDATA #IMPLIED
+ >
+
+ <!ELEMENT series EMPTY>
+ <!ATTLIST series
+ %global-attributes;
+ series.name CDATA #IMPLIED
+ series.part NMTOKEN "0"
+ series.totalpart NMTOKEN "0"
+ >
+
+ <!ELEMENT ed-msg EMPTY>
+ <!ATTLIST ed-msg
+ %global-attributes;
+ msg-type CDATA #IMPLIED
+ info CDATA #IMPLIED
+ >
+
+ <!ELEMENT du-key EMPTY>
+ <!ATTLIST du-key
+ %global-attributes;
+ generation NMTOKEN #IMPLIED
+ part NMTOKEN #IMPLIED
+ version NMTOKEN #IMPLIED
+ key CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc.copyright EMPTY>
+ <!ATTLIST doc.copyright
+ %global-attributes;
+ year NMTOKEN #IMPLIED
+ holder CDATA #IMPLIED
+ >
+
+ <!ELEMENT doc.rights EMPTY>
+ <!ATTLIST doc.rights
+ %global-attributes;
+ owner CDATA #IMPLIED
+ startdate CDATA #IMPLIED
+ enddate CDATA #IMPLIED
+ agent CDATA #IMPLIED
+ geography CDATA #IMPLIED
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ type CDATA #IMPLIED
+ limitations CDATA #IMPLIED
+ >
+
+ <!ELEMENT key-list (keyword)*>
+ <!ATTLIST key-list
+ %global-attributes;
+ >
+
+ <!ELEMENT keyword EMPTY>
+ <!ATTLIST keyword
+ %global-attributes;
+ key CDATA #IMPLIED
+ >
+
+<!ELEMENT pubdata EMPTY>
+<!ATTLIST pubdata
+ %global-attributes;
+ type (
+ print
+ | audio
+ | video
+ | web
+ | appliance
+ | other
+ ) #IMPLIED
+ item-length CDATA #IMPLIED
+ unit-of-measure (
+ word
+ | character
+ | byte
+ | inch
+ | pica
+ | cm
+ | hour
+ | minute
+ | second
+ | other
+ ) #IMPLIED
+ date.publication CDATA #IMPLIED
+ name CDATA #IMPLIED
+ issn CDATA #IMPLIED
+ volume CDATA #IMPLIED
+ number CDATA #IMPLIED
+ issue CDATA #IMPLIED
+ edition.name CDATA #IMPLIED
+ edition.area CDATA #IMPLIED
+ position.section CDATA #IMPLIED
+ position.sequence CDATA #IMPLIED
+ ex-ref CDATA #IMPLIED
+ >
+
+<!ELEMENT revision-history EMPTY>
+<!ATTLIST revision-history
+ %global-attributes;
+ name CDATA #IMPLIED
+ function (
+ writer-author
+ | editor
+ | producer
+ | archivist
+ | videographer
+ | graphic-artist
+ | photographer
+ | statistician
+ | other
+ ) #IMPLIED
+ norm CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ >
+
+
+<!ELEMENT body (body.head?, body.content*, body.end?)>
+<!ATTLIST body
+ %common-attributes;
+ background CDATA #IMPLIED
+ >
+
+
+<!ELEMENT body.head (
+ hedline?,
+ note*,
+ rights?,
+ byline*,
+ distributor?,
+ dateline*,
+ abstract?,
+ series?
+ )>
+<!ATTLIST body.head
+ %global-attributes;
+ >
+
+<!ELEMENT hedline (hl1, hl2*)>
+<!ATTLIST hedline
+ %global-attributes;
+ >
+
+ <!ELEMENT hl1 (%enriched-text;)*>
+ <!ATTLIST hl1 %common-attributes;>
+
+ <!ELEMENT hl2 (%enriched-text;)*>
+ <!ATTLIST hl2 %common-attributes;>
+
+<!ELEMENT note (body.content)+>
+<!ATTLIST note
+ %common-attributes;
+ noteclass (
+ cpyrt
+ | end
+ | hd
+ | editorsnote
+ | trademk
+ | undef
+ ) #IMPLIED
+ type (std | pa | npa) "std"
+ src CDATA #IMPLIED
+ %url.link;
+ >
+
+<!ELEMENT rights (
+ #PCDATA
+ | rights.owner
+ | rights.startdate
+ | rights.enddate
+ | rights.agent
+ | rights.geography
+ | rights.type
+ | rights.limitations
+ )*>
+<!ATTLIST rights
+ %global-attributes;
+ >
+
+ <!ELEMENT rights.owner (#PCDATA)>
+ <!ATTLIST rights.owner
+ %global-attributes;
+ contact CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.startdate (#PCDATA)>
+ <!ATTLIST rights.startdate
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.enddate (#PCDATA)>
+ <!ATTLIST rights.enddate
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.agent (#PCDATA)>
+ <!ATTLIST rights.agent
+ %global-attributes;
+ contact CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.geography (#PCDATA)>
+ <!ATTLIST rights.geography
+ %global-attributes;
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT rights.type (#PCDATA)>
+ <!ATTLIST rights.type
+ %global-attributes;
+ >
+
+ <!ELEMENT rights.limitations (#PCDATA)>
+ <!ATTLIST rights.limitations
+ %global-attributes;
+ >
+
+<!ELEMENT byline (#PCDATA | person | byttl | location | virtloc)*>
+<!ATTLIST byline
+ %global-attributes;
+ >
+
+ <!ELEMENT byttl (#PCDATA | org )*>
+ <!ATTLIST byttl
+ %global-attributes;
+ >
+
+<!ELEMENT distributor (#PCDATA | org)*>
+<!ATTLIST distributor
+ %global-attributes;
+ >
+
+<!ELEMENT dateline (#PCDATA | location | story.date)*>
+<!ATTLIST dateline %common-attributes;>
+
+ <!ELEMENT story.date (#PCDATA)>
+ <!ATTLIST story.date
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+<!ELEMENT abstract (%block.content;)+>
+<!ATTLIST abstract
+ %global-attributes;
+ >
+
+
+<!ELEMENT copyrite (#PCDATA | copyrite.year | copyrite.holder)*>
+<!ATTLIST copyrite
+ %global-attributes;
+ >
+
+ <!ELEMENT copyrite.year (#PCDATA)>
+ <!ATTLIST copyrite.year
+ %global-attributes;
+ >
+
+ <!ELEMENT copyrite.holder (#PCDATA)>
+ <!ATTLIST copyrite.holder
+ %global-attributes;
+ >
+
+
+<!ELEMENT body.content (block | %block.content;)*>
+<!ATTLIST body.content
+ %global-attributes;
+ >
+
+<!ELEMENT block ((%block.head;)?, (%block.content;)*, (%block.end;)?)>
+<!ATTLIST block %common-attributes;>
+
+<!ELEMENT p (%enriched-text;)*>
+<!ATTLIST p
+ %common-attributes;
+ lede %boolean; #IMPLIED
+ summary %boolean; #IMPLIED
+ optional-text %boolean; #IMPLIED
+ >
+
+
+<!ELEMENT table (caption?, (col* | colgroup*), thead?, tfoot?, tbody+)>
+<!ATTLIST table
+ %common-attributes;
+ tabletype ENTITY #IMPLIED
+ align (
+ left
+ | center
+ | right
+ ) #IMPLIED
+ width CDATA #IMPLIED
+ cols NMTOKEN #IMPLIED
+ border CDATA #IMPLIED
+ frame (
+ void
+ | above
+ | below
+ | hsides
+ | lhs
+ | rhs
+ | vsides
+ | box
+ | border
+ ) #IMPLIED
+ rules (
+ none
+ | basic
+ | rows
+ | cols
+ | all
+ ) #IMPLIED
+ cellspacing CDATA #IMPLIED
+ cellpadding CDATA #IMPLIED
+ table.fmt CDATA #IMPLIED
+ table.domain CDATA #IMPLIED
+ table.inst CDATA #IMPLIED
+ >
+
+<!ELEMENT media (media-metadata*, media-reference, media-object?, media-caption*, media-producer?)>
+<!ATTLIST media
+ %common-attributes;
+ media-type (
+ text
+ | audio
+ | image
+ | video
+ | data
+ | application
+ | other
+ ) #REQUIRED
+ >
+
+ <!ELEMENT media-reference (#PCDATA)>
+ <!ATTLIST media-reference
+ %common-attributes;
+ data-location CDATA #REQUIRED
+ name CDATA #IMPLIED
+ source CDATA #IMPLIED
+ mime-type CDATA #REQUIRED
+ coding CDATA #IMPLIED
+ time CDATA #IMPLIED
+ time-unit-of-measure CDATA #IMPLIED
+ outcue CDATA #IMPLIED
+ source-credit CDATA #IMPLIED
+ copyright CDATA #IMPLIED
+ alternate-text CDATA #IMPLIED
+ height NMTOKEN #IMPLIED
+ width NMTOKEN #IMPLIED
+ units (pixels) "pixels"
+ imagemap CDATA #IMPLIED
+ noflow (noflow) #IMPLIED
+ >
+
+ <!ELEMENT media-metadata EMPTY>
+ <!ATTLIST media-metadata
+ %common-attributes;
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+ >
+
+ <!ELEMENT media-object (#PCDATA)>
+ <!ATTLIST media-object
+ %common-attributes;
+ encoding CDATA #REQUIRED
+ >
+
+ <!ELEMENT media-caption (%enriched-text; | %block.content;)*>
+ <!ATTLIST media-caption
+ %common-attributes;
+ >
+
+ <!ELEMENT media-producer (%enriched-text;)*>
+ <!ATTLIST media-producer
+ %common-attributes;
+ >
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+ %common-attributes;
+ continue (continue) #IMPLIED
+ seqnum NMTOKEN #IMPLIED
+ compact (compact) #IMPLIED
+ >
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+ %common-attributes;
+ wrap (vert | horiz | none) "none"
+ plain (plain) #IMPLIED
+ dingbat ENTITY #IMPLIED
+ src CDATA #IMPLIED
+ %url.link;
+ compact (compact) #IMPLIED
+ >
+
+ <!ELEMENT li (%enriched-text; | %block.content;)*>
+ <!ATTLIST li
+ %common-attributes;
+ dingbat ENTITY #IMPLIED
+ src CDATA #IMPLIED
+ %url.link;
+ skip NMTOKEN "0"
+ >
+
+<!ELEMENT dl (dt | dd)+>
+<!ATTLIST dl %common-attributes;>
+
+ <!ELEMENT dt (%enriched-text;)*>
+ <!ATTLIST dt %common-attributes;>
+
+ <!ELEMENT dd (block)*>
+ <!ATTLIST dd %common-attributes;>
+
+<!ELEMENT bq (block+, credit?)*>
+<!ATTLIST bq
+ %common-attributes;
+ nowrap (nowrap) #IMPLIED
+ quote-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT credit (%enriched-text;)*>
+ <!ATTLIST credit %common-attributes;>
+
+<!ELEMENT fn (body.content)+>
+<!ATTLIST fn %common-attributes;>
+
+
+<!ELEMENT pre (#PCDATA)>
+<!ATTLIST pre
+ %global-attributes;
+ >
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+ %global-attributes;
+ src CDATA #IMPLIED
+ >
+
+
+<!ELEMENT datasource (#PCDATA)>
+<!ATTLIST datasource
+ %global-attributes;
+ >
+
+
+
+<!ELEMENT caption (%enriched-text; | %block.content;)*>
+<!ATTLIST caption
+ %common-attributes;
+ align (
+ top
+ | bottom
+ | left
+ | right
+ ) #IMPLIED
+ >
+
+<!ELEMENT col EMPTY>
+<!ATTLIST col
+ %common-attributes;
+ span NMTOKEN "1"
+ width CDATA #IMPLIED
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT colgroup (col+)>
+<!ATTLIST colgroup
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT thead (tr+)>
+<!ATTLIST thead
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT tbody (tr+)>
+<!ATTLIST tbody
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT tfoot (tr+)>
+<!ATTLIST tfoot
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT tr (th | td)+>
+<!ATTLIST tr
+ %common-attributes;
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT th (%enriched-text; | %block.content;)*>
+<!ATTLIST th
+ %common-attributes;
+ axis CDATA #IMPLIED
+ axes CDATA #IMPLIED
+ nowrap (nowrap) #IMPLIED
+ rowspan NMTOKEN "1"
+ colspan NMTOKEN "1"
+ %cell.align;
+ %cell.valign;
+ >
+
+<!ELEMENT td (%enriched-text; | %block.content;)*>
+<!ATTLIST td
+ %common-attributes;
+ axis CDATA #IMPLIED
+ axes CDATA #IMPLIED
+ nowrap (nowrap) #IMPLIED
+ rowspan NMTOKEN "1"
+ colspan NMTOKEN "1"
+ %cell.align;
+ %cell.valign;
+ >
+
+
+<!ELEMENT chron (#PCDATA)>
+<!ATTLIST chron
+ %global-attributes;
+ norm CDATA #IMPLIED
+ >
+
+
+<!ELEMENT event (#PCDATA | alt-code)*>
+<!ATTLIST event
+ %global-attributes;
+ start-date CDATA #IMPLIED
+ end-date CDATA #IMPLIED
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT function (#PCDATA | alt-code)*>
+<!ATTLIST function
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT location (#PCDATA | sublocation | city | state | region | country | alt-code)*>
+<!ATTLIST location
+ %global-attributes;
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT sublocation (#PCDATA | alt-code)*>
+ <!ATTLIST sublocation
+ %global-attributes;
+ location-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT city (#PCDATA | alt-code)*>
+ <!ATTLIST city
+ %global-attributes;
+ city-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT state (#PCDATA | alt-code)*>
+ <!ATTLIST state
+ %global-attributes;
+ state-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT region (#PCDATA | alt-code)*>
+ <!ATTLIST region
+ %global-attributes;
+ region-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+ <!ELEMENT country (#PCDATA | alt-code)*>
+ <!ATTLIST country
+ %global-attributes;
+ iso-cc CDATA #IMPLIED
+ >
+
+<!ELEMENT money (#PCDATA)>
+<!ATTLIST money
+ %global-attributes;
+ unit CDATA #IMPLIED
+ date CDATA #IMPLIED
+ >
+
+<!ELEMENT num (#PCDATA | frac | sub | sup)*>
+<!ATTLIST num
+ %global-attributes;
+ units CDATA #IMPLIED
+ decimal-ch CDATA #IMPLIED
+ thousands-ch CDATA #IMPLIED
+ >
+
+ <!ELEMENT frac (numer, frac-sep?, denom)>
+ <!ATTLIST frac
+ %global-attributes;
+ >
+
+ <!ELEMENT numer (#PCDATA)>
+ <!ATTLIST numer
+ %global-attributes;
+ >
+
+ <!ELEMENT frac-sep (#PCDATA)>
+ <!ATTLIST frac-sep
+ %global-attributes;
+ >
+
+ <!ELEMENT denom (#PCDATA)>
+ <!ATTLIST denom
+ %global-attributes;
+ >
+
+ <!ELEMENT sub (#PCDATA)>
+ <!ATTLIST sub %common-attributes;>
+
+ <!ELEMENT sup (#PCDATA)>
+ <!ATTLIST sup %common-attributes;>
+
+<!ELEMENT object.title (#PCDATA | alt-code)*>
+<!ATTLIST object.title
+ %common-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT org (#PCDATA | alt-code)*>
+<!ATTLIST org
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+ <!ELEMENT alt-code EMPTY>
+ <!ATTLIST alt-code
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT person (#PCDATA | name.given | name.family | function | alt-code)*>
+<!ATTLIST person
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+ <!ELEMENT name.given (#PCDATA)>
+ <!ATTLIST name.given
+ %global-attributes;
+ >
+
+ <!ELEMENT name.family (#PCDATA)>
+ <!ATTLIST name.family
+ %global-attributes;
+ >
+
+<!ELEMENT postaddr (addressee, delivery.point?, (postcode | delivery.office | region | country)*)>
+<!ATTLIST postaddr
+ %global-attributes;
+ >
+
+<!ELEMENT virtloc (#PCDATA | alt-code)*>
+<!ATTLIST virtloc
+ %global-attributes;
+ idsrc CDATA #REQUIRED
+ value CDATA #REQUIRED
+ >
+
+<!ELEMENT a (%enriched-text;)*>
+<!ATTLIST a
+ %common-attributes;
+ href CDATA #IMPLIED
+ name CDATA #IMPLIED
+ %url.link;
+ rel NMTOKEN #IMPLIED
+ rev NMTOKEN #IMPLIED
+ title CDATA #IMPLIED
+ methods NMTOKENS #IMPLIED
+ >
+
+<!ELEMENT br EMPTY>
+<!ATTLIST br
+ %global-attributes;
+ >
+
+<!ELEMENT em (%enriched-text;)*>
+<!ATTLIST em %common-attributes;>
+
+<!ELEMENT lang (%enriched-text;)*>
+<!ATTLIST lang %common-attributes;>
+
+<!ELEMENT pronounce (%enriched-text;)*>
+<!ATTLIST pronounce
+ %global-attributes;
+ guide CDATA #IMPLIED
+ phonetic CDATA #IMPLIED
+ >
+
+<!ELEMENT q (%enriched-text;)*>
+<!ATTLIST q
+ %common-attributes;
+ quote-source CDATA #IMPLIED
+ >
+
+
+<!ELEMENT addressee (person, function?, care.of?)>
+<!ATTLIST addressee
+ %global-attributes;
+ >
+
+ <!ELEMENT care.of (#PCDATA)>
+ <!ATTLIST care.of
+ %global-attributes;
+ >
+
+<!ELEMENT delivery.point (#PCDATA | br)*>
+<!ATTLIST delivery.point
+ %global-attributes;
+ point-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+<!ELEMENT postcode (#PCDATA)>
+<!ATTLIST postcode
+ %global-attributes;
+ code-source CDATA #IMPLIED
+ >
+
+<!ELEMENT delivery.office (#PCDATA | br)*>
+<!ATTLIST delivery.office
+ %global-attributes;
+ office-code CDATA #IMPLIED
+ code-source CDATA #IMPLIED
+ >
+
+
+
+
+<!ELEMENT body.end (tagline?, bibliography?)>
+<!ATTLIST body.end
+ %global-attributes;
+ >
+
+<!ELEMENT tagline (%enriched-text;)*>
+<!ATTLIST tagline
+ %global-attributes;
+ type (std | pa | npa) "std"
+ >
+
+<!ELEMENT bibliography (#PCDATA)>
+<!ATTLIST bibliography
+ %global-attributes;
+ >
+
diff --git a/test/valid/dtds/spec.dtd b/test/valid/dtds/spec.dtd new file mode 100755 index 0000000..0fdfb86 --- /dev/null +++ b/test/valid/dtds/spec.dtd @@ -0,0 +1,972 @@ +<!-- ............................................................... --> +<!-- XML specification DTD ......................................... --> +<!-- ............................................................... --> + +<!-- +TYPICAL INVOCATION: +# <!DOCTYPE spec PUBLIC +# "-//W3C//DTD Specification::19980323//EN" +# "http://www.w3.org/XML/Group/DTD/xmlspec.dtd"> + +PURPOSE: + This DTD was developed for use with the XML family of W3C + specifications. It is an XML-compliant DTD based in part on + the TEI Lite and Sweb DTDs. + +DEPENDENCIES: + None. + +CHANGE HISTORY: + The list of changes is at the end of the DTD. + + For all details, see the design report at: + + <http://www.w3.org/XML/Group/DTD/xmlspec-report.htm> + + The "typical invocation" FPI always gets updated to reflect the + date of the most recent changes. + + Search this file for "#" in the first column to see change history + comments. + +MAINTAINER: + Eve Maler + ArborText Inc. + elm@arbortext.com + voice: +1 781 270 5750 + fax: +1 781 273 3760 +--> + +<!-- ............................................................... --> +<!-- Entities for characters and symbols ........................... --> + +<!-- +#1998-03-10: maler: Added “ and ”. +# Used 8879:1986-compatible decimal character +# references. +# Merged charent.mod file back into main file. +--> + +<!ENTITY lt "&#60;"> +<!ENTITY gt ">"> +<!ENTITY amp "&#38;"> +<!ENTITY apos "'"> +<!ENTITY quot """> +<!ENTITY mdash "--"> +<!ENTITY nbsp " "> +<!ENTITY ldquo "#x201C;"> +<!ENTITY rdquo "#x201D;"> + +<!-- ............................................................... --> +<!-- Entities for classes of standalone elements ................... --> + +<!-- +#1997-10-16: maler: Added table to %illus.class;. +#1997-11-28: maler: Added htable to %illus.class;. +#1997-12-29: maler: IGNOREd table. +#1998-03-10: maler: Removed SGML Open-specific %illus.class;. +# Added "local" entities for customization. +--> + +<!ENTITY % local.p.class ""> +<!ENTITY % p.class "p + %local.p.class;"> + +<!ENTITY % local.statusp.class ""> +<!ENTITY % statusp.class "statusp + %local.statusp.class;"> + +<!ENTITY % local.list.class ""> +<!ENTITY % list.class "ulist|olist|slist|glist + %local.list.class;"> + +<!ENTITY % local.speclist.class ""> +<!ENTITY % speclist.class "orglist|blist + %local.speclist.class;"> + +<!ENTITY % local.note.class ""> +<!ENTITY % note.class "note|wfcnote|vcnote + %local.note.class;"> + +<!ENTITY % local.illus.class ""> +<!ENTITY % illus.class "eg|graphic|scrap|htable + %local.illus.class;"> + +<!-- ............................................................... --> +<!-- Entities for classes of phrase-level elements ................. --> + +<!-- +#1997-12-29: maler: Added xspecref to %ref.class;. +#1998-03-10: maler: Added %ednote.class;. +# Added "local" entities for customization. +--> + +<!ENTITY % local.annot.class ""> +<!ENTITY % annot.class "footnote + %local.annot.class;"> + +<!ENTITY % local.termdef.class ""> +<!ENTITY % termdef.class "termdef|term + %local.termdef.class;"> + +<!ENTITY % local.emph.class ""> +<!ENTITY % emph.class "emph|quote + %local.emph.class;"> + +<!ENTITY % local.ref.class ""> +<!ENTITY % ref.class "bibref|specref|termref|titleref + |xspecref|xtermref + %local.ref.class;"> + +<!ENTITY % local.loc.class ""> +<!ENTITY % loc.class "loc + %local.loc.class;"> + +<!ENTITY % local.tech.class ""> +<!ENTITY % tech.class "kw|nt|xnt|code + %local.tech.class;"> + +<!ENTITY % local.ednote.class ""> +<!ENTITY % ednote.class "ednote + %local.ednote.class;"> + +<!-- ............................................................... --> +<!-- Entities for mixtures of standalone elements .................. --> + +<!-- +#1997-09-30: maler: Created %p.mix; to eliminate p from self. +#1997-09-30: maler: Added %speclist.class; to %obj.mix; and %p.mix;. +#1997-09-30: maler: Added %note.class; to %obj.mix; and %p.mix;. +#1997-10-16: maler: Created %entry.mix;. Note that some elements +# left out here are still allowed in termdef, +# which entry can contain through %p.pcd.mix;. +#1997-11-28: maler: Added %p.class; to %statusobj.mix;. +#1998-03-10: maler: Added %ednote.class; to all mixtures, except +# %p.mix; and %statusobj.mix;, because paragraphs +# and status paragraphs will contain ednote +# through %p.pcd.mix;. +#1998-03-123: maler: Added %termdef.mix; (broken out from +# %termdef.pcd.mix;). +--> + +<!ENTITY % div.mix + "%p.class;|%list.class;|%speclist.class;|%note.class; + |%illus.class;|%ednote.class;"> +<!ENTITY % obj.mix + "%p.class;|%list.class;|%speclist.class;|%note.class; + |%illus.class;|%ednote.class;"> +<!ENTITY % p.mix + "%list.class;|%speclist.class;|%note.class;|%illus.class;"> +<!ENTITY % entry.mix + "%list.class;|note|eg|graphic|%ednote.class;"> +<!ENTITY % statusobj.mix + "%p.class;|%statusp.class;|%list.class;"> +<!ENTITY % hdr.mix + "%p.class;|%list.class;|%ednote.class;"> +<!ENTITY % termdef.mix + "%note.class;|%illus.class;"> + +<!-- ............................................................... --> +<!-- Entities for mixtures of #PCDATA and phrase-level elements .... --> + +<!-- Note that %termdef.pcd.mix contains %note.class; + and %illus.class;, considered standalone elements. --> + +<!-- +#1997-09-30: maler: Added scrap and %note.class; to %termdef.pcd.mix;. +#1997-11-28: maler: Added %loc.class; to %p.pcd.mix;. +#1998-03-10: maler: Added %ednote.class; to all mixtures. +#1998-03-23: maler: Moved some %termdef.pcd.mix; stuff out to +# %termdef.mix;. +--> + +<!ENTITY % p.pcd.mix + "#PCDATA|%annot.class;|%termdef.class;|%emph.class; + |%ref.class;|%tech.class;|%loc.class;|%ednote.class;"> +<!ENTITY % statusp.pcd.mix + "#PCDATA|%annot.class;|%termdef.class;|%emph.class; + |%ref.class;|%tech.class;|%loc.class;|%ednote.class;"> +<!ENTITY % head.pcd.mix + "#PCDATA|%annot.class;|%emph.class;|%tech.class;|%ednote.class;"> +<!ENTITY % label.pcd.mix + "#PCDATA|%annot.class;|%termdef.class;|%emph.class;|%tech.class; + |%ednote.class;"> +<!ENTITY % eg.pcd.mix + "#PCDATA|%annot.class;|%emph.class;|%ednote.class;"> +<!ENTITY % termdef.pcd.mix + "#PCDATA|term|%emph.class;|%ref.class;|%tech.class; + |%ednote.class;"> +<!ENTITY % bibl.pcd.mix + "#PCDATA|%emph.class;|%ref.class;|%loc.class;|%ednote.class;"> +<!ENTITY % tech.pcd.mix + "#PCDATA|%ednote.class;"> +<!ENTITY % loc.pcd.mix + "#PCDATA|%loc.class;|%ednote.class;"> + +<!-- ............................................................... --> +<!-- Entities for customizable content models ...................... --> + +<!-- +#1998-03-10: maler: Added customization entities. +--> + +<!ENTITY % spec.mdl + "header, front?, body, back?"> + +<!ENTITY % header.mdl + "title, subtitle?, version, w3c-designation, w3c-doctype, + pubdate, notice*, publoc, latestloc?, prevlocs?, authlist, + abstract, status, pubstmt?, sourcedesc?, langusage, + revisiondesc"> + +<!ENTITY % pubdate.mdl + "day?, month, year"> + +<!-- ............................................................... --> +<!-- Entities for common attributes ................................ --> + +<!-- key attribute: + Optionally provides a sorting or indexing key, for cases when + the element content is inappropriate for this purpose. --> +<!ENTITY % key.att + 'key CDATA #IMPLIED'> + +<!-- def attribute: + Points to the element where the relevant definition can be + found, using the IDREF mechanism. %def.att; is for optional + def attributes, and %def-req.att; is for required def + attributes. --> +<!ENTITY % def.att + 'def IDREF #IMPLIED'> +<!ENTITY % def-req.att + 'def IDREF #REQUIRED'> + +<!-- ref attribute: + Points to the element where more information can be found, + using the IDREF mechanism. %ref.att; is for optional + ref attributes, and %ref-req.att; is for required ref + attributes. --> +<!ENTITY % ref.att + 'ref IDREF #IMPLIED'> +<!ENTITY % ref-req.att + 'ref IDREF #REQUIRED'> + +<!-- +#1998-03-23: maler: Added show and actuate attributes to href. +# Added semi-common xml:space attribute. +--> + +<!-- HREF and source attributes: + Points to the element where more information or source data + can be found, using the URL (XLL simple link) mechanism. + For some purposes, is associated with additional XLL + attributes. %href.att; is for optional HREF attributes, + and %href-req.att; is for required HREF attributes. + %source-req.att; is for the source attribute, which + is always required. --> +<!ENTITY % href.att + 'xml-link CDATA #FIXED "simple" + href CDATA #IMPLIED + show CDATA #FIXED "embed" + actuate CDATA #FIXED "auto"'> + +<!ENTITY % href-req.att + 'xml-link CDATA #FIXED "simple" + href CDATA #REQUIRED + show CDATA #FIXED "embed" + actuate CDATA #FIXED "auto"'> + +<!ENTITY % source-req.att + 'xml-link CDATA #FIXED "simple" + xml:attributes NMTOKENS #FIXED "href source" + source CDATA #REQUIRED + show CDATA #FIXED "embed" + actuate CDATA #FIXED "auto"'> + +<!-- xml:space attribute: + Indicates that the element contains white space + that the formatter or other application should retain, + as appropriate to its function. --> +<!ENTITY % xmlspace.att + 'xml:space (default + |preserve) #FIXED "preserve"'> + +<!-- Common attributes: + Every element has an ID attribute (sometimes required, + but usually optional) for links, and a Role attribute + for extending the useful life of the DTD by allowing + authors to make subclasses for any element. %common.att; + is for common attributes where the ID is optional, and + %common-idreq.att; is for common attributes where the + ID is required. --> +<!ENTITY % common.att + 'id ID #IMPLIED + role NMTOKEN #IMPLIED'> +<!ENTITY % common-idreq.att + 'id ID #REQUIRED + role NMTOKEN #IMPLIED'> + +<!-- ............................................................... --> +<!-- Common elements ............................................... --> + +<!-- head: Title on divisions, productions, and the like --> +<!ELEMENT head (%head.pcd.mix;)*> +<!ATTLIST head %common.att;> + +<!-- ............................................................... --> +<!-- Major specification structure ................................. --> + +<!-- +#1998-03-10: maler: Made spec content model easily customizable. +--> + +<!ELEMENT spec (%spec.mdl;)> +<!ATTLIST spec %common.att;> + +<!ELEMENT front (div1+)> +<!ATTLIST front %common.att;> + +<!ELEMENT body (div1+)> +<!ATTLIST body %common.att;> + +<!-- +#1997-09-30: maler: Added inform-div1 to back content. +--> + +<!ELEMENT back ((div1+, inform-div1*) | inform-div1+)> +<!ATTLIST back %common.att;> + +<!ELEMENT div1 (head, (%div.mix;)*, div2*)> +<!ATTLIST div1 %common.att;> + +<!-- +#1997-09-30: maler: Added inform-div1 declarations. +--> + +<!-- inform-div1: Non-normative division in back matter --> +<!ELEMENT inform-div1 (head, (%div.mix;)*, div2*)> +<!ATTLIST inform-div1 %common.att;> + +<!ELEMENT div2 (head, (%div.mix;)*, div3*)> +<!ATTLIST div2 %common.att;> + +<!ELEMENT div3 (head, (%div.mix;)*, div4*)> +<!ATTLIST div3 %common.att;> + +<!ELEMENT div4 (head, (%div.mix;)*)> +<!ATTLIST div4 %common.att;> + +<!-- Specification header .......... --> + +<!-- +#1998-03-10: maler: Made header content model easily customizable. +--> + +<!ELEMENT header (%header.mdl;)> +<!ATTLIST header %common.att;> + +<!-- Example of title: "Extensible Cheese Language (XCL)" --> +<!ELEMENT title (#PCDATA)> +<!ATTLIST title %common.att;> + +<!-- Example of subtitle: "A Cheesy Specification" --> +<!ELEMENT subtitle (#PCDATA)> +<!ATTLIST subtitle %common.att;> + +<!-- Example of version: "Version 666.0" --> +<!ELEMENT version (#PCDATA)> +<!ATTLIST version %common.att;> + +<!-- Example of w3c-designation: "WD-xcl-19991231" --> +<!ELEMENT w3c-designation (#PCDATA)> +<!ATTLIST w3c-designation %common.att;> + +<!-- Example of w3c-doctype: "World Wide Web Consortium Working + Draft" --> +<!ELEMENT w3c-doctype (#PCDATA)> +<!ATTLIST w3c-doctype %common.att;> + +<!-- +#1998-03-10: maler: Made pubdate content model easily customizable. +--> + +<!ELEMENT pubdate (%pubdate.mdl;)> +<!ATTLIST pubdate %common.att;> + +<!ELEMENT day (#PCDATA)> +<!ATTLIST day %common.att;> + +<!ELEMENT month (#PCDATA)> +<!ATTLIST month %common.att;> + +<!ELEMENT year (#PCDATA)> +<!ATTLIST year %common.att;> + +<!-- Example of notice: "This draft is for public comment..." --> +<!ELEMENT notice (%hdr.mix;)+> +<!ATTLIST notice %common.att;> + +<!ELEMENT publoc (loc+)> +<!ATTLIST publoc %common.att;> + +<!ELEMENT prevlocs (loc+)> +<!ATTLIST prevlocs %common.att;> + +<!ELEMENT latestloc (loc+)> +<!ATTLIST latestloc %common.att;> + +<!-- loc (defined in "Phrase-level elements" below) --> + +<!ELEMENT authlist (author+)> +<!ATTLIST authlist %common.att;> + +<!-- +#1997-09-30: maler: Made affiliation optional. +#1998-03-10: maler: Made email optional. +--> + +<!ELEMENT author (name, affiliation?, email?)> +<!ATTLIST author %common.att;> + +<!ELEMENT name (#PCDATA)> +<!ATTLIST name + %common.att; + %key.att;> + +<!ELEMENT affiliation (#PCDATA)> +<!ATTLIST affiliation %common.att;> + +<!ELEMENT email (#PCDATA)> +<!-- HREF attribute: + email functions as a hypertext reference through this + required attribute. Typically the reference would use + the mailto: scheme. --> +<!ATTLIST email + %common.att; + %href-req.att;> + +<!-- The status element now contains both statusp and p, and + the latter now allows loc. Use p; statusp will be removed + eventually. --> +<!ELEMENT status (%statusobj.mix;)+> +<!ATTLIST status %common.att;> + +<!ELEMENT abstract (%hdr.mix;)*> +<!ATTLIST abstract %common.att;> + +<!ELEMENT pubstmt (%hdr.mix;)+> +<!ATTLIST pubstmt %common.att;> + +<!ELEMENT sourcedesc (%hdr.mix;)+> +<!ATTLIST sourcedesc %common.att;> + +<!ELEMENT langusage (language+)> +<!ATTLIST langusage %common.att;> + +<!ELEMENT language (#PCDATA)> +<!ATTLIST language %common.att;> + +<!ELEMENT revisiondesc (%hdr.mix;)+> +<!ATTLIST revisiondesc %common.att;> + +<!-- ............................................................... --> +<!-- Standalone elements ........................................... --> + +<!-- Paragraphs .................... --> + +<!-- +#1997-09-30: maler: Changed from %obj.mix; to %p.mix;. +#1997-12-29: maler: Changed order of %p.mix; and %p.pcd.mix; references. +#1997-12-29: maler: Changed order of %statusobj.mix; and %statusp.pcd.mix; +# references. +--> + +<!ELEMENT p (%p.pcd.mix;|%p.mix;)*> +<!ATTLIST p %common.att;> + +<!-- statusp: Special paragraph that allows loc inside it (note that + p now also allows loc) --> +<!ELEMENT statusp (%statusp.pcd.mix;|%statusobj.mix;)*> +<!ATTLIST statusp %common.att;> + +<!-- Lists ......................... --> + +<!ELEMENT ulist (item+)> +<!-- spacing attribute: + Use "normal" to get normal vertical spacing for items; + use "compact" to get less spacing. The default is dependent + on the stylesheet. --> +<!ATTLIST ulist + %common.att; + spacing (normal|compact) #IMPLIED> + +<!ELEMENT olist (item+)> +<!-- spacing attribute: + Use "normal" to get normal vertical spacing for items; + use "compact" to get less spacing. The default is dependent + on the stylesheet. --> +<!ATTLIST olist + %common.att; + spacing (normal|compact) #IMPLIED> + +<!ELEMENT item (%obj.mix;)+> +<!ATTLIST item %common.att;> + +<!ELEMENT slist (sitem+)> +<!ATTLIST slist %common.att;> + +<!ELEMENT sitem (%p.pcd.mix;)*> +<!ATTLIST sitem %common.att;> + +<!ELEMENT glist (gitem+)> +<!ATTLIST glist %common.att;> + +<!ELEMENT gitem (label, def)> +<!ATTLIST gitem %common.att;> + +<!ELEMENT label (%label.pcd.mix;)*> +<!ATTLIST label %common.att;> + +<!ELEMENT def (%obj.mix;)*> +<!ATTLIST def %common.att;> + +<!-- Special lists ................. --> + +<!ELEMENT blist (bibl+)> +<!ATTLIST blist %common.att;> + +<!ELEMENT bibl (%bibl.pcd.mix;)*> + +<!-- HREF attribute: + bibl optionally functions as a hypertext reference to the + referred-to resource through this attribute. --> + +<!ATTLIST bibl + %common.att; + %href.att; + %key.att;> + +<!ELEMENT orglist (member+)> +<!ATTLIST orglist %common.att;> + +<!-- +#1997-09-30: maler: Added optional affiliation. +--> + +<!ELEMENT member (name, affiliation?, role?)> +<!ATTLIST member %common.att;> + +<!-- name (defined in "Specification header" above) --> +<!-- affiliation (defined in "Specification header" above) --> + +<!ELEMENT role (#PCDATA)> +<!ATTLIST role %common.att;> + +<!-- Notes ......................... --> + +<!ELEMENT note (%obj.mix;)+> +<!ATTLIST note %common.att;> + +<!ELEMENT wfcnote (head, (%obj.mix;)+)> +<!-- ID attribute: + wfcnote must have an ID so that it can be pointed to + from a wfc element in a production. --> +<!ATTLIST wfcnote + %common-idreq.att;> + +<!ELEMENT vcnote (head, (%obj.mix;)+)> +<!-- ID attribute: + vcnote must have an ID so that it can be pointed to + from a vc element in a production. --> +<!ATTLIST vcnote + %common-idreq.att;> + +<!-- Illustrations ................. --> + +<!-- +#1998-03-23: maler: Added xml:space attribute. +--> + +<!ELEMENT eg (%eg.pcd.mix;)*> +<!ATTLIST eg + %common.att; + %xmlspace.att;> + +<!ELEMENT graphic EMPTY> +<!-- source attribute: + The graphic data must reside at the location pointed to. + This is a hypertext reference, but for practical purposes, + for now it should just be a pathname. --> +<!ATTLIST graphic + %common.att; + %source-req.att; + alt CDATA #IMPLIED> + +<!-- +#1997-11-28: maler: Added prodgroup to scrap and defined it. +--> + +<!ELEMENT scrap (head, (prodgroup+ | prod+ | bnf))> +<!-- lang attribute: + The scrap can link to a description of the language used, + found in a language element in the header. --> +<!ATTLIST scrap + %common.att; + lang IDREF #IMPLIED> + +<!ELEMENT prodgroup (prod+)> +<!-- pcw<n> attributes: + Presentational attributes to control the width + of the "pseudo-table" columns used to output + groups of productions. --> +<!ATTLIST prodgroup + %common.att; + pcw1 CDATA #IMPLIED + pcw2 CDATA #IMPLIED + pcw3 CDATA #IMPLIED + pcw4 CDATA #IMPLIED + pcw5 CDATA #IMPLIED +> + +<!ELEMENT prod (lhs, (rhs, (com|wfc|vc)*)+)> +<!-- ID attribute: + The production must have an ID so that cross-references + (specref) and mentions of nonterminals (nt) can link to + it. --> +<!ATTLIST prod + %common-idreq.att;> + +<!ELEMENT lhs (#PCDATA)> +<!ATTLIST lhs %common.att;> + +<!ELEMENT rhs (#PCDATA|nt|xnt|com)*> +<!ATTLIST rhs %common.att;> + +<!-- nt and xnt (defined in "Phrase-level elements" below) --> + +<!-- +#1997-11-28: maler: Added loc and bibref to com content. +--> + +<!ELEMENT com (#PCDATA|loc|bibref)*> +<!ATTLIST com %common.att;> + +<!-- wfc: Should generate the head of the wfcnote pointed to --> +<!ELEMENT wfc EMPTY> +<!-- def attribute: + Each well formedness tagline in a production must link to the + wfcnote that defines it. --> +<!ATTLIST wfc + %def-req.att; + %common.att;> + +<!-- vc: Should generate the head of the vcnote pointed to --> +<!ELEMENT vc EMPTY> +<!-- def attribute: + Each validity tagline in a production must link to the vcnote + that defines it. --> +<!ATTLIST vc + %def-req.att; + %common.att;> + +<!-- +#1998-03-23: maler: Added xml:space attribute. +--> + +<!-- bnf: Un-marked-up production --> +<!ELEMENT bnf (%eg.pcd.mix;)*> +<!ATTLIST bnf + %common.att; + %xmlspace.att;> + +<!-- +#1997-10-16: maler: Added table mechanism. +#1997-11-28: maler: Added non-null system ID to entity declaration. +# Added HTML table module. +#1997-12-29: maler: IGNOREd SGML Open table model. +#1998-03-10: maler: Removed SGML Open table model. +# Merged html-tbl.mod file into main file. +# Added %common.att; to all HTML table elements. +--> + +<!-- TR and TD attributes: + Alignment attributes. No default. --> +<!ENTITY % trtd.att + "align (left + |center + |right) #IMPLIED + valign (top + |middle + |bottom) #IMPLIED"> + +<!ELEMENT htable (htbody+)> +<!ATTLIST htable + border CDATA "0" + cellpadding CDATA "0" + align (left + |center + |right) "left"> + +<!ELEMENT htbody (tr+)> +<!ATTLIST htbody %common.att;> + +<!ELEMENT tr (td+)> +<!ATTLIST tr + %common.att; + %trtd.att;> + +<!ELEMENT td (%p.pcd.mix;)*> +<!ATTLIST td + %common.att; + %trtd.att; + bgcolor CDATA #IMPLIED + rowspan CDATA "1" + colspan CDATA "1"> + +<!-- ............................................................... --> +<!-- Phrase-level elements ......................................... --> + +<!-- bibref: Should generate, in square brackets, "key" on bibl --> +<!ELEMENT bibref EMPTY> +<!-- ref attribute: + A bibliography reference must link to the bibl element that + describes the resource. --> +<!ATTLIST bibref + %common.att; + %ref-req.att;> + +<!ELEMENT code (%tech.pcd.mix;)*> +<!ATTLIST code %common.att;> + +<!-- +#1998-03-10: maler: Declared ednote and related elements. +--> + +<!ELEMENT ednote (name?, date?, edtext)> +<!ATTLIST ednote %common.att;> + +<!ELEMENT date (#PCDATA)> +<!ATTLIST date %common.att;> + +<!ELEMENT edtext (#PCDATA)> +<!ATTLIST edtext %common.att;> + +<!ELEMENT emph (#PCDATA)> +<!ATTLIST emph %common.att;> + +<!-- footnote: Both footnote content and call to footnote --> +<!ELEMENT footnote (%obj.mix;)+> +<!ATTLIST footnote %common.att;> + +<!ELEMENT kw (%tech.pcd.mix;)*> +<!ATTLIST kw %common.att;> + +<!ELEMENT loc (#PCDATA)> +<!-- HREF attribute: + The purpose of a loc element is to function as a hypertext + link to a resource. (Ideally, the content of loc will also + mention the URI of the resource, so that readers of the + printed version will be able to locate the resource.) --> +<!ATTLIST loc + %common.att; + %href-req.att;> + +<!ELEMENT nt (#PCDATA)> +<!-- def attribute: + The nonterminal must link to the production that defines + it. --> +<!ATTLIST nt + %common.att; + %def-req.att;> + +<!-- +#1998-03-10: maler: Declared quote. +--> + +<!-- quote: Scare quotes and other purely presentational quotes --> +<!ELEMENT quote (%p.pcd.mix;)*> +<!ATTLIST quote %common.att;> + +<!-- specref: Should generate italic "[n.n], Section Title" for + div, "n" for numbered item, or "[n]" for production --> +<!ELEMENT specref EMPTY> +<!-- ref attribute: + The purpose of a specref element is to link to a div, item + in an olist, or production in the current spec. --> +<!ATTLIST specref + %common.att; + %ref-req.att;> + +<!ELEMENT term (#PCDATA)> +<!ATTLIST term %common.att;> + +<!ELEMENT termdef (%termdef.pcd.mix;|%termdef.mix;)*> +<!-- ID attribute: + A term definition must have an ID so that it can be linked + to from termref elements. --> +<!-- term attribute: + The canonical form of the term or phrase being defined must + appear in this attribute, even if the term or phrase also + appears in the element content in identical form (e.g., in + the term element). --> +<!ATTLIST termdef + %common-idreq.att; + term CDATA #REQUIRED> + +<!ELEMENT termref (#PCDATA)> +<!-- ref attribute: + A term reference must link to the termdef element that + defines the term. --> +<!ATTLIST termref + %common.att; + %def-req.att;> + +<!ELEMENT titleref (#PCDATA)> +<!-- HREF attribute: + A title reference can optionally function as a hypertext + link to the resource with this title. --> +<!ATTLIST titleref + %common.att; + %href.att;> + +<!ELEMENT xnt (#PCDATA)> +<!-- HREF attribute: + The nonterminal must hyperlink to a resource that serves + to define it (e.g., a production in a related XML + specification). --> +<!ATTLIST xnt + %common.att; + %href-req.att;> + +<!-- +#1997-12-29: maler: Declared xspecref. +--> + +<!ELEMENT xspecref (#PCDATA)> +<!-- HREF attribute: + The spec reference must hyperlink to the resource to + cross-refer to (e.g., a section in a related XML + specification). --> +<!ATTLIST xspecref + %common.att; + %href-req.att;> + +<!ELEMENT xtermref (#PCDATA)> +<!-- HREF attribute: + The term reference must hyperlink to the resource that + serves to define the term (e.g., a term definition in + a related XML specification). --> +<!ATTLIST xtermref + %common.att; + %href-req.att;> + +<!-- ............................................................... --> +<!-- Unused elements for ADEPT ..................................... --> + +<!-- +#1997-09-30: maler: Added unusued elements. +#1997-10-14: maler: Fixed div to move nested div to the mixture. +--> + +<!-- The following elements are purposely declared but never + referenced. Declaring them allows them to be pasted from + an HTML document into a document using this DTD in ADEPT. + The ATD Context Transformation mechanism will try to convert + them to the appropriate element for this DTD. While this + conversion will not work for all fragments, it does allow + many cases to work reasonably well. --> + +<!ELEMENT div + (head?, (%div.mix;|ul|ol|h1|h2|h3|h4|h5|h6|div)*)> +<!ELEMENT h1 (%head.pcd.mix;|em|a)*> +<!ELEMENT h2 (%head.pcd.mix;|em|a)*> +<!ELEMENT h3 (%head.pcd.mix;|em|a)*> +<!ELEMENT h4 (%head.pcd.mix;|em|a)*> +<!ELEMENT h5 (%head.pcd.mix;|em|a)*> +<!ELEMENT h6 (%head.pcd.mix;|em|a)*> +<!ELEMENT pre (%eg.pcd.mix;|em)*> +<!ELEMENT ul (item|li)*> +<!ELEMENT ol (item|li)*> +<!ELEMENT li (#PCDATA|%obj.mix;)*> +<!ELEMENT em (#PCDATA)> +<!ELEMENT a (#PCDATA)> + +<!-- ............................................................... --> +<!-- Change history ................................................ --> + +<!-- +#1997-08-18: maler +#- Did a major revision. +#1997-09-10: maler +#- Updated FPI. +#- Removed namekey element and put key attribute on name element. +#- Made statusp element and supporting entities. +#- Added slist element with sitem+ content. +#- Required head on scrap and added new bnf subelement. +#- Added an xnt element and allowed it and nt in regular text and rhs. +#- Removed the ntref element. +#- Added back the com element to the content of rhs. +#- Added a key attribute to bibl. +#- Removed the ident element. +#- Added a term element to be used inside termdef. +#- Added an xtermref element parallel to termref. +#- Beefed up DTD comments. +#1997-09-12: maler +#- Allowed term element in general text. +#- Changed bibref to EMPTY. +#- Added ref.class to termdef.pcd.mix. +#1997-09-14: maler +#- Changed main attribute of xtermref from def to href. +#- Added termdef.class to label contents. +#1997-09-30: maler +#- Added character entity module and added new entities. +#- Removed p from appearing directly in self; created %p.mix;. +#- Added inform-div (non-normative division) element. +#- Fixed xtermref comment to mention HREF, not ref. +#- Extended orglist model to allow optional affiliation. +#- Modified author to make affiliation optional. +#- Added %speclist.class; and %note.class; to %obj.mix; and %p.mix;. +#- Added %note.class; and %illus.class; to %termdef.pcd.mix;. +#- Added unused HTML elements. +#- Put empty system ID next to public ID in entity declarations. +#1997-10-14: maler +#- Fixed "unused" div content model to move nested div to mixture. +#1997-10-16: maler +#- Added SGML Open Exchange tables. +#1997-11-28: maler +#- Added support for prodgroup and its attributes. +#- Added support for HTML tables. +#- Added loc and bibref to content of com. +#- Added loc to general p content models. +#- Allowed p as alternative to statusp in status. +#- Added non-null system IDs to external parameter entity declarations. +#- (Modified the SGML Open table module to make it XML-compliant.) +#- (Modified the character entity module.) +#1997-12-29: maler +#- Moved #PCDATA occurrences to come before GIs in content models. +#- Removed use of the SGML Open table module. +#- Added xspecref element. +#- Ensured that all FPIs contain 4-digit year. +#- (Modified the character entity module.) +#1997-03-10: maler +#- Merged the character entity and table modules into the main file. +#- Added ldquo and rdquo entities. +#- Added common attributes to prodgroup. +#- Made the email element in header optional. +#- Removed reference to the SGML Open table model. +#- Added ednote element. +#- Added quote element. +#- Updated XLink usage to reflect 3 March 1998 WD. +#- Added "local" entities to the class entities for customization. +#- Parameterized several content models to allow for customization. +#1997-03-23: maler +#- Cleaned up some comments and removed some others. +#- Added xml:space semi-common attribute to eg and bnf elements. +#- Added show and embed attributes on all the uses of href. +#- Added %common.att; to all HTML table elements. +#- Added a real URI to the "typical invocation" comment. +--> + +<!-- ............................................................... --> +<!-- End of XML specification DTD .................................. --> +<!-- ............................................................... --> diff --git a/test/valid/dtds/xhtml-lat1.ent b/test/valid/dtds/xhtml-lat1.ent new file mode 100644 index 0000000..aaae738 --- /dev/null +++ b/test/valid/dtds/xhtml-lat1.ent @@ -0,0 +1,196 @@ +<!-- Portions (C) International Organization for Standardization 1986 + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. +--> +<!-- Character entity set. Typical invocation: + <!ENTITY % HTMLlat1 PUBLIC + "-//W3C//ENTITIES Latin 1 for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> + %HTMLlat1; +--> + +<!ENTITY nbsp " "> <!-- no-break space = non-breaking space, + U+00A0 ISOnum --> +<!ENTITY iexcl "¡"> <!-- inverted exclamation mark, U+00A1 ISOnum --> +<!ENTITY cent "¢"> <!-- cent sign, U+00A2 ISOnum --> +<!ENTITY pound "£"> <!-- pound sign, U+00A3 ISOnum --> +<!ENTITY curren "¤"> <!-- currency sign, U+00A4 ISOnum --> +<!ENTITY yen "¥"> <!-- yen sign = yuan sign, U+00A5 ISOnum --> +<!ENTITY brvbar "¦"> <!-- broken bar = broken vertical bar, + U+00A6 ISOnum --> +<!ENTITY sect "§"> <!-- section sign, U+00A7 ISOnum --> +<!ENTITY uml "¨"> <!-- diaeresis = spacing diaeresis, + U+00A8 ISOdia --> +<!ENTITY copy "©"> <!-- copyright sign, U+00A9 ISOnum --> +<!ENTITY ordf "ª"> <!-- feminine ordinal indicator, U+00AA ISOnum --> +<!ENTITY laquo "«"> <!-- left-pointing double angle quotation mark + = left pointing guillemet, U+00AB ISOnum --> +<!ENTITY not "¬"> <!-- not sign = discretionary hyphen, + U+00AC ISOnum --> +<!ENTITY shy "­"> <!-- soft hyphen = discretionary hyphen, + U+00AD ISOnum --> +<!ENTITY reg "®"> <!-- registered sign = registered trade mark sign, + U+00AE ISOnum --> +<!ENTITY macr "¯"> <!-- macron = spacing macron = overline + = APL overbar, U+00AF ISOdia --> +<!ENTITY deg "°"> <!-- degree sign, U+00B0 ISOnum --> +<!ENTITY plusmn "±"> <!-- plus-minus sign = plus-or-minus sign, + U+00B1 ISOnum --> +<!ENTITY sup2 "²"> <!-- superscript two = superscript digit two + = squared, U+00B2 ISOnum --> +<!ENTITY sup3 "³"> <!-- superscript three = superscript digit three + = cubed, U+00B3 ISOnum --> +<!ENTITY acute "´"> <!-- acute accent = spacing acute, + U+00B4 ISOdia --> +<!ENTITY micro "µ"> <!-- micro sign, U+00B5 ISOnum --> +<!ENTITY para "¶"> <!-- pilcrow sign = paragraph sign, + U+00B6 ISOnum --> +<!ENTITY middot "·"> <!-- middle dot = Georgian comma + = Greek middle dot, U+00B7 ISOnum --> +<!ENTITY cedil "¸"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia --> +<!ENTITY sup1 "¹"> <!-- superscript one = superscript digit one, + U+00B9 ISOnum --> +<!ENTITY ordm "º"> <!-- masculine ordinal indicator, + U+00BA ISOnum --> +<!ENTITY raquo "»"> <!-- right-pointing double angle quotation mark + = right pointing guillemet, U+00BB ISOnum --> +<!ENTITY frac14 "¼"> <!-- vulgar fraction one quarter + = fraction one quarter, U+00BC ISOnum --> +<!ENTITY frac12 "½"> <!-- vulgar fraction one half + = fraction one half, U+00BD ISOnum --> +<!ENTITY frac34 "¾"> <!-- vulgar fraction three quarters + = fraction three quarters, U+00BE ISOnum --> +<!ENTITY iquest "¿"> <!-- inverted question mark + = turned question mark, U+00BF ISOnum --> +<!ENTITY Agrave "À"> <!-- latin capital letter A with grave + = latin capital letter A grave, + U+00C0 ISOlat1 --> +<!ENTITY Aacute "Á"> <!-- latin capital letter A with acute, + U+00C1 ISOlat1 --> +<!ENTITY Acirc "Â"> <!-- latin capital letter A with circumflex, + U+00C2 ISOlat1 --> +<!ENTITY Atilde "Ã"> <!-- latin capital letter A with tilde, + U+00C3 ISOlat1 --> +<!ENTITY Auml "Ä"> <!-- latin capital letter A with diaeresis, + U+00C4 ISOlat1 --> +<!ENTITY Aring "Å"> <!-- latin capital letter A with ring above + = latin capital letter A ring, + U+00C5 ISOlat1 --> +<!ENTITY AElig "Æ"> <!-- latin capital letter AE + = latin capital ligature AE, + U+00C6 ISOlat1 --> +<!ENTITY Ccedil "Ç"> <!-- latin capital letter C with cedilla, + U+00C7 ISOlat1 --> +<!ENTITY Egrave "È"> <!-- latin capital letter E with grave, + U+00C8 ISOlat1 --> +<!ENTITY Eacute "É"> <!-- latin capital letter E with acute, + U+00C9 ISOlat1 --> +<!ENTITY Ecirc "Ê"> <!-- latin capital letter E with circumflex, + U+00CA ISOlat1 --> +<!ENTITY Euml "Ë"> <!-- latin capital letter E with diaeresis, + U+00CB ISOlat1 --> +<!ENTITY Igrave "Ì"> <!-- latin capital letter I with grave, + U+00CC ISOlat1 --> +<!ENTITY Iacute "Í"> <!-- latin capital letter I with acute, + U+00CD ISOlat1 --> +<!ENTITY Icirc "Î"> <!-- latin capital letter I with circumflex, + U+00CE ISOlat1 --> +<!ENTITY Iuml "Ï"> <!-- latin capital letter I with diaeresis, + U+00CF ISOlat1 --> +<!ENTITY ETH "Ð"> <!-- latin capital letter ETH, U+00D0 ISOlat1 --> +<!ENTITY Ntilde "Ñ"> <!-- latin capital letter N with tilde, + U+00D1 ISOlat1 --> +<!ENTITY Ograve "Ò"> <!-- latin capital letter O with grave, + U+00D2 ISOlat1 --> +<!ENTITY Oacute "Ó"> <!-- latin capital letter O with acute, + U+00D3 ISOlat1 --> +<!ENTITY Ocirc "Ô"> <!-- latin capital letter O with circumflex, + U+00D4 ISOlat1 --> +<!ENTITY Otilde "Õ"> <!-- latin capital letter O with tilde, + U+00D5 ISOlat1 --> +<!ENTITY Ouml "Ö"> <!-- latin capital letter O with diaeresis, + U+00D6 ISOlat1 --> +<!ENTITY times "×"> <!-- multiplication sign, U+00D7 ISOnum --> +<!ENTITY Oslash "Ø"> <!-- latin capital letter O with stroke + = latin capital letter O slash, + U+00D8 ISOlat1 --> +<!ENTITY Ugrave "Ù"> <!-- latin capital letter U with grave, + U+00D9 ISOlat1 --> +<!ENTITY Uacute "Ú"> <!-- latin capital letter U with acute, + U+00DA ISOlat1 --> +<!ENTITY Ucirc "Û"> <!-- latin capital letter U with circumflex, + U+00DB ISOlat1 --> +<!ENTITY Uuml "Ü"> <!-- latin capital letter U with diaeresis, + U+00DC ISOlat1 --> +<!ENTITY Yacute "Ý"> <!-- latin capital letter Y with acute, + U+00DD ISOlat1 --> +<!ENTITY THORN "Þ"> <!-- latin capital letter THORN, + U+00DE ISOlat1 --> +<!ENTITY szlig "ß"> <!-- latin small letter sharp s = ess-zed, + U+00DF ISOlat1 --> +<!ENTITY agrave "à"> <!-- latin small letter a with grave + = latin small letter a grave, + U+00E0 ISOlat1 --> +<!ENTITY aacute "á"> <!-- latin small letter a with acute, + U+00E1 ISOlat1 --> +<!ENTITY acirc "â"> <!-- latin small letter a with circumflex, + U+00E2 ISOlat1 --> +<!ENTITY atilde "ã"> <!-- latin small letter a with tilde, + U+00E3 ISOlat1 --> +<!ENTITY auml "ä"> <!-- latin small letter a with diaeresis, + U+00E4 ISOlat1 --> +<!ENTITY aring "å"> <!-- latin small letter a with ring above + = latin small letter a ring, + U+00E5 ISOlat1 --> +<!ENTITY aelig "æ"> <!-- latin small letter ae + = latin small ligature ae, U+00E6 ISOlat1 --> +<!ENTITY ccedil "ç"> <!-- latin small letter c with cedilla, + U+00E7 ISOlat1 --> +<!ENTITY egrave "è"> <!-- latin small letter e with grave, + U+00E8 ISOlat1 --> +<!ENTITY eacute "é"> <!-- latin small letter e with acute, + U+00E9 ISOlat1 --> +<!ENTITY ecirc "ê"> <!-- latin small letter e with circumflex, + U+00EA ISOlat1 --> +<!ENTITY euml "ë"> <!-- latin small letter e with diaeresis, + U+00EB ISOlat1 --> +<!ENTITY igrave "ì"> <!-- latin small letter i with grave, + U+00EC ISOlat1 --> +<!ENTITY iacute "í"> <!-- latin small letter i with acute, + U+00ED ISOlat1 --> +<!ENTITY icirc "î"> <!-- latin small letter i with circumflex, + U+00EE ISOlat1 --> +<!ENTITY iuml "ï"> <!-- latin small letter i with diaeresis, + U+00EF ISOlat1 --> +<!ENTITY eth "ð"> <!-- latin small letter eth, U+00F0 ISOlat1 --> +<!ENTITY ntilde "ñ"> <!-- latin small letter n with tilde, + U+00F1 ISOlat1 --> +<!ENTITY ograve "ò"> <!-- latin small letter o with grave, + U+00F2 ISOlat1 --> +<!ENTITY oacute "ó"> <!-- latin small letter o with acute, + U+00F3 ISOlat1 --> +<!ENTITY ocirc "ô"> <!-- latin small letter o with circumflex, + U+00F4 ISOlat1 --> +<!ENTITY otilde "õ"> <!-- latin small letter o with tilde, + U+00F5 ISOlat1 --> +<!ENTITY ouml "ö"> <!-- latin small letter o with diaeresis, + U+00F6 ISOlat1 --> +<!ENTITY divide "÷"> <!-- division sign, U+00F7 ISOnum --> +<!ENTITY oslash "ø"> <!-- latin small letter o with stroke, + = latin small letter o slash, + U+00F8 ISOlat1 --> +<!ENTITY ugrave "ù"> <!-- latin small letter u with grave, + U+00F9 ISOlat1 --> +<!ENTITY uacute "ú"> <!-- latin small letter u with acute, + U+00FA ISOlat1 --> +<!ENTITY ucirc "û"> <!-- latin small letter u with circumflex, + U+00FB ISOlat1 --> +<!ENTITY uuml "ü"> <!-- latin small letter u with diaeresis, + U+00FC ISOlat1 --> +<!ENTITY yacute "ý"> <!-- latin small letter y with acute, + U+00FD ISOlat1 --> +<!ENTITY thorn "þ"> <!-- latin small letter thorn with, + U+00FE ISOlat1 --> +<!ENTITY yuml "ÿ"> <!-- latin small letter y with diaeresis, + U+00FF ISOlat1 --> diff --git a/test/valid/dtds/xhtml-special.ent b/test/valid/dtds/xhtml-special.ent new file mode 100644 index 0000000..cf709d1 --- /dev/null +++ b/test/valid/dtds/xhtml-special.ent @@ -0,0 +1,79 @@ +<!-- Special characters for HTML --> + +<!-- Character entity set. Typical invocation: + <!ENTITY % HTMLspecial PUBLIC + "-//W3C//ENTITIES Special for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"> + %HTMLspecial; +--> + +<!-- Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. +--> + +<!-- Relevant ISO entity set is given unless names are newly introduced. + New names (i.e., not in ISO 8879 list) do not clash with any + existing ISO 8879 entity names. ISO 10646 character numbers + are given for each character, in hex. values are decimal + conversions of the ISO 10646 values and refer to the document + character set. Names are Unicode names. +--> + +<!-- C0 Controls and Basic Latin --> +<!ENTITY quot """> <!-- quotation mark = APL quote, + U+0022 ISOnum --> +<!ENTITY amp "&#38;"> <!-- ampersand, U+0026 ISOnum --> +<!ENTITY lt "&#60;"> <!-- less-than sign, U+003C ISOnum --> +<!ENTITY gt ">"> <!-- greater-than sign, U+003E ISOnum --> +<!ENTITY apos "'"> <!-- apostrophe mark, U+0027 ISOnum --> + +<!-- Latin Extended-A --> +<!ENTITY OElig "Œ"> <!-- latin capital ligature OE, + U+0152 ISOlat2 --> +<!ENTITY oelig "œ"> <!-- latin small ligature oe, U+0153 ISOlat2 --> +<!-- ligature is a misnomer, this is a separate character in some languages --> +<!ENTITY Scaron "Š"> <!-- latin capital letter S with caron, + U+0160 ISOlat2 --> +<!ENTITY scaron "š"> <!-- latin small letter s with caron, + U+0161 ISOlat2 --> +<!ENTITY Yuml "Ÿ"> <!-- latin capital letter Y with diaeresis, + U+0178 ISOlat2 --> + +<!-- Spacing Modifier Letters --> +<!ENTITY circ "ˆ"> <!-- modifier letter circumflex accent, + U+02C6 ISOpub --> +<!ENTITY tilde "˜"> <!-- small tilde, U+02DC ISOdia --> + +<!-- General Punctuation --> +<!ENTITY ensp " "> <!-- en space, U+2002 ISOpub --> +<!ENTITY emsp " "> <!-- em space, U+2003 ISOpub --> +<!ENTITY thinsp " "> <!-- thin space, U+2009 ISOpub --> +<!ENTITY zwnj "‌"> <!-- zero width non-joiner, + U+200C NEW RFC 2070 --> +<!ENTITY zwj "‍"> <!-- zero width joiner, U+200D NEW RFC 2070 --> +<!ENTITY lrm "‎"> <!-- left-to-right mark, U+200E NEW RFC 2070 --> +<!ENTITY rlm "‏"> <!-- right-to-left mark, U+200F NEW RFC 2070 --> +<!ENTITY ndash "–"> <!-- en dash, U+2013 ISOpub --> +<!ENTITY mdash "—"> <!-- em dash, U+2014 ISOpub --> +<!ENTITY lsquo "‘"> <!-- left single quotation mark, + U+2018 ISOnum --> +<!ENTITY rsquo "’"> <!-- right single quotation mark, + U+2019 ISOnum --> +<!ENTITY sbquo "‚"> <!-- single low-9 quotation mark, U+201A NEW --> +<!ENTITY ldquo "“"> <!-- left double quotation mark, + U+201C ISOnum --> +<!ENTITY rdquo "”"> <!-- right double quotation mark, + U+201D ISOnum --> +<!ENTITY bdquo "„"> <!-- double low-9 quotation mark, U+201E NEW --> +<!ENTITY dagger "†"> <!-- dagger, U+2020 ISOpub --> +<!ENTITY Dagger "‡"> <!-- double dagger, U+2021 ISOpub --> +<!ENTITY permil "‰"> <!-- per mille sign, U+2030 ISOtech --> +<!ENTITY lsaquo "‹"> <!-- single left-pointing angle quotation mark, + U+2039 ISO proposed --> +<!-- lsaquo is proposed but not yet ISO standardized --> +<!ENTITY rsaquo "›"> <!-- single right-pointing angle quotation mark, + U+203A ISO proposed --> +<!-- rsaquo is proposed but not yet ISO standardized --> +<!ENTITY euro "€"> <!-- euro sign, U+20AC NEW --> diff --git a/test/valid/dtds/xhtml-symbol.ent b/test/valid/dtds/xhtml-symbol.ent new file mode 100644 index 0000000..16f876b --- /dev/null +++ b/test/valid/dtds/xhtml-symbol.ent @@ -0,0 +1,242 @@ +<!-- Mathematical, Greek and Symbolic characters for HTML --> + +<!-- Character entity set. Typical invocation: + <!ENTITY % HTMLsymbol PUBLIC + "-//W3C//ENTITIES Symbols for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"> + %HTMLsymbol; +--> + +<!-- Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. +--> + +<!-- Relevant ISO entity set is given unless names are newly introduced. + New names (i.e., not in ISO 8879 list) do not clash with any + existing ISO 8879 entity names. ISO 10646 character numbers + are given for each character, in hex. values are decimal + conversions of the ISO 10646 values and refer to the document + character set. Names are Unicode names. +--> + +<!-- Latin Extended-B --> +<!ENTITY fnof "ƒ"> <!-- latin small f with hook = function + = florin, U+0192 ISOtech --> + +<!-- Greek --> +<!ENTITY Alpha "Α"> <!-- greek capital letter alpha, U+0391 --> +<!ENTITY Beta "Β"> <!-- greek capital letter beta, U+0392 --> +<!ENTITY Gamma "Γ"> <!-- greek capital letter gamma, + U+0393 ISOgrk3 --> +<!ENTITY Delta "Δ"> <!-- greek capital letter delta, + U+0394 ISOgrk3 --> +<!ENTITY Epsilon "Ε"> <!-- greek capital letter epsilon, U+0395 --> +<!ENTITY Zeta "Ζ"> <!-- greek capital letter zeta, U+0396 --> +<!ENTITY Eta "Η"> <!-- greek capital letter eta, U+0397 --> +<!ENTITY Theta "Θ"> <!-- greek capital letter theta, + U+0398 ISOgrk3 --> +<!ENTITY Iota "Ι"> <!-- greek capital letter iota, U+0399 --> +<!ENTITY Kappa "Κ"> <!-- greek capital letter kappa, U+039A --> +<!ENTITY Lambda "Λ"> <!-- greek capital letter lambda, + U+039B ISOgrk3 --> +<!ENTITY Mu "Μ"> <!-- greek capital letter mu, U+039C --> +<!ENTITY Nu "Ν"> <!-- greek capital letter nu, U+039D --> +<!ENTITY Xi "Ξ"> <!-- greek capital letter xi, U+039E ISOgrk3 --> +<!ENTITY Omicron "Ο"> <!-- greek capital letter omicron, U+039F --> +<!ENTITY Pi "Π"> <!-- greek capital letter pi, U+03A0 ISOgrk3 --> +<!ENTITY Rho "Ρ"> <!-- greek capital letter rho, U+03A1 --> +<!-- there is no Sigmaf, and no U+03A2 character either --> +<!ENTITY Sigma "Σ"> <!-- greek capital letter sigma, + U+03A3 ISOgrk3 --> +<!ENTITY Tau "Τ"> <!-- greek capital letter tau, U+03A4 --> +<!ENTITY Upsilon "Υ"> <!-- greek capital letter upsilon, + U+03A5 ISOgrk3 --> +<!ENTITY Phi "Φ"> <!-- greek capital letter phi, + U+03A6 ISOgrk3 --> +<!ENTITY Chi "Χ"> <!-- greek capital letter chi, U+03A7 --> +<!ENTITY Psi "Ψ"> <!-- greek capital letter psi, + U+03A8 ISOgrk3 --> +<!ENTITY Omega "Ω"> <!-- greek capital letter omega, + U+03A9 ISOgrk3 --> + +<!ENTITY alpha "α"> <!-- greek small letter alpha, + U+03B1 ISOgrk3 --> +<!ENTITY beta "β"> <!-- greek small letter beta, U+03B2 ISOgrk3 --> +<!ENTITY gamma "γ"> <!-- greek small letter gamma, + U+03B3 ISOgrk3 --> +<!ENTITY delta "δ"> <!-- greek small letter delta, + U+03B4 ISOgrk3 --> +<!ENTITY epsilon "ε"> <!-- greek small letter epsilon, + U+03B5 ISOgrk3 --> +<!ENTITY zeta "ζ"> <!-- greek small letter zeta, U+03B6 ISOgrk3 --> +<!ENTITY eta "η"> <!-- greek small letter eta, U+03B7 ISOgrk3 --> +<!ENTITY theta "θ"> <!-- greek small letter theta, + U+03B8 ISOgrk3 --> +<!ENTITY iota "ι"> <!-- greek small letter iota, U+03B9 ISOgrk3 --> +<!ENTITY kappa "κ"> <!-- greek small letter kappa, + U+03BA ISOgrk3 --> +<!ENTITY lambda "λ"> <!-- greek small letter lambda, + U+03BB ISOgrk3 --> +<!ENTITY mu "μ"> <!-- greek small letter mu, U+03BC ISOgrk3 --> +<!ENTITY nu "ν"> <!-- greek small letter nu, U+03BD ISOgrk3 --> +<!ENTITY xi "ξ"> <!-- greek small letter xi, U+03BE ISOgrk3 --> +<!ENTITY omicron "ο"> <!-- greek small letter omicron, U+03BF NEW --> +<!ENTITY pi "π"> <!-- greek small letter pi, U+03C0 ISOgrk3 --> +<!ENTITY rho "ρ"> <!-- greek small letter rho, U+03C1 ISOgrk3 --> +<!ENTITY sigmaf "ς"> <!-- greek small letter final sigma, + U+03C2 ISOgrk3 --> +<!ENTITY sigma "σ"> <!-- greek small letter sigma, + U+03C3 ISOgrk3 --> +<!ENTITY tau "τ"> <!-- greek small letter tau, U+03C4 ISOgrk3 --> +<!ENTITY upsilon "υ"> <!-- greek small letter upsilon, + U+03C5 ISOgrk3 --> +<!ENTITY phi "φ"> <!-- greek small letter phi, U+03C6 ISOgrk3 --> +<!ENTITY chi "χ"> <!-- greek small letter chi, U+03C7 ISOgrk3 --> +<!ENTITY psi "ψ"> <!-- greek small letter psi, U+03C8 ISOgrk3 --> +<!ENTITY omega "ω"> <!-- greek small letter omega, + U+03C9 ISOgrk3 --> +<!ENTITY thetasym "ϑ"> <!-- greek small letter theta symbol, + U+03D1 NEW --> +<!ENTITY upsih "ϒ"> <!-- greek upsilon with hook symbol, + U+03D2 NEW --> +<!ENTITY piv "ϖ"> <!-- greek pi symbol, U+03D6 ISOgrk3 --> + +<!-- General Punctuation --> +<!ENTITY bull "•"> <!-- bullet = black small circle, + U+2022 ISOpub --> +<!-- bullet is NOT the same as bullet operator, U+2219 --> +<!ENTITY hellip "…"> <!-- horizontal ellipsis = three dot leader, + U+2026 ISOpub --> +<!ENTITY prime "′"> <!-- prime = minutes = feet, U+2032 ISOtech --> +<!ENTITY Prime "″"> <!-- double prime = seconds = inches, + U+2033 ISOtech --> +<!ENTITY oline "‾"> <!-- overline = spacing overscore, + U+203E NEW --> +<!ENTITY frasl "⁄"> <!-- fraction slash, U+2044 NEW --> + +<!-- Letterlike Symbols --> +<!ENTITY weierp "℘"> <!-- script capital P = power set + = Weierstrass p, U+2118 ISOamso --> +<!ENTITY image "ℑ"> <!-- blackletter capital I = imaginary part, + U+2111 ISOamso --> +<!ENTITY real "ℜ"> <!-- blackletter capital R = real part symbol, + U+211C ISOamso --> +<!ENTITY trade "™"> <!-- trade mark sign, U+2122 ISOnum --> +<!ENTITY alefsym "ℵ"> <!-- alef symbol = first transfinite cardinal, + U+2135 NEW --> +<!-- alef symbol is NOT the same as hebrew letter alef, + U+05D0 although the same glyph could be used to depict both characters --> + +<!-- Arrows --> +<!ENTITY larr "←"> <!-- leftwards arrow, U+2190 ISOnum --> +<!ENTITY uarr "↑"> <!-- upwards arrow, U+2191 ISOnum--> +<!ENTITY rarr "→"> <!-- rightwards arrow, U+2192 ISOnum --> +<!ENTITY darr "↓"> <!-- downwards arrow, U+2193 ISOnum --> +<!ENTITY harr "↔"> <!-- left right arrow, U+2194 ISOamsa --> +<!ENTITY crarr "↵"> <!-- downwards arrow with corner leftwards + = carriage return, U+21B5 NEW --> +<!ENTITY lArr "⇐"> <!-- leftwards double arrow, U+21D0 ISOtech --> +<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow + but also does not have any other character for that function. So ? lArr can + be used for 'is implied by' as ISOtech suggests --> +<!ENTITY uArr "⇑"> <!-- upwards double arrow, U+21D1 ISOamsa --> +<!ENTITY rArr "⇒"> <!-- rightwards double arrow, + U+21D2 ISOtech --> +<!-- Unicode does not say this is the 'implies' character but does not have + another character with this function so ? + rArr can be used for 'implies' as ISOtech suggests --> +<!ENTITY dArr "⇓"> <!-- downwards double arrow, U+21D3 ISOamsa --> +<!ENTITY hArr "⇔"> <!-- left right double arrow, + U+21D4 ISOamsa --> + +<!-- Mathematical Operators --> +<!ENTITY forall "∀"> <!-- for all, U+2200 ISOtech --> +<!ENTITY part "∂"> <!-- partial differential, U+2202 ISOtech --> +<!ENTITY exist "∃"> <!-- there exists, U+2203 ISOtech --> +<!ENTITY empty "∅"> <!-- empty set = null set = diameter, + U+2205 ISOamso --> +<!ENTITY nabla "∇"> <!-- nabla = backward difference, + U+2207 ISOtech --> +<!ENTITY isin "∈"> <!-- element of, U+2208 ISOtech --> +<!ENTITY notin "∉"> <!-- not an element of, U+2209 ISOtech --> +<!ENTITY ni "∋"> <!-- contains as member, U+220B ISOtech --> +<!-- should there be a more memorable name than 'ni'? --> +<!ENTITY prod "∏"> <!-- n-ary product = product sign, + U+220F ISOamsb --> +<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though + the same glyph might be used for both --> +<!ENTITY sum "∑"> <!-- n-ary sumation, U+2211 ISOamsb --> +<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma' + though the same glyph might be used for both --> +<!ENTITY minus "−"> <!-- minus sign, U+2212 ISOtech --> +<!ENTITY lowast "∗"> <!-- asterisk operator, U+2217 ISOtech --> +<!ENTITY radic "√"> <!-- square root = radical sign, + U+221A ISOtech --> +<!ENTITY prop "∝"> <!-- proportional to, U+221D ISOtech --> +<!ENTITY infin "∞"> <!-- infinity, U+221E ISOtech --> +<!ENTITY ang "∠"> <!-- angle, U+2220 ISOamso --> +<!ENTITY and "∧"> <!-- logical and = wedge, U+2227 ISOtech --> +<!ENTITY or "∨"> <!-- logical or = vee, U+2228 ISOtech --> +<!ENTITY cap "∩"> <!-- intersection = cap, U+2229 ISOtech --> +<!ENTITY cup "∪"> <!-- union = cup, U+222A ISOtech --> +<!ENTITY int "∫"> <!-- integral, U+222B ISOtech --> +<!ENTITY there4 "∴"> <!-- therefore, U+2234 ISOtech --> +<!ENTITY sim "∼"> <!-- tilde operator = varies with = similar to, + U+223C ISOtech --> +<!-- tilde operator is NOT the same character as the tilde, U+007E, + although the same glyph might be used to represent both --> +<!ENTITY cong "≅"> <!-- approximately equal to, U+2245 ISOtech --> +<!ENTITY asymp "≈"> <!-- almost equal to = asymptotic to, + U+2248 ISOamsr --> +<!ENTITY ne "≠"> <!-- not equal to, U+2260 ISOtech --> +<!ENTITY equiv "≡"> <!-- identical to, U+2261 ISOtech --> +<!ENTITY le "≤"> <!-- less-than or equal to, U+2264 ISOtech --> +<!ENTITY ge "≥"> <!-- greater-than or equal to, + U+2265 ISOtech --> +<!ENTITY sub "⊂"> <!-- subset of, U+2282 ISOtech --> +<!ENTITY sup "⊃"> <!-- superset of, U+2283 ISOtech --> +<!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol + font encoding and is not included. Should it be, for symmetry? + It is in ISOamsn --> +<!ENTITY nsub "⊄"> <!-- not a subset of, U+2284 ISOamsn --> +<!ENTITY sube "⊆"> <!-- subset of or equal to, U+2286 ISOtech --> +<!ENTITY supe "⊇"> <!-- superset of or equal to, + U+2287 ISOtech --> +<!ENTITY oplus "⊕"> <!-- circled plus = direct sum, + U+2295 ISOamsb --> +<!ENTITY otimes "⊗"> <!-- circled times = vector product, + U+2297 ISOamsb --> +<!ENTITY perp "⊥"> <!-- up tack = orthogonal to = perpendicular, + U+22A5 ISOtech --> +<!ENTITY sdot "⋅"> <!-- dot operator, U+22C5 ISOamsb --> +<!-- dot operator is NOT the same character as U+00B7 middle dot --> + +<!-- Miscellaneous Technical --> +<!ENTITY lceil "⌈"> <!-- left ceiling = apl upstile, + U+2308 ISOamsc --> +<!ENTITY rceil "⌉"> <!-- right ceiling, U+2309 ISOamsc --> +<!ENTITY lfloor "⌊"> <!-- left floor = apl downstile, + U+230A ISOamsc --> +<!ENTITY rfloor "⌋"> <!-- right floor, U+230B ISOamsc --> +<!ENTITY lang "〈"> <!-- left-pointing angle bracket = bra, + U+2329 ISOtech --> +<!-- lang is NOT the same character as U+003C 'less than' + or U+2039 'single left-pointing angle quotation mark' --> +<!ENTITY rang "〉"> <!-- right-pointing angle bracket = ket, + U+232A ISOtech --> +<!-- rang is NOT the same character as U+003E 'greater than' + or U+203A 'single right-pointing angle quotation mark' --> + +<!-- Geometric Shapes --> +<!ENTITY loz "◊"> <!-- lozenge, U+25CA ISOpub --> + +<!-- Miscellaneous Symbols --> +<!ENTITY spades "♠"> <!-- black spade suit, U+2660 ISOpub --> +<!-- black here seems to mean filled as opposed to hollow --> +<!ENTITY clubs "♣"> <!-- black club suit = shamrock, + U+2663 ISOpub --> +<!ENTITY hearts "♥"> <!-- black heart suit = valentine, + U+2665 ISOpub --> +<!ENTITY diams "♦"> <!-- black diamond suit, U+2666 ISOpub --> diff --git a/test/valid/dtds/xhtml.cat b/test/valid/dtds/xhtml.cat new file mode 100644 index 0000000..0624dea --- /dev/null +++ b/test/valid/dtds/xhtml.cat @@ -0,0 +1,14 @@ +OVERRIDE YES + -- Oasis entity catalog for Extensible HTML 1.0 -- + +PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "xhtml1-strict.dtd" +PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd" +PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "xhtml1-frameset.dtd" + + -- ISO latin 1 entity set for Extensible HTML (XML 1.0 format) -- + +PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "xhtml-lat1.ent" +PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "xhtml-symbol.ent" +PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "xhtml-special.ent" + +SGMLDECL "xhtml1.dcl" diff --git a/test/valid/dtds/xhtml1-frameset.dtd b/test/valid/dtds/xhtml1-frameset.dtd new file mode 100644 index 0000000..1dd44e5 --- /dev/null +++ b/test/valid/dtds/xhtml1-frameset.dtd @@ -0,0 +1,1223 @@ +<!-- + Extensible HTML version 1.0 Frameset DTD + + This is the same as HTML 4.0 Frameset except for + changes due to the differences between XML and SGML. + + Namespace = http://www.w3.org/1999/xhtml + + For further information, see: http://www.w3.org/TR/xhtml1 + + Copyright (c) 1998-1999 W3C (MIT, INRIA, Keio), + All Rights Reserved. + + This DTD module is identified by the PUBLIC and SYSTEM identifiers: + + PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" + SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd" + + +--> + +<!--================ Character mnemonic entities =========================--> + +<!ENTITY % HTMLlat1 PUBLIC + "-//W3C//ENTITIES Latin 1 for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> +%HTMLlat1; + +<!ENTITY % HTMLsymbol PUBLIC + "-//W3C//ENTITIES Symbols for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"> +%HTMLsymbol; + +<!ENTITY % HTMLspecial PUBLIC + "-//W3C//ENTITIES Special for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"> +%HTMLspecial; + +<!--================== Imported Names ====================================--> + +<!ENTITY % ContentType "CDATA"> + <!-- media type, as per [RFC2045] --> + +<!ENTITY % ContentTypes "CDATA"> + <!-- comma-separated list of media types, as per [RFC2045] --> + +<!ENTITY % Charset "CDATA"> + <!-- a character encoding, as per [RFC2045] --> + +<!ENTITY % Charsets "CDATA"> + <!-- a space separated list of character encodings, as per [RFC2045] --> + +<!ENTITY % LanguageCode "NMTOKEN"> + <!-- a language code, as per [RFC1766] --> + +<!ENTITY % Character "CDATA"> + <!-- a single character from [ISO10646] --> + +<!ENTITY % Number "CDATA"> + <!-- one or more digits --> + +<!ENTITY % LinkTypes "CDATA"> + <!-- space-separated list of link types --> + +<!ENTITY % MediaDesc "CDATA"> + <!-- single or comma-separated list of media descriptors --> + +<!ENTITY % URI "CDATA"> + <!-- a Uniform Resource Identifier, see [RFC2396] --> + +<!ENTITY % UriList "CDATA"> + <!-- a space separated list of Uniform Resource Identifiers --> + +<!ENTITY % Datetime "CDATA"> + <!-- date and time information. ISO date format --> + +<!ENTITY % Script "CDATA"> + <!-- script expression --> + +<!ENTITY % StyleSheet "CDATA"> + <!-- style sheet data --> + +<!ENTITY % Text "CDATA"> + <!-- used for titles etc. --> + +<!ENTITY % FrameTarget "NMTOKEN"> + <!-- render in this frame --> + +<!ENTITY % Length "CDATA"> + <!-- nn for pixels or nn% for percentage length --> + +<!ENTITY % MultiLength "CDATA"> + <!-- pixel, percentage, or relative --> + +<!ENTITY % MultiLengths "CDATA"> + <!-- comma-separated list of MultiLength --> + +<!ENTITY % Pixels "CDATA"> + <!-- integer representing length in pixels --> + +<!-- these are used for image maps --> + +<!ENTITY % Shape "(rect|circle|poly|default)"> + +<!ENTITY % Coords "CDATA"> + <!-- comma separated list of lengths --> + +<!-- used for object, applet, img, input and iframe --> +<!ENTITY % ImgAlign "(top|middle|bottom|left|right)"> + +<!-- a color using sRGB: #RRGGBB as Hex values --> +<!ENTITY % Color "CDATA"> + +<!-- There are also 16 widely known color names with their sRGB values: + + Black = #000000 Green = #008000 + Silver = #C0C0C0 Lime = #00FF00 + Gray = #808080 Olive = #808000 + White = #FFFFFF Yellow = #FFFF00 + Maroon = #800000 Navy = #000080 + Red = #FF0000 Blue = #0000FF + Purple = #800080 Teal = #008080 + Fuchsia= #FF00FF Aqua = #00FFFF +--> + +<!--=================== Generic Attributes ===============================--> + +<!-- core attributes common to most elements + id document-wide unique id + class space separated list of classes + style associated style info + title advisory title/amplification +--> +<!ENTITY % coreattrs + "id ID #IMPLIED + class CDATA #IMPLIED + style %StyleSheet; #IMPLIED + title %Text; #IMPLIED" + > + +<!-- internationalization attributes + lang language code (backwards compatible) + xml:lang language code (as per XML 1.0 spec) + dir direction for weak/neutral text +--> +<!ENTITY % i18n + "lang %LanguageCode; #IMPLIED + xml:lang %LanguageCode; #IMPLIED + dir (ltr|rtl) #IMPLIED" + > + +<!-- attributes for common UI events + onclick a pointer button was clicked + ondblclick a pointer button was double clicked + onmousedown a pointer button was pressed down + onmouseup a pointer button was released + onmousemove a pointer was moved onto the element + onmouseout a pointer was moved away from the element + onkeypress a key was pressed and released + onkeydown a key was pressed down + onkeyup a key was released +--> +<!ENTITY % events + "onclick %Script; #IMPLIED + ondblclick %Script; #IMPLIED + onmousedown %Script; #IMPLIED + onmouseup %Script; #IMPLIED + onmouseover %Script; #IMPLIED + onmousemove %Script; #IMPLIED + onmouseout %Script; #IMPLIED + onkeypress %Script; #IMPLIED + onkeydown %Script; #IMPLIED + onkeyup %Script; #IMPLIED" + > + +<!-- attributes for elements that can get the focus + accesskey accessibility key character + tabindex position in tabbing order + onfocus the element got the focus + onblur the element lost the focus +--> +<!ENTITY % focus + "accesskey %Character; #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED" + > + +<!ENTITY % attrs "%coreattrs; %i18n; %events;"> + +<!-- text alignment for p, div, h1-h6. The default is + align="left" for ltr headings, "right" for rtl --> + +<!ENTITY % TextAlign "align (left|center|right) #IMPLIED"> + +<!--=================== Text Elements ====================================--> + +<!ENTITY % special + "br | span | bdo |object | applet | img | map | iframe"> + +<!ENTITY % fontstyle "tt | i | b | big | small | u + | s | strike |font | basefont"> + +<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup | + samp | kbd | var | cite | abbr | acronym"> + +<!ENTITY % inline.forms "input | select | textarea | label | button"> + +<!-- these can occur at block or inline level --> +<!ENTITY % misc "ins | del | script | noscript"> + +<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;"> + +<!-- %Inline; covers inline or "text-level" elements --> +<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*"> + +<!--================== Block level elements ==============================--> + +<!ENTITY % heading "h1|h2|h3|h4|h5|h6"> +<!ENTITY % lists "ul | ol | dl | menu | dir"> +<!ENTITY % blocktext "pre | hr | blockquote | address | center"> + +<!ENTITY % block + "p | %heading; | div | %lists; | %blocktext; | isindex | fieldset | table"> + +<!ENTITY % Block "(%block; | form | %misc;)*"> + +<!-- %Flow; mixes Block and Inline and is used for list items etc. --> +<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*"> + +<!--================== Content models for exclusions =====================--> + +<!-- a elements use %Inline; excluding a --> + +<!ENTITY % a.content + "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*"> + +<!-- pre uses %Inline excluding img, object, applet, big, small, + sub, sup, font, or basefont --> + +<!ENTITY % pre.content + "(#PCDATA | a | br | span | bdo | map | tt | i | b | u | s | + %phrase; | %inline.forms;)*"> + +<!-- form uses %Flow; excluding form --> + +<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*"> + +<!-- button uses %Flow; but excludes a, form, form controls, iframe --> + +<!ENTITY % button.content + "(#PCDATA | p | %heading; | div | %lists; | %blocktext; | + table | br | span | bdo | object | applet | img | map | + %fontstyle; | %phrase; | %misc;)*"> + +<!--================ Document Structure ==================================--> + +<!-- the namespace URI designates the document profile --> + +<!ELEMENT html (head, frameset)> +<!ATTLIST html + %i18n; + xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml' + > + +<!--================ Document Head =======================================--> + +<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*"> + +<!-- content model is %head.misc; combined with a single + title and an optional base element in any order --> + +<!ELEMENT head (%head.misc;, + ((title, %head.misc;, (base, %head.misc;)?) | + (base, %head.misc;, (title, %head.misc;))))> + +<!ATTLIST head + %i18n; + profile %URI; #IMPLIED + > + +<!-- The title element is not considered part of the flow of text. + It should be displayed, for example as the page header or + window title. Exactly one title is required per document. + --> +<!ELEMENT title (#PCDATA)> +<!ATTLIST title %i18n;> + +<!-- document base URI --> + +<!ELEMENT base EMPTY> +<!ATTLIST base + href %URI; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!-- generic metainformation --> +<!ELEMENT meta EMPTY> +<!ATTLIST meta + %i18n; + http-equiv CDATA #IMPLIED + name CDATA #IMPLIED + content CDATA #REQUIRED + scheme CDATA #IMPLIED + > + +<!-- + Relationship values can be used in principle: + + a) for document specific toolbars/menus when used + with the link element in document head e.g. + start, contents, previous, next, index, end, help + b) to link to a separate style sheet (rel="stylesheet") + c) to make a link to a script (rel="script") + d) by stylesheets to control how collections of + html nodes are rendered into printed documents + e) to make a link to a printable version of this document + e.g. a PostScript or PDF version (rel="alternate" media="print") +--> + +<!ELEMENT link EMPTY> +<!ATTLIST link + %attrs; + charset %Charset; #IMPLIED + href %URI; #IMPLIED + hreflang %LanguageCode; #IMPLIED + type %ContentType; #IMPLIED + rel %LinkTypes; #IMPLIED + rev %LinkTypes; #IMPLIED + media %MediaDesc; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!-- style info, which may include CDATA sections --> +<!ELEMENT style (#PCDATA)> +<!ATTLIST style + %i18n; + type %ContentType; #REQUIRED + media %MediaDesc; #IMPLIED + title %Text; #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!-- script statements, which may include CDATA sections --> +<!ELEMENT script (#PCDATA)> +<!ATTLIST script + charset %Charset; #IMPLIED + type %ContentType; #REQUIRED + language CDATA #IMPLIED + src %URI; #IMPLIED + defer (defer) #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!-- alternate content container for non script-based rendering --> + +<!ELEMENT noscript %Flow;> +<!ATTLIST noscript + %attrs; + > + +<!--======================= Frames =======================================--> + +<!-- only one noframes element permitted per document --> + +<!ELEMENT frameset (frameset|frame|noframes)*> +<!ATTLIST frameset + %coreattrs; + rows %MultiLengths; #IMPLIED + cols %MultiLengths; #IMPLIED + onload %Script; #IMPLIED + onunload %Script; #IMPLIED + > + +<!-- reserved frame names start with "_" otherwise starts with letter --> + +<!-- tiled window within frameset --> + +<!ELEMENT frame EMPTY> +<!ATTLIST frame + %coreattrs; + longdesc %URI; #IMPLIED + name NMTOKEN #IMPLIED + src %URI; #IMPLIED + frameborder (1|0) "1" + marginwidth %Pixels; #IMPLIED + marginheight %Pixels; #IMPLIED + noresize (noresize) #IMPLIED + scrolling (yes|no|auto) "auto" + > + +<!-- inline subwindow --> + +<!ELEMENT iframe %Flow;> +<!ATTLIST iframe + %coreattrs; + longdesc %URI; #IMPLIED + name NMTOKEN #IMPLIED + src %URI; #IMPLIED + frameborder (1|0) "1" + marginwidth %Pixels; #IMPLIED + marginheight %Pixels; #IMPLIED + scrolling (yes|no|auto) "auto" + align %ImgAlign; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + > + +<!-- alternate content container for non frame-based rendering --> + +<!ELEMENT noframes (body)> +<!ATTLIST noframes + %attrs; + > + +<!--=================== Document Body ====================================--> + +<!ELEMENT body %Flow;> +<!ATTLIST body + %attrs; + onload %Script; #IMPLIED + onunload %Script; #IMPLIED + background %URI; #IMPLIED + bgcolor %Color; #IMPLIED + text %Color; #IMPLIED + link %Color; #IMPLIED + vlink %Color; #IMPLIED + alink %Color; #IMPLIED + > + +<!ELEMENT div %Flow;> <!-- generic language/style container --> +<!ATTLIST div + %attrs; + %TextAlign; + > + +<!--=================== Paragraphs =======================================--> + +<!ELEMENT p %Inline;> +<!ATTLIST p + %attrs; + %TextAlign; + > + +<!--=================== Headings =========================================--> + +<!-- + There are six levels of headings from h1 (the most important) + to h6 (the least important). +--> + +<!ELEMENT h1 %Inline;> +<!ATTLIST h1 + %attrs; + %TextAlign; + > + +<!ELEMENT h2 %Inline;> +<!ATTLIST h2 + %attrs; + %TextAlign; + > + +<!ELEMENT h3 %Inline;> +<!ATTLIST h3 + %attrs; + %TextAlign; + > + +<!ELEMENT h4 %Inline;> +<!ATTLIST h4 + %attrs; + %TextAlign; + > + +<!ELEMENT h5 %Inline;> +<!ATTLIST h5 + %attrs; + %TextAlign; + > + +<!ELEMENT h6 %Inline;> +<!ATTLIST h6 + %attrs; + %TextAlign; + > + +<!--=================== Lists ============================================--> + +<!-- Unordered list bullet styles --> + +<!ENTITY % ULStyle "(disc|square|circle)"> + +<!-- Unordered list --> + +<!ELEMENT ul (li)+> +<!ATTLIST ul + %attrs; + type %ULStyle; #IMPLIED + compact (compact) #IMPLIED + > + +<!-- Ordered list numbering style + + 1 arabic numbers 1, 2, 3, ... + a lower alpha a, b, c, ... + A upper alpha A, B, C, ... + i lower roman i, ii, iii, ... + I upper roman I, II, III, ... + + The style is applied to the sequence number which by default + is reset to 1 for the first list item in an ordered list. +--> +<!ENTITY % OLStyle "CDATA"> + +<!-- Ordered (numbered) list --> + +<!ELEMENT ol (li)+> +<!ATTLIST ol + %attrs; + type %OLStyle; #IMPLIED + compact (compact) #IMPLIED + start %Number; #IMPLIED + > + +<!-- single column list (DEPRECATED) --> +<!ELEMENT menu (li)+> +<!ATTLIST menu + %attrs; + compact (compact) #IMPLIED + > + +<!-- multiple column list (DEPRECATED) --> +<!ELEMENT dir (li)+> +<!ATTLIST dir + %attrs; + compact (compact) #IMPLIED + > + +<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" --> +<!ENTITY % LIStyle "CDATA"> + +<!-- list item --> + +<!ELEMENT li %Flow;> +<!ATTLIST li + %attrs; + type %LIStyle; #IMPLIED + value %Number; #IMPLIED + > + +<!-- definition lists - dt for term, dd for its definition --> + +<!ELEMENT dl (dt|dd)+> +<!ATTLIST dl + %attrs; + compact (compact) #IMPLIED + > + +<!ELEMENT dt %Inline;> +<!ATTLIST dt + %attrs; + > + +<!ELEMENT dd %Flow;> +<!ATTLIST dd + %attrs; + > + +<!--=================== Address ==========================================--> + +<!-- information on author --> + +<!ELEMENT address %Inline;> +<!ATTLIST address + %attrs; + > + +<!--=================== Horizontal Rule ==================================--> + +<!ELEMENT hr EMPTY> +<!ATTLIST hr + %attrs; + align (left|center|right) #IMPLIED + noshade (noshade) #IMPLIED + size %Pixels; #IMPLIED + width %Length; #IMPLIED + > + +<!--=================== Preformatted Text ================================--> + +<!-- content is %Inline; excluding + "img|object|applet|big|small|sub|sup|font|basefont" --> + +<!ELEMENT pre %pre.content;> +<!ATTLIST pre + %attrs; + width %Number; #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!--=================== Block-like Quotes ================================--> + +<!ELEMENT blockquote %Flow;> +<!ATTLIST blockquote + %attrs; + cite %URI; #IMPLIED + > + +<!--=================== Text alignment ===================================--> + +<!-- center content --> +<!ELEMENT center %Flow;> +<!ATTLIST center + %attrs; + > + +<!--=================== Inserted/Deleted Text ============================--> + + +<!-- + ins/del are allowed in block and inline content, but its + inappropriate to include block content within an ins element + occurring in inline content. +--> +<!ELEMENT ins %Flow;> +<!ATTLIST ins + %attrs; + cite %URI; #IMPLIED + datetime %Datetime; #IMPLIED + > + +<!ELEMENT del %Flow;> +<!ATTLIST del + %attrs; + cite %URI; #IMPLIED + datetime %Datetime; #IMPLIED + > + +<!--================== The Anchor Element ================================--> + +<!-- content is %Inline; except that anchors shouldn't be nested --> + +<!ELEMENT a %a.content;> +<!ATTLIST a + %attrs; + charset %Charset; #IMPLIED + type %ContentType; #IMPLIED + name NMTOKEN #IMPLIED + href %URI; #IMPLIED + hreflang %LanguageCode; #IMPLIED + rel %LinkTypes; #IMPLIED + rev %LinkTypes; #IMPLIED + accesskey %Character; #IMPLIED + shape %Shape; "rect" + coords %Coords; #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!--===================== Inline Elements ================================--> + +<!ELEMENT span %Inline;> <!-- generic language/style container --> +<!ATTLIST span + %attrs; + > + +<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride --> +<!ATTLIST bdo + %coreattrs; + %events; + lang %LanguageCode; #IMPLIED + xml:lang %LanguageCode; #IMPLIED + dir (ltr|rtl) #REQUIRED + > + +<!ELEMENT br EMPTY> <!-- forced line break --> +<!ATTLIST br + %coreattrs; + clear (left|all|right|none) "none" + > + +<!ELEMENT em %Inline;> <!-- emphasis --> +<!ATTLIST em %attrs;> + +<!ELEMENT strong %Inline;> <!-- strong emphasis --> +<!ATTLIST strong %attrs;> + +<!ELEMENT dfn %Inline;> <!-- definitional --> +<!ATTLIST dfn %attrs;> + +<!ELEMENT code %Inline;> <!-- program code --> +<!ATTLIST code %attrs;> + +<!ELEMENT samp %Inline;> <!-- sample --> +<!ATTLIST samp %attrs;> + +<!ELEMENT kbd %Inline;> <!-- something user would type --> +<!ATTLIST kbd %attrs;> + +<!ELEMENT var %Inline;> <!-- variable --> +<!ATTLIST var %attrs;> + +<!ELEMENT cite %Inline;> <!-- citation --> +<!ATTLIST cite %attrs;> + +<!ELEMENT abbr %Inline;> <!-- abbreviation --> +<!ATTLIST abbr %attrs;> + +<!ELEMENT acronym %Inline;> <!-- acronym --> +<!ATTLIST acronym %attrs;> + +<!ELEMENT q %Inline;> <!-- inlined quote --> +<!ATTLIST q + %attrs; + cite %URI; #IMPLIED + > + +<!ELEMENT sub %Inline;> <!-- subscript --> +<!ATTLIST sub %attrs;> + +<!ELEMENT sup %Inline;> <!-- superscript --> +<!ATTLIST sup %attrs;> + +<!ELEMENT tt %Inline;> <!-- fixed pitch font --> +<!ATTLIST tt %attrs;> + +<!ELEMENT i %Inline;> <!-- italic font --> +<!ATTLIST i %attrs;> + +<!ELEMENT b %Inline;> <!-- bold font --> +<!ATTLIST b %attrs;> + +<!ELEMENT big %Inline;> <!-- bigger font --> +<!ATTLIST big %attrs;> + +<!ELEMENT small %Inline;> <!-- smaller font --> +<!ATTLIST small %attrs;> + +<!ELEMENT u %Inline;> <!-- underline --> +<!ATTLIST u %attrs;> + +<!ELEMENT s %Inline;> <!-- strike-through --> +<!ATTLIST s %attrs;> + +<!ELEMENT strike %Inline;> <!-- strike-through --> +<!ATTLIST strike %attrs;> + +<!ELEMENT basefont EMPTY> <!-- base font size --> +<!ATTLIST basefont + id ID #IMPLIED + size CDATA #REQUIRED + color %Color; #IMPLIED + face CDATA #IMPLIED + > + +<!ELEMENT font %Inline;> <!-- local change to font --> +<!ATTLIST font + %coreattrs; + %i18n; + size CDATA #IMPLIED + color %Color; #IMPLIED + face CDATA #IMPLIED + > + +<!--==================== Object ======================================--> +<!-- + object is used to embed objects as part of HTML pages. + param elements should precede other content. Parameters + can also be expressed as attribute/value pairs on the + object element itself when brevity is desired. +--> + +<!ELEMENT object (#PCDATA | param | %block; | form |%inline; | %misc;)*> +<!ATTLIST object + %attrs; + declare (declare) #IMPLIED + classid %URI; #IMPLIED + codebase %URI; #IMPLIED + data %URI; #IMPLIED + type %ContentType; #IMPLIED + codetype %ContentType; #IMPLIED + archive %UriList; #IMPLIED + standby %Text; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + usemap %URI; #IMPLIED + name NMTOKEN #IMPLIED + tabindex %Number; #IMPLIED + align %ImgAlign; #IMPLIED + border %Pixels; #IMPLIED + hspace %Pixels; #IMPLIED + vspace %Pixels; #IMPLIED + > + +<!-- + param is used to supply a named property value. + In XML it would seem natural to follow RDF and support an + abbreviated syntax where the param elements are replaced + by attribute value pairs on the object start tag. +--> +<!ELEMENT param EMPTY> +<!ATTLIST param + id ID #IMPLIED + name CDATA #REQUIRED + value CDATA #IMPLIED + valuetype (data|ref|object) "data" + type %ContentType; #IMPLIED + > + +<!--=================== Java applet ==================================--> +<!-- + One of code or object attributes must be present. + Place param elements before other content. +--> +<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*> +<!ATTLIST applet + %coreattrs; + codebase %URI; #IMPLIED + archive CDATA #IMPLIED + code CDATA #IMPLIED + object CDATA #IMPLIED + alt %Text; #IMPLIED + name NMTOKEN #IMPLIED + width %Length; #REQUIRED + height %Length; #REQUIRED + align %ImgAlign; #IMPLIED + hspace %Pixels; #IMPLIED + vspace %Pixels; #IMPLIED + > + +<!--=================== Images ===========================================--> + +<!-- + To avoid accessibility problems for people who aren't + able to see the image, you should provide a text + description using the alt and longdesc attributes. + In addition, avoid the use of server-side image maps. +--> + +<!ELEMENT img EMPTY> +<!ATTLIST img + %attrs; + src %URI; #REQUIRED + alt %Text; #REQUIRED + name NMTOKEN #IMPLIED + longdesc %URI; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + usemap %URI; #IMPLIED + ismap (ismap) #IMPLIED + align %ImgAlign; #IMPLIED + border %Pixels; #IMPLIED + hspace %Pixels; #IMPLIED + vspace %Pixels; #IMPLIED + > + +<!-- usemap points to a map element which may be in this document + or an external document, although the latter is not widely supported --> + +<!--================== Client-side image maps ============================--> + +<!-- These can be placed in the same document or grouped in a + separate document although this isn't yet widely supported --> + +<!ELEMENT map ((%block; | form | %misc;)+ | area+)> +<!ATTLIST map + %i18n; + %events; + id ID #REQUIRED + class CDATA #IMPLIED + style %StyleSheet; #IMPLIED + title %Text; #IMPLIED + name NMTOKEN #IMPLIED + > + +<!ELEMENT area EMPTY> +<!ATTLIST area + %attrs; + shape %Shape; "rect" + coords %Coords; #IMPLIED + href %URI; #IMPLIED + nohref (nohref) #IMPLIED + alt %Text; #REQUIRED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!--================ Forms ===============================================--> + +<!ELEMENT form %form.content;> <!-- forms shouldn't be nested --> + +<!ATTLIST form + %attrs; + action %URI; #REQUIRED + method (get|post) "get" + name NMTOKEN #IMPLIED + enctype %ContentType; "application/x-www-form-urlencoded" + onsubmit %Script; #IMPLIED + onreset %Script; #IMPLIED + accept %ContentTypes; #IMPLIED + accept-charset %Charsets; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!-- + Each label must not contain more than ONE field + Label elements shouldn't be nested. +--> +<!ELEMENT label %Inline;> +<!ATTLIST label + %attrs; + for IDREF #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!ENTITY % InputType + "(text | password | checkbox | + radio | submit | reset | + file | hidden | image | button)" + > + +<!-- the name attribute is required for all but submit & reset --> + +<!ELEMENT input EMPTY> <!-- form control --> +<!ATTLIST input + %attrs; + type %InputType; "text" + name CDATA #IMPLIED + value CDATA #IMPLIED + checked (checked) #IMPLIED + disabled (disabled) #IMPLIED + readonly (readonly) #IMPLIED + size CDATA #IMPLIED + maxlength %Number; #IMPLIED + src %URI; #IMPLIED + alt CDATA #IMPLIED + usemap %URI; #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onselect %Script; #IMPLIED + onchange %Script; #IMPLIED + accept %ContentTypes; #IMPLIED + align %ImgAlign; #IMPLIED + > + +<!ELEMENT select (optgroup|option)+> <!-- option selector --> +<!ATTLIST select + %attrs; + name CDATA #IMPLIED + size %Number; #IMPLIED + multiple (multiple) #IMPLIED + disabled (disabled) #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onchange %Script; #IMPLIED + > + +<!ELEMENT optgroup (option)+> <!-- option group --> +<!ATTLIST optgroup + %attrs; + disabled (disabled) #IMPLIED + label %Text; #REQUIRED + > + +<!ELEMENT option (#PCDATA)> <!-- selectable choice --> +<!ATTLIST option + %attrs; + selected (selected) #IMPLIED + disabled (disabled) #IMPLIED + label %Text; #IMPLIED + value CDATA #IMPLIED + > + +<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field --> +<!ATTLIST textarea + %attrs; + name CDATA #IMPLIED + rows %Number; #REQUIRED + cols %Number; #REQUIRED + disabled (disabled) #IMPLIED + readonly (readonly) #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onselect %Script; #IMPLIED + onchange %Script; #IMPLIED + > + +<!-- + The fieldset element is used to group form fields. + Only one legend element should occur in the content + and if present should only be preceded by whitespace. +--> +<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*> +<!ATTLIST fieldset + %attrs; + > + +<!ENTITY % LAlign "(top|bottom|left|right)"> + +<!ELEMENT legend %Inline;> <!-- fieldset label --> +<!ATTLIST legend + %attrs; + accesskey %Character; #IMPLIED + align %LAlign; #IMPLIED + > + +<!-- + Content is %Flow; excluding a, form, form controls, iframe +--> +<!ELEMENT button %button.content;> <!-- push button --> +<!ATTLIST button + %attrs; + name CDATA #IMPLIED + value CDATA #IMPLIED + type (button|submit|reset) "submit" + disabled (disabled) #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!-- single-line text input control (DEPRECATED) --> +<!ELEMENT isindex EMPTY> +<!ATTLIST isindex + %coreattrs; + %i18n; + prompt %Text; #IMPLIED + > + +<!--======================= Tables =======================================--> + +<!-- Derived from IETF HTML table standard, see [RFC1942] --> + +<!-- + The border attribute sets the thickness of the frame around the + table. The default units are screen pixels. + + The frame attribute specifies which parts of the frame around + the table should be rendered. The values are not the same as + CALS to avoid a name clash with the valign attribute. +--> +<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)"> + +<!-- + The rules attribute defines which rules to draw between cells: + + If rules is absent then assume: + "none" if border is absent or border="0" otherwise "all" +--> + +<!ENTITY % TRules "(none | groups | rows | cols | all)"> + +<!-- horizontal placement of table relative to document --> +<!ENTITY % TAlign "(left|center|right)"> + +<!-- horizontal alignment attributes for cell contents + + char alignment char, e.g. char=":" + charoff offset for alignment char +--> +<!ENTITY % cellhalign + "align (left|center|right|justify|char) #IMPLIED + char %Character; #IMPLIED + charoff %Length; #IMPLIED" + > + +<!-- vertical alignment attributes for cell contents --> +<!ENTITY % cellvalign + "valign (top|middle|bottom|baseline) #IMPLIED" + > + +<!ELEMENT table + (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))> +<!ELEMENT caption %Inline;> +<!ELEMENT thead (tr)+> +<!ELEMENT tfoot (tr)+> +<!ELEMENT tbody (tr)+> +<!ELEMENT colgroup (col)*> +<!ELEMENT col EMPTY> +<!ELEMENT tr (th|td)+> +<!ELEMENT th %Flow;> +<!ELEMENT td %Flow;> + +<!ATTLIST table + %attrs; + summary %Text; #IMPLIED + width %Length; #IMPLIED + border %Pixels; #IMPLIED + frame %TFrame; #IMPLIED + rules %TRules; #IMPLIED + cellspacing %Length; #IMPLIED + cellpadding %Length; #IMPLIED + align %TAlign; #IMPLIED + bgcolor %Color; #IMPLIED + > + +<!ENTITY % CAlign "(top|bottom|left|right)"> + +<!ATTLIST caption + %attrs; + align %CAlign; #IMPLIED + > + +<!-- +colgroup groups a set of col elements. It allows you to group +several semantically related columns together. +--> +<!ATTLIST colgroup + %attrs; + span %Number; "1" + width %MultiLength; #IMPLIED + %cellhalign; + %cellvalign; + > + +<!-- + col elements define the alignment properties for cells in + one or more columns. + + The width attribute specifies the width of the columns, e.g. + + width=64 width in screen pixels + width=0.5* relative width of 0.5 + + The span attribute causes the attributes of one + col element to apply to more than one column. +--> +<!ATTLIST col + %attrs; + span %Number; "1" + width %MultiLength; #IMPLIED + %cellhalign; + %cellvalign; + > + +<!-- + Use thead to duplicate headers when breaking table + across page boundaries, or for static headers when + tbody sections are rendered in scrolling panel. + + Use tfoot to duplicate footers when breaking table + across page boundaries, or for static footers when + tbody sections are rendered in scrolling panel. + + Use multiple tbody sections when rules are needed + between groups of table rows. +--> +<!ATTLIST thead + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tfoot + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tbody + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tr + %attrs; + %cellhalign; + %cellvalign; + bgcolor %Color; #IMPLIED + > + +<!-- Scope is simpler than headers attribute for common tables --> +<!ENTITY % Scope "(row|col|rowgroup|colgroup)"> + +<!-- th is for headers, td for data and for cells acting as both --> + +<!ATTLIST th + %attrs; + abbr %Text; #IMPLIED + axis CDATA #IMPLIED + headers IDREFS #IMPLIED + scope %Scope; #IMPLIED + rowspan %Number; "1" + colspan %Number; "1" + %cellhalign; + %cellvalign; + nowrap (nowrap) #IMPLIED + bgcolor %Color; #IMPLIED + width %Pixels; #IMPLIED + height %Pixels; #IMPLIED + > + +<!ATTLIST td + %attrs; + abbr %Text; #IMPLIED + axis CDATA #IMPLIED + headers IDREFS #IMPLIED + scope %Scope; #IMPLIED + rowspan %Number; "1" + colspan %Number; "1" + %cellhalign; + %cellvalign; + nowrap (nowrap) #IMPLIED + bgcolor %Color; #IMPLIED + width %Pixels; #IMPLIED + height %Pixels; #IMPLIED + > + diff --git a/test/valid/dtds/xhtml1-strict.dtd b/test/valid/dtds/xhtml1-strict.dtd new file mode 100644 index 0000000..d7c3da2 --- /dev/null +++ b/test/valid/dtds/xhtml1-strict.dtd @@ -0,0 +1,986 @@ +<!-- + Extensible HTML version 1.0 Strict DTD + + This is the same as HTML 4.0 Strict except for + changes due to the differences between XML and SGML. + + Namespace = http://www.w3.org/1999/xhtml + + For further information, see: http://www.w3.org/TR/xhtml1 + + Copyright (c) 1998-1999 W3C (MIT, INRIA, Keio), + All Rights Reserved. + + This DTD module is identified by the PUBLIC and SYSTEM identifiers: + + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" + + +--> + +<!--================ Character mnemonic entities =========================--> + +<!ENTITY % HTMLlat1 PUBLIC + "-//W3C//ENTITIES Latin 1 for XHTML//EN" + "xhtml-lat1.ent"> +%HTMLlat1; + +<!ENTITY % HTMLsymbol PUBLIC + "-//W3C//ENTITIES Symbols for XHTML//EN" + "xhtml-symbol.ent"> +%HTMLsymbol; + +<!ENTITY % HTMLspecial PUBLIC + "-//W3C//ENTITIES Special for XHTML//EN" + "xhtml-special.ent"> +%HTMLspecial; + +<!--================== Imported Names ====================================--> + +<!ENTITY % ContentType "CDATA"> + <!-- media type, as per [RFC2045] --> + +<!ENTITY % ContentTypes "CDATA"> + <!-- comma-separated list of media types, as per [RFC2045] --> + +<!ENTITY % Charset "CDATA"> + <!-- a character encoding, as per [RFC2045] --> + +<!ENTITY % Charsets "CDATA"> + <!-- a space separated list of character encodings, as per [RFC2045] --> + +<!ENTITY % LanguageCode "NMTOKEN"> + <!-- a language code, as per [RFC1766] --> + +<!ENTITY % Character "CDATA"> + <!-- a single character from [ISO10646] --> + +<!ENTITY % Number "CDATA"> + <!-- one or more digits --> + +<!ENTITY % LinkTypes "CDATA"> + <!-- space-separated list of link types --> + +<!ENTITY % MediaDesc "CDATA"> + <!-- single or comma-separated list of media descriptors --> + +<!ENTITY % URI "CDATA"> + <!-- a Uniform Resource Identifier, see [RFC2396] --> + +<!ENTITY % UriList "CDATA"> + <!-- a space separated list of Uniform Resource Identifiers --> + +<!ENTITY % Datetime "CDATA"> + <!-- date and time information. ISO date format --> + +<!ENTITY % Script "CDATA"> + <!-- script expression --> + +<!ENTITY % StyleSheet "CDATA"> + <!-- style sheet data --> + +<!ENTITY % Text "CDATA"> + <!-- used for titles etc. --> + +<!ENTITY % FrameTarget "NMTOKEN"> + <!-- render in this frame --> + +<!ENTITY % Length "CDATA"> + <!-- nn for pixels or nn% for percentage length --> + +<!ENTITY % MultiLength "CDATA"> + <!-- pixel, percentage, or relative --> + +<!ENTITY % MultiLengths "CDATA"> + <!-- comma-separated list of MultiLength --> + +<!ENTITY % Pixels "CDATA"> + <!-- integer representing length in pixels --> + +<!-- these are used for image maps --> + +<!ENTITY % Shape "(rect|circle|poly|default)"> + +<!ENTITY % Coords "CDATA"> + <!-- comma separated list of lengths --> + +<!--=================== Generic Attributes ===============================--> + +<!-- core attributes common to most elements + id document-wide unique id + class space separated list of classes + style associated style info + title advisory title/amplification +--> +<!ENTITY % coreattrs + "id ID #IMPLIED + class CDATA #IMPLIED + style %StyleSheet; #IMPLIED + title %Text; #IMPLIED" + > + +<!-- internationalization attributes + lang language code (backwards compatible) + xml:lang language code (as per XML 1.0 spec) + dir direction for weak/neutral text +--> +<!ENTITY % i18n + "lang %LanguageCode; #IMPLIED + xml:lang %LanguageCode; #IMPLIED + dir (ltr|rtl) #IMPLIED" + > + +<!-- attributes for common UI events + onclick a pointer button was clicked + ondblclick a pointer button was double clicked + onmousedown a pointer button was pressed down + onmouseup a pointer button was released + onmousemove a pointer was moved onto the element + onmouseout a pointer was moved away from the element + onkeypress a key was pressed and released + onkeydown a key was pressed down + onkeyup a key was released +--> +<!ENTITY % events + "onclick %Script; #IMPLIED + ondblclick %Script; #IMPLIED + onmousedown %Script; #IMPLIED + onmouseup %Script; #IMPLIED + onmouseover %Script; #IMPLIED + onmousemove %Script; #IMPLIED + onmouseout %Script; #IMPLIED + onkeypress %Script; #IMPLIED + onkeydown %Script; #IMPLIED + onkeyup %Script; #IMPLIED" + > + +<!-- attributes for elements that can get the focus + accesskey accessibility key character + tabindex position in tabbing order + onfocus the element got the focus + onblur the element lost the focus +--> +<!ENTITY % focus + "accesskey %Character; #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED" + > + +<!ENTITY % attrs "%coreattrs; %i18n; %events;"> + +<!--=================== Text Elements ====================================--> + +<!ENTITY % special + "br | span | bdo | object | img | map"> + +<!ENTITY % fontstyle "tt | i | b | big | small"> + +<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup | + samp | kbd | var | cite | abbr | acronym"> + +<!ENTITY % inline.forms "input | select | textarea | label | button"> + +<!-- these can occur at block or inline level --> +<!ENTITY % misc "ins | del | script | noscript"> + +<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;"> + +<!-- %Inline; covers inline or "text-level" elements --> +<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*"> + +<!--================== Block level elements ==============================--> + +<!ENTITY % heading "h1|h2|h3|h4|h5|h6"> +<!ENTITY % lists "ul | ol | dl"> +<!ENTITY % blocktext "pre | hr | blockquote | address"> + +<!ENTITY % block + "p | %heading; | div | %lists; | %blocktext; | fieldset | table"> + +<!ENTITY % Block "(%block; | form | %misc;)*"> + +<!-- %Flow; mixes Block and Inline and is used for list items etc. --> +<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*"> + +<!--================== Content models for exclusions =====================--> + +<!-- a elements use %Inline; excluding a --> + +<!ENTITY % a.content + "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*"> + +<!-- pre uses %Inline excluding img, object, big, small, sup or sup --> + +<!ENTITY % pre.content + "(#PCDATA | a | br | span | bdo | map | tt | i | b | + %phrase; | %inline.forms;)*"> + +<!-- form uses %Block; excluding form --> + +<!ENTITY % form.content "(%block; | %misc;)*"> + +<!-- button uses %Flow; but excludes a, form and form controls --> + +<!ENTITY % button.content + "(#PCDATA | p | %heading; | div | %lists; | %blocktext; | + table | %special; | %fontstyle; | %phrase; | %misc;)*"> + +<!--================ Document Structure ==================================--> + +<!-- the namespace URI designates the document profile --> + +<!ELEMENT html (head, body)> +<!ATTLIST html + %i18n; + xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml' + > + +<!--================ Document Head =======================================--> + +<!ENTITY % head.misc "(script|style|meta|link|object)*"> + +<!-- content model is %head.misc; combined with a single + title and an optional base element in any order --> + +<!ELEMENT head (%head.misc;, + ((title, %head.misc;, (base, %head.misc;)?) | + (base, %head.misc;, (title, %head.misc;))))> + +<!ATTLIST head + %i18n; + profile %URI; #IMPLIED + > + +<!-- The title element is not considered part of the flow of text. + It should be displayed, for example as the page header or + window title. Exactly one title is required per document. + --> +<!ELEMENT title (#PCDATA)> +<!ATTLIST title %i18n;> + +<!-- document base URI --> + +<!ELEMENT base EMPTY> +<!ATTLIST base + href %URI; #IMPLIED + > + +<!-- generic metainformation --> +<!ELEMENT meta EMPTY> +<!ATTLIST meta + %i18n; + http-equiv CDATA #IMPLIED + name CDATA #IMPLIED + content CDATA #REQUIRED + scheme CDATA #IMPLIED + > + +<!-- + Relationship values can be used in principle: + + a) for document specific toolbars/menus when used + with the link element in document head e.g. + start, contents, previous, next, index, end, help + b) to link to a separate style sheet (rel="stylesheet") + c) to make a link to a script (rel="script") + d) by stylesheets to control how collections of + html nodes are rendered into printed documents + e) to make a link to a printable version of this document + e.g. a PostScript or PDF version (rel="alternate" media="print") +--> + +<!ELEMENT link EMPTY> +<!ATTLIST link + %attrs; + charset %Charset; #IMPLIED + href %URI; #IMPLIED + hreflang %LanguageCode; #IMPLIED + type %ContentType; #IMPLIED + rel %LinkTypes; #IMPLIED + rev %LinkTypes; #IMPLIED + media %MediaDesc; #IMPLIED + > + +<!-- style info, which may include CDATA sections --> +<!ELEMENT style (#PCDATA)> +<!ATTLIST style + %i18n; + type %ContentType; #REQUIRED + media %MediaDesc; #IMPLIED + title %Text; #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!-- script statements, which may include CDATA sections --> +<!ELEMENT script (#PCDATA)> +<!ATTLIST script + charset %Charset; #IMPLIED + type %ContentType; #REQUIRED + src %URI; #IMPLIED + defer (defer) #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!-- alternate content container for non script-based rendering --> + +<!ELEMENT noscript %Block;> +<!ATTLIST noscript + %attrs; + > + +<!--=================== Document Body ====================================--> + +<!ELEMENT body %Block;> +<!ATTLIST body + %attrs; + onload %Script; #IMPLIED + onunload %Script; #IMPLIED + > + +<!ELEMENT div %Flow;> <!-- generic language/style container --> +<!ATTLIST div + %attrs; + > + +<!--=================== Paragraphs =======================================--> + +<!ELEMENT p %Inline;> +<!ATTLIST p + %attrs; + > + +<!--=================== Headings =========================================--> + +<!-- + There are six levels of headings from h1 (the most important) + to h6 (the least important). +--> + +<!ELEMENT h1 %Inline;> +<!ATTLIST h1 + %attrs; + > + +<!ELEMENT h2 %Inline;> +<!ATTLIST h2 + %attrs; + > + +<!ELEMENT h3 %Inline;> +<!ATTLIST h3 + %attrs; + > + +<!ELEMENT h4 %Inline;> +<!ATTLIST h4 + %attrs; + > + +<!ELEMENT h5 %Inline;> +<!ATTLIST h5 + %attrs; + > + +<!ELEMENT h6 %Inline;> +<!ATTLIST h6 + %attrs; + > + +<!--=================== Lists ============================================--> + +<!-- Unordered list --> + +<!ELEMENT ul (li)+> +<!ATTLIST ul + %attrs; + > + +<!-- Ordered (numbered) list --> + +<!ELEMENT ol (li)+> +<!ATTLIST ol + %attrs; + > + +<!-- list item --> + +<!ELEMENT li %Flow;> +<!ATTLIST li + %attrs; + > + +<!-- definition lists - dt for term, dd for its definition --> + +<!ELEMENT dl (dt|dd)+> +<!ATTLIST dl + %attrs; + > + +<!ELEMENT dt %Inline;> +<!ATTLIST dt + %attrs; + > + +<!ELEMENT dd %Flow;> +<!ATTLIST dd + %attrs; + > + +<!--=================== Address ==========================================--> + +<!-- information on author --> + +<!ELEMENT address %Inline;> +<!ATTLIST address + %attrs; + > + +<!--=================== Horizontal Rule ==================================--> + +<!ELEMENT hr EMPTY> +<!ATTLIST hr + %attrs; + > + +<!--=================== Preformatted Text ================================--> + +<!-- content is %Inline; excluding "img|object|big|small|sub|sup" --> + +<!ELEMENT pre %pre.content;> +<!ATTLIST pre + %attrs; + xml:space (preserve) #FIXED 'preserve' + > + +<!--=================== Block-like Quotes ================================--> + +<!ELEMENT blockquote %Block;> +<!ATTLIST blockquote + %attrs; + cite %URI; #IMPLIED + > + +<!--=================== Inserted/Deleted Text ============================--> + +<!-- + ins/del are allowed in block and inline content, but its + inappropriate to include block content within an ins element + occurring in inline content. +--> +<!ELEMENT ins %Flow;> +<!ATTLIST ins + %attrs; + cite %URI; #IMPLIED + datetime %Datetime; #IMPLIED + > + +<!ELEMENT del %Flow;> +<!ATTLIST del + %attrs; + cite %URI; #IMPLIED + datetime %Datetime; #IMPLIED + > + +<!--================== The Anchor Element ================================--> + +<!-- content is %Inline; except that anchors shouldn't be nested --> + +<!ELEMENT a %a.content;> +<!ATTLIST a + %attrs; + charset %Charset; #IMPLIED + type %ContentType; #IMPLIED + name NMTOKEN #IMPLIED + href %URI; #IMPLIED + hreflang %LanguageCode; #IMPLIED + rel %LinkTypes; #IMPLIED + rev %LinkTypes; #IMPLIED + accesskey %Character; #IMPLIED + shape %Shape; "rect" + coords %Coords; #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!--===================== Inline Elements ================================--> + +<!ELEMENT span %Inline;> <!-- generic language/style container --> +<!ATTLIST span + %attrs; + > + +<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride --> +<!ATTLIST bdo + %coreattrs; + %events; + lang %LanguageCode; #IMPLIED + xml:lang %LanguageCode; #IMPLIED + dir (ltr|rtl) #REQUIRED + > + +<!ELEMENT br EMPTY> <!-- forced line break --> +<!ATTLIST br + %coreattrs; + > + +<!ELEMENT em %Inline;> <!-- emphasis --> +<!ATTLIST em %attrs;> + +<!ELEMENT strong %Inline;> <!-- strong emphasis --> +<!ATTLIST strong %attrs;> + +<!ELEMENT dfn %Inline;> <!-- definitional --> +<!ATTLIST dfn %attrs;> + +<!ELEMENT code %Inline;> <!-- program code --> +<!ATTLIST code %attrs;> + +<!ELEMENT samp %Inline;> <!-- sample --> +<!ATTLIST samp %attrs;> + +<!ELEMENT kbd %Inline;> <!-- something user would type --> +<!ATTLIST kbd %attrs;> + +<!ELEMENT var %Inline;> <!-- variable --> +<!ATTLIST var %attrs;> + +<!ELEMENT cite %Inline;> <!-- citation --> +<!ATTLIST cite %attrs;> + +<!ELEMENT abbr %Inline;> <!-- abbreviation --> +<!ATTLIST abbr %attrs;> + +<!ELEMENT acronym %Inline;> <!-- acronym --> +<!ATTLIST acronym %attrs;> + +<!ELEMENT q %Inline;> <!-- inlined quote --> +<!ATTLIST q + %attrs; + cite %URI; #IMPLIED + > + +<!ELEMENT sub %Inline;> <!-- subscript --> +<!ATTLIST sub %attrs;> + +<!ELEMENT sup %Inline;> <!-- superscript --> +<!ATTLIST sup %attrs;> + +<!ELEMENT tt %Inline;> <!-- fixed pitch font --> +<!ATTLIST tt %attrs;> + +<!ELEMENT i %Inline;> <!-- italic font --> +<!ATTLIST i %attrs;> + +<!ELEMENT b %Inline;> <!-- bold font --> +<!ATTLIST b %attrs;> + +<!ELEMENT big %Inline;> <!-- bigger font --> +<!ATTLIST big %attrs;> + +<!ELEMENT small %Inline;> <!-- smaller font --> +<!ATTLIST small %attrs;> + +<!--==================== Object ======================================--> +<!-- + object is used to embed objects as part of HTML pages. + param elements should precede other content. Parameters + can also be expressed as attribute/value pairs on the + object element itself when brevity is desired. +--> + +<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*> +<!ATTLIST object + %attrs; + declare (declare) #IMPLIED + classid %URI; #IMPLIED + codebase %URI; #IMPLIED + data %URI; #IMPLIED + type %ContentType; #IMPLIED + codetype %ContentType; #IMPLIED + archive %UriList; #IMPLIED + standby %Text; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + usemap %URI; #IMPLIED + name NMTOKEN #IMPLIED + tabindex %Number; #IMPLIED + > + +<!-- + param is used to supply a named property value. + In XML it would seem natural to follow RDF and support an + abbreviated syntax where the param elements are replaced + by attribute value pairs on the object start tag. +--> +<!ELEMENT param EMPTY> +<!ATTLIST param + id ID #IMPLIED + name CDATA #IMPLIED + value CDATA #IMPLIED + valuetype (data|ref|object) "data" + type %ContentType; #IMPLIED + > + +<!--=================== Images ===========================================--> + +<!-- + To avoid accessibility problems for people who aren't + able to see the image, you should provide a text + description using the alt and longdesc attributes. + In addition, avoid the use of server-side image maps. + Note that in this DTD there is no name attribute. That + is only available in the transitional and frameset DTD. +--> + +<!ELEMENT img EMPTY> +<!ATTLIST img + %attrs; + src %URI; #REQUIRED + alt %Text; #REQUIRED + longdesc %URI; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + usemap %URI; #IMPLIED + ismap (ismap) #IMPLIED + > + +<!-- usemap points to a map element which may be in this document + or an external document, although the latter is not widely supported --> + +<!--================== Client-side image maps ============================--> + +<!-- These can be placed in the same document or grouped in a + separate document although this isn't yet widely supported --> + +<!ELEMENT map ((%block; | form | %misc;)+ | area+)> +<!ATTLIST map + %i18n; + %events; + id ID #REQUIRED + class CDATA #IMPLIED + style %StyleSheet; #IMPLIED + title %Text; #IMPLIED + name NMTOKEN #IMPLIED + > + +<!ELEMENT area EMPTY> +<!ATTLIST area + %attrs; + shape %Shape; "rect" + coords %Coords; #IMPLIED + href %URI; #IMPLIED + nohref (nohref) #IMPLIED + alt %Text; #REQUIRED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!--================ Forms ===============================================--> +<!ELEMENT form %form.content;> <!-- forms shouldn't be nested --> + +<!ATTLIST form + %attrs; + action %URI; #REQUIRED + method (get|post) "get" + enctype %ContentType; "application/x-www-form-urlencoded" + onsubmit %Script; #IMPLIED + onreset %Script; #IMPLIED + accept %ContentTypes; #IMPLIED + accept-charset %Charsets; #IMPLIED + > + +<!-- + Each label must not contain more than ONE field + Label elements shouldn't be nested. +--> +<!ELEMENT label %Inline;> +<!ATTLIST label + %attrs; + for IDREF #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!ENTITY % InputType + "(text | password | checkbox | + radio | submit | reset | + file | hidden | image | button)" + > + +<!-- the name attribute is required for all but submit & reset --> + +<!ELEMENT input EMPTY> <!-- form control --> +<!ATTLIST input + %attrs; + type %InputType; "text" + name CDATA #IMPLIED + value CDATA #IMPLIED + checked (checked) #IMPLIED + disabled (disabled) #IMPLIED + readonly (readonly) #IMPLIED + size CDATA #IMPLIED + maxlength %Number; #IMPLIED + src %URI; #IMPLIED + alt CDATA #IMPLIED + usemap %URI; #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onselect %Script; #IMPLIED + onchange %Script; #IMPLIED + accept %ContentTypes; #IMPLIED + > + +<!ELEMENT select (optgroup|option)+> <!-- option selector --> +<!ATTLIST select + %attrs; + name CDATA #IMPLIED + size %Number; #IMPLIED + multiple (multiple) #IMPLIED + disabled (disabled) #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onchange %Script; #IMPLIED + > + +<!ELEMENT optgroup (option)+> <!-- option group --> +<!ATTLIST optgroup + %attrs; + disabled (disabled) #IMPLIED + label %Text; #REQUIRED + > + +<!ELEMENT option (#PCDATA)> <!-- selectable choice --> +<!ATTLIST option + %attrs; + selected (selected) #IMPLIED + disabled (disabled) #IMPLIED + label %Text; #IMPLIED + value CDATA #IMPLIED + > + +<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field --> +<!ATTLIST textarea + %attrs; + name CDATA #IMPLIED + rows %Number; #REQUIRED + cols %Number; #REQUIRED + disabled (disabled) #IMPLIED + readonly (readonly) #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onselect %Script; #IMPLIED + onchange %Script; #IMPLIED + > + +<!-- + The fieldset element is used to group form fields. + Only one legend element should occur in the content + and if present should only be preceded by whitespace. +--> +<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*> +<!ATTLIST fieldset + %attrs; + > + +<!ELEMENT legend %Inline;> <!-- fieldset label --> +<!ATTLIST legend + %attrs; + accesskey %Character; #IMPLIED + > + +<!-- + Content is %Flow; excluding a, form and form controls +--> +<!ELEMENT button %button.content;> <!-- push button --> +<!ATTLIST button + %attrs; + name CDATA #IMPLIED + value CDATA #IMPLIED + type (button|submit|reset) "submit" + disabled (disabled) #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!--======================= Tables =======================================--> + +<!-- Derived from IETF HTML table standard, see [RFC1942] --> + +<!-- + The border attribute sets the thickness of the frame around the + table. The default units are screen pixels. + + The frame attribute specifies which parts of the frame around + the table should be rendered. The values are not the same as + CALS to avoid a name clash with the valign attribute. +--> +<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)"> + +<!-- + The rules attribute defines which rules to draw between cells: + + If rules is absent then assume: + "none" if border is absent or border="0" otherwise "all" +--> + +<!ENTITY % TRules "(none | groups | rows | cols | all)"> + +<!-- horizontal placement of table relative to document --> +<!ENTITY % TAlign "(left|center|right)"> + +<!-- horizontal alignment attributes for cell contents + + char alignment char, e.g. char=':' + charoff offset for alignment char +--> +<!ENTITY % cellhalign + "align (left|center|right|justify|char) #IMPLIED + char %Character; #IMPLIED + charoff %Length; #IMPLIED" + > + +<!-- vertical alignment attributes for cell contents --> +<!ENTITY % cellvalign + "valign (top|middle|bottom|baseline) #IMPLIED" + > + +<!ELEMENT table + (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))> +<!ELEMENT caption %Inline;> +<!ELEMENT thead (tr)+> +<!ELEMENT tfoot (tr)+> +<!ELEMENT tbody (tr)+> +<!ELEMENT colgroup (col)*> +<!ELEMENT col EMPTY> +<!ELEMENT tr (th|td)+> +<!ELEMENT th %Flow;> +<!ELEMENT td %Flow;> + +<!ATTLIST table + %attrs; + summary %Text; #IMPLIED + width %Length; #IMPLIED + border %Pixels; #IMPLIED + frame %TFrame; #IMPLIED + rules %TRules; #IMPLIED + cellspacing %Length; #IMPLIED + cellpadding %Length; #IMPLIED + > + +<!ENTITY % CAlign "(top|bottom|left|right)"> + +<!ATTLIST caption + %attrs; + > + +<!-- +colgroup groups a set of col elements. It allows you to group +several semantically related columns together. +--> +<!ATTLIST colgroup + %attrs; + span %Number; "1" + width %MultiLength; #IMPLIED + %cellhalign; + %cellvalign; + > + +<!-- + col elements define the alignment properties for cells in + one or more columns. + + The width attribute specifies the width of the columns, e.g. + + width=64 width in screen pixels + width=0.5* relative width of 0.5 + + The span attribute causes the attributes of one + col element to apply to more than one column. +--> +<!ATTLIST col + %attrs; + span %Number; "1" + width %MultiLength; #IMPLIED + %cellhalign; + %cellvalign; + > + +<!-- + Use thead to duplicate headers when breaking table + across page boundaries, or for static headers when + tbody sections are rendered in scrolling panel. + + Use tfoot to duplicate footers when breaking table + across page boundaries, or for static footers when + tbody sections are rendered in scrolling panel. + + Use multiple tbody sections when rules are needed + between groups of table rows. +--> +<!ATTLIST thead + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tfoot + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tbody + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tr + %attrs; + %cellhalign; + %cellvalign; + > + + +<!-- Scope is simpler than headers attribute for common tables --> +<!ENTITY % Scope "(row|col|rowgroup|colgroup)"> + +<!-- th is for headers, td for data and for cells acting as both --> + +<!ATTLIST th + %attrs; + abbr %Text; #IMPLIED + axis CDATA #IMPLIED + headers IDREFS #IMPLIED + scope %Scope; #IMPLIED + rowspan %Number; "1" + colspan %Number; "1" + %cellhalign; + %cellvalign; + > + +<!ATTLIST td + %attrs; + abbr %Text; #IMPLIED + axis CDATA #IMPLIED + headers IDREFS #IMPLIED + scope %Scope; #IMPLIED + rowspan %Number; "1" + colspan %Number; "1" + %cellhalign; + %cellvalign; + > + diff --git a/test/valid/dtds/xhtml1-transitional.dtd b/test/valid/dtds/xhtml1-transitional.dtd new file mode 100644 index 0000000..def8d66 --- /dev/null +++ b/test/valid/dtds/xhtml1-transitional.dtd @@ -0,0 +1,1194 @@ +<!-- + Extensible HTML version 1.0 Transitional DTD + + This is the same as HTML 4.0 Transitional except for + changes due to the differences between XML and SGML. + + Namespace = http://www.w3.org/1999/xhtml + + For further information, see: http://www.w3.org/TR/xhtml1 + + Copyright (c) 1998-1999 W3C (MIT, INRIA, Keio), + All Rights Reserved. + + This DTD module is identified by the PUBLIC and SYSTEM identifiers: + + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" + + +--> + +<!--================ Character mnemonic entities =========================--> + +<!ENTITY % HTMLlat1 PUBLIC + "-//W3C//ENTITIES Latin 1 for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> +%HTMLlat1; + +<!ENTITY % HTMLsymbol PUBLIC + "-//W3C//ENTITIES Symbols for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"> +%HTMLsymbol; + +<!ENTITY % HTMLspecial PUBLIC + "-//W3C//ENTITIES Special for XHTML//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"> +%HTMLspecial; + +<!--================== Imported Names ====================================--> + +<!ENTITY % ContentType "CDATA"> + <!-- media type, as per [RFC2045] --> + +<!ENTITY % ContentTypes "CDATA"> + <!-- comma-separated list of media types, as per [RFC2045] --> + +<!ENTITY % Charset "CDATA"> + <!-- a character encoding, as per [RFC2045] --> + +<!ENTITY % Charsets "CDATA"> + <!-- a space separated list of character encodings, as per [RFC2045] --> + +<!ENTITY % LanguageCode "NMTOKEN"> + <!-- a language code, as per [RFC1766] --> + +<!ENTITY % Character "CDATA"> + <!-- a single character from [ISO10646] --> + +<!ENTITY % Number "CDATA"> + <!-- one or more digits --> + +<!ENTITY % LinkTypes "CDATA"> + <!-- space-separated list of link types --> + +<!ENTITY % MediaDesc "CDATA"> + <!-- single or comma-separated list of media descriptors --> + +<!ENTITY % URI "CDATA"> + <!-- a Uniform Resource Identifier, see [RFC2396] --> + +<!ENTITY % UriList "CDATA"> + <!-- a space separated list of Uniform Resource Identifiers --> + +<!ENTITY % Datetime "CDATA"> + <!-- date and time information. ISO date format --> + +<!ENTITY % Script "CDATA"> + <!-- script expression --> + +<!ENTITY % StyleSheet "CDATA"> + <!-- style sheet data --> + +<!ENTITY % Text "CDATA"> + <!-- used for titles etc. --> + +<!ENTITY % FrameTarget "NMTOKEN"> + <!-- render in this frame --> + +<!ENTITY % Length "CDATA"> + <!-- nn for pixels or nn% for percentage length --> + +<!ENTITY % MultiLength "CDATA"> + <!-- pixel, percentage, or relative --> + +<!ENTITY % MultiLengths "CDATA"> + <!-- comma-separated list of MultiLength --> + +<!ENTITY % Pixels "CDATA"> + <!-- integer representing length in pixels --> + +<!-- these are used for image maps --> + +<!ENTITY % Shape "(rect|circle|poly|default)"> + +<!ENTITY % Coords "CDATA"> + <!-- comma separated list of lengths --> + +<!-- used for object, applet, img, input and iframe --> +<!ENTITY % ImgAlign "(top|middle|bottom|left|right)"> + +<!-- a color using sRGB: #RRGGBB as Hex values --> +<!ENTITY % Color "CDATA"> + +<!-- There are also 16 widely known color names with their sRGB values: + + Black = #000000 Green = #008000 + Silver = #C0C0C0 Lime = #00FF00 + Gray = #808080 Olive = #808000 + White = #FFFFFF Yellow = #FFFF00 + Maroon = #800000 Navy = #000080 + Red = #FF0000 Blue = #0000FF + Purple = #800080 Teal = #008080 + Fuchsia= #FF00FF Aqua = #00FFFF +--> + +<!--=================== Generic Attributes ===============================--> + +<!-- core attributes common to most elements + id document-wide unique id + class space separated list of classes + style associated style info + title advisory title/amplification +--> +<!ENTITY % coreattrs + "id ID #IMPLIED + class CDATA #IMPLIED + style %StyleSheet; #IMPLIED + title %Text; #IMPLIED" + > + +<!-- internationalization attributes + lang language code (backwards compatible) + xml:lang language code (as per XML 1.0 spec) + dir direction for weak/neutral text +--> +<!ENTITY % i18n + "lang %LanguageCode; #IMPLIED + xml:lang %LanguageCode; #IMPLIED + dir (ltr|rtl) #IMPLIED" + > + +<!-- attributes for common UI events + onclick a pointer button was clicked + ondblclick a pointer button was double clicked + onmousedown a pointer button was pressed down + onmouseup a pointer button was released + onmousemove a pointer was moved onto the element + onmouseout a pointer was moved away from the element + onkeypress a key was pressed and released + onkeydown a key was pressed down + onkeyup a key was released +--> +<!ENTITY % events + "onclick %Script; #IMPLIED + ondblclick %Script; #IMPLIED + onmousedown %Script; #IMPLIED + onmouseup %Script; #IMPLIED + onmouseover %Script; #IMPLIED + onmousemove %Script; #IMPLIED + onmouseout %Script; #IMPLIED + onkeypress %Script; #IMPLIED + onkeydown %Script; #IMPLIED + onkeyup %Script; #IMPLIED" + > + +<!-- attributes for elements that can get the focus + accesskey accessibility key character + tabindex position in tabbing order + onfocus the element got the focus + onblur the element lost the focus +--> +<!ENTITY % focus + "accesskey %Character; #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED" + > + +<!ENTITY % attrs "%coreattrs; %i18n; %events;"> + +<!-- text alignment for p, div, h1-h6. The default is + align="left" for ltr headings, "right" for rtl --> + +<!ENTITY % TextAlign "align (left|center|right) #IMPLIED"> + +<!--=================== Text Elements ====================================--> + +<!ENTITY % special + "br | span | bdo | object | applet | img | map | iframe"> + +<!ENTITY % fontstyle "tt | i | b | big | small | u + | s | strike |font | basefont"> + +<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup | + samp | kbd | var | cite | abbr | acronym"> + +<!ENTITY % inline.forms "input | select | textarea | label | button"> + +<!-- these can occur at block or inline level --> +<!ENTITY % misc "ins | del | script | noscript"> + +<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;"> + +<!-- %Inline; covers inline or "text-level" elements --> +<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*"> + +<!--================== Block level elements ==============================--> + +<!ENTITY % heading "h1|h2|h3|h4|h5|h6"> +<!ENTITY % lists "ul | ol | dl | menu | dir"> +<!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes"> + +<!ENTITY % block + "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table"> + +<!ENTITY % Block "(%block; | form | %misc;)*"> + +<!-- %Flow; mixes Block and Inline and is used for list items etc. --> +<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*"> + +<!--================== Content models for exclusions =====================--> + +<!-- a elements use %Inline; excluding a --> + +<!ENTITY % a.content + "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*"> + +<!-- pre uses %Inline excluding img, object, applet, big, small, + sub, sup, font, or basefont --> + +<!ENTITY % pre.content + "(#PCDATA | a | br | span | bdo | map | tt | i | b | u | s | + %phrase; | %inline.forms;)*"> + +<!-- form uses %Flow; excluding form --> + +<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*"> + +<!-- button uses %Flow; but excludes a, form, form controls, iframe --> + +<!ENTITY % button.content + "(#PCDATA | p | %heading; | div | %lists; | %blocktext; | + table | br | span | bdo | object | applet | img | map | + %fontstyle; | %phrase; | %misc;)*"> + +<!--================ Document Structure ==================================--> + +<!-- the namespace URI designates the document profile --> + +<!ELEMENT html (head, body)> +<!ATTLIST html + %i18n; + xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml' + > + +<!--================ Document Head =======================================--> + +<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*"> + +<!-- content model is %head.misc; combined with a single + title and an optional base element in any order --> + +<!ELEMENT head (%head.misc;, + ((title, %head.misc;, (base, %head.misc;)?) | + (base, %head.misc;, (title, %head.misc;))))> + +<!ATTLIST head + %i18n; + profile %URI; #IMPLIED + > + +<!-- The title element is not considered part of the flow of text. + It should be displayed, for example as the page header or + window title. Exactly one title is required per document. + --> +<!ELEMENT title (#PCDATA)> +<!ATTLIST title %i18n;> + +<!-- document base URI --> + +<!ELEMENT base EMPTY> +<!ATTLIST base + href %URI; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!-- generic metainformation --> +<!ELEMENT meta EMPTY> +<!ATTLIST meta + %i18n; + http-equiv CDATA #IMPLIED + name CDATA #IMPLIED + content CDATA #REQUIRED + scheme CDATA #IMPLIED + > + +<!-- + Relationship values can be used in principle: + + a) for document specific toolbars/menus when used + with the link element in document head e.g. + start, contents, previous, next, index, end, help + b) to link to a separate style sheet (rel="stylesheet") + c) to make a link to a script (rel="script") + d) by stylesheets to control how collections of + html nodes are rendered into printed documents + e) to make a link to a printable version of this document + e.g. a PostScript or PDF version (rel="alternate" media="print") +--> + +<!ELEMENT link EMPTY> +<!ATTLIST link + %attrs; + charset %Charset; #IMPLIED + href %URI; #IMPLIED + hreflang %LanguageCode; #IMPLIED + type %ContentType; #IMPLIED + rel %LinkTypes; #IMPLIED + rev %LinkTypes; #IMPLIED + media %MediaDesc; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!-- style info, which may include CDATA sections --> +<!ELEMENT style (#PCDATA)> +<!ATTLIST style + %i18n; + type %ContentType; #REQUIRED + media %MediaDesc; #IMPLIED + title %Text; #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!-- script statements, which may include CDATA sections --> +<!ELEMENT script (#PCDATA)> +<!ATTLIST script + charset %Charset; #IMPLIED + type %ContentType; #REQUIRED + language CDATA #IMPLIED + src %URI; #IMPLIED + defer (defer) #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!-- alternate content container for non script-based rendering --> + +<!ELEMENT noscript %Flow;> +<!ATTLIST noscript + %attrs; + > + +<!--======================= Frames =======================================--> + +<!-- inline subwindow --> + +<!ELEMENT iframe %Flow;> +<!ATTLIST iframe + %coreattrs; + longdesc %URI; #IMPLIED + name NMTOKEN #IMPLIED + src %URI; #IMPLIED + frameborder (1|0) "1" + marginwidth %Pixels; #IMPLIED + marginheight %Pixels; #IMPLIED + scrolling (yes|no|auto) "auto" + align %ImgAlign; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + > + +<!-- alternate content container for non frame-based rendering --> + +<!ELEMENT noframes %Flow;> +<!ATTLIST noframes + %attrs; + > + +<!--=================== Document Body ====================================--> + +<!ELEMENT body %Flow;> +<!ATTLIST body + %attrs; + onload %Script; #IMPLIED + onunload %Script; #IMPLIED + background %URI; #IMPLIED + bgcolor %Color; #IMPLIED + text %Color; #IMPLIED + link %Color; #IMPLIED + vlink %Color; #IMPLIED + alink %Color; #IMPLIED + > + +<!ELEMENT div %Flow;> <!-- generic language/style container --> +<!ATTLIST div + %attrs; + %TextAlign; + > + +<!--=================== Paragraphs =======================================--> + +<!ELEMENT p %Inline;> +<!ATTLIST p + %attrs; + %TextAlign; + > + +<!--=================== Headings =========================================--> + +<!-- + There are six levels of headings from h1 (the most important) + to h6 (the least important). +--> + +<!ELEMENT h1 %Inline;> +<!ATTLIST h1 + %attrs; + %TextAlign; + > + +<!ELEMENT h2 %Inline;> +<!ATTLIST h2 + %attrs; + %TextAlign; + > + +<!ELEMENT h3 %Inline;> +<!ATTLIST h3 + %attrs; + %TextAlign; + > + +<!ELEMENT h4 %Inline;> +<!ATTLIST h4 + %attrs; + %TextAlign; + > + +<!ELEMENT h5 %Inline;> +<!ATTLIST h5 + %attrs; + %TextAlign; + > + +<!ELEMENT h6 %Inline;> +<!ATTLIST h6 + %attrs; + %TextAlign; + > + +<!--=================== Lists ============================================--> + +<!-- Unordered list bullet styles --> + +<!ENTITY % ULStyle "(disc|square|circle)"> + +<!-- Unordered list --> + +<!ELEMENT ul (li)+> +<!ATTLIST ul + %attrs; + type %ULStyle; #IMPLIED + compact (compact) #IMPLIED + > + +<!-- Ordered list numbering style + + 1 arabic numbers 1, 2, 3, ... + a lower alpha a, b, c, ... + A upper alpha A, B, C, ... + i lower roman i, ii, iii, ... + I upper roman I, II, III, ... + + The style is applied to the sequence number which by default + is reset to 1 for the first list item in an ordered list. +--> +<!ENTITY % OLStyle "CDATA"> + +<!-- Ordered (numbered) list --> + +<!ELEMENT ol (li)+> +<!ATTLIST ol + %attrs; + type %OLStyle; #IMPLIED + compact (compact) #IMPLIED + start %Number; #IMPLIED + > + +<!-- single column list (DEPRECATED) --> +<!ELEMENT menu (li)+> +<!ATTLIST menu + %attrs; + compact (compact) #IMPLIED + > + +<!-- multiple column list (DEPRECATED) --> +<!ELEMENT dir (li)+> +<!ATTLIST dir + %attrs; + compact (compact) #IMPLIED + > + +<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" --> +<!ENTITY % LIStyle "CDATA"> + +<!-- list item --> + +<!ELEMENT li %Flow;> +<!ATTLIST li + %attrs; + type %LIStyle; #IMPLIED + value %Number; #IMPLIED + > + +<!-- definition lists - dt for term, dd for its definition --> + +<!ELEMENT dl (dt|dd)+> +<!ATTLIST dl + %attrs; + compact (compact) #IMPLIED + > + +<!ELEMENT dt %Inline;> +<!ATTLIST dt + %attrs; + > + +<!ELEMENT dd %Flow;> +<!ATTLIST dd + %attrs; + > + +<!--=================== Address ==========================================--> + +<!-- information on author --> + +<!ELEMENT address %Inline;> +<!ATTLIST address + %attrs; + > + +<!--=================== Horizontal Rule ==================================--> + +<!ELEMENT hr EMPTY> +<!ATTLIST hr + %attrs; + align (left|center|right) #IMPLIED + noshade (noshade) #IMPLIED + size %Pixels; #IMPLIED + width %Length; #IMPLIED + > + +<!--=================== Preformatted Text ================================--> + +<!-- content is %Inline; excluding + "img|object|applet|big|small|sub|sup|font|basefont" --> + +<!ELEMENT pre %pre.content;> +<!ATTLIST pre + %attrs; + width %Number; #IMPLIED + xml:space (preserve) #FIXED 'preserve' + > + +<!--=================== Block-like Quotes ================================--> + +<!ELEMENT blockquote %Flow;> +<!ATTLIST blockquote + %attrs; + cite %URI; #IMPLIED + > + +<!--=================== Text alignment ===================================--> + +<!-- center content --> +<!ELEMENT center %Flow;> +<!ATTLIST center + %attrs; + > + +<!--=================== Inserted/Deleted Text ============================--> + +<!-- + ins/del are allowed in block and inline content, but its + inappropriate to include block content within an ins element + occurring in inline content. +--> +<!ELEMENT ins %Flow;> +<!ATTLIST ins + %attrs; + cite %URI; #IMPLIED + datetime %Datetime; #IMPLIED + > + +<!ELEMENT del %Flow;> +<!ATTLIST del + %attrs; + cite %URI; #IMPLIED + datetime %Datetime; #IMPLIED + > + +<!--================== The Anchor Element ================================--> + +<!-- content is %Inline; except that anchors shouldn't be nested --> + +<!ELEMENT a %a.content;> +<!ATTLIST a + %attrs; + charset %Charset; #IMPLIED + type %ContentType; #IMPLIED + name NMTOKEN #IMPLIED + href %URI; #IMPLIED + hreflang %LanguageCode; #IMPLIED + rel %LinkTypes; #IMPLIED + rev %LinkTypes; #IMPLIED + accesskey %Character; #IMPLIED + shape %Shape; "rect" + coords %Coords; #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!--===================== Inline Elements ================================--> + +<!ELEMENT span %Inline;> <!-- generic language/style container --> +<!ATTLIST span + %attrs; + > + +<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride --> +<!ATTLIST bdo + %coreattrs; + %events; + lang %LanguageCode; #IMPLIED + xml:lang %LanguageCode; #IMPLIED + dir (ltr|rtl) #REQUIRED + > + +<!ELEMENT br EMPTY> <!-- forced line break --> +<!ATTLIST br + %coreattrs; + clear (left|all|right|none) "none" + > + +<!ELEMENT em %Inline;> <!-- emphasis --> +<!ATTLIST em %attrs;> + +<!ELEMENT strong %Inline;> <!-- strong emphasis --> +<!ATTLIST strong %attrs;> + +<!ELEMENT dfn %Inline;> <!-- definitional --> +<!ATTLIST dfn %attrs;> + +<!ELEMENT code %Inline;> <!-- program code --> +<!ATTLIST code %attrs;> + +<!ELEMENT samp %Inline;> <!-- sample --> +<!ATTLIST samp %attrs;> + +<!ELEMENT kbd %Inline;> <!-- something user would type --> +<!ATTLIST kbd %attrs;> + +<!ELEMENT var %Inline;> <!-- variable --> +<!ATTLIST var %attrs;> + +<!ELEMENT cite %Inline;> <!-- citation --> +<!ATTLIST cite %attrs;> + +<!ELEMENT abbr %Inline;> <!-- abbreviation --> +<!ATTLIST abbr %attrs;> + +<!ELEMENT acronym %Inline;> <!-- acronym --> +<!ATTLIST acronym %attrs;> + +<!ELEMENT q %Inline;> <!-- inlined quote --> +<!ATTLIST q + %attrs; + cite %URI; #IMPLIED + > + +<!ELEMENT sub %Inline;> <!-- subscript --> +<!ATTLIST sub %attrs;> + +<!ELEMENT sup %Inline;> <!-- superscript --> +<!ATTLIST sup %attrs;> + +<!ELEMENT tt %Inline;> <!-- fixed pitch font --> +<!ATTLIST tt %attrs;> + +<!ELEMENT i %Inline;> <!-- italic font --> +<!ATTLIST i %attrs;> + +<!ELEMENT b %Inline;> <!-- bold font --> +<!ATTLIST b %attrs;> + +<!ELEMENT big %Inline;> <!-- bigger font --> +<!ATTLIST big %attrs;> + +<!ELEMENT small %Inline;> <!-- smaller font --> +<!ATTLIST small %attrs;> + +<!ELEMENT u %Inline;> <!-- underline --> +<!ATTLIST u %attrs;> + +<!ELEMENT s %Inline;> <!-- strike-through --> +<!ATTLIST s %attrs;> + +<!ELEMENT strike %Inline;> <!-- strike-through --> +<!ATTLIST strike %attrs;> + +<!ELEMENT basefont EMPTY> <!-- base font size --> +<!ATTLIST basefont + id ID #IMPLIED + size CDATA #REQUIRED + color %Color; #IMPLIED + face CDATA #IMPLIED + > + +<!ELEMENT font %Inline;> <!-- local change to font --> +<!ATTLIST font + %coreattrs; + %i18n; + size CDATA #IMPLIED + color %Color; #IMPLIED + face CDATA #IMPLIED + > + +<!--==================== Object ======================================--> +<!-- + object is used to embed objects as part of HTML pages. + param elements should precede other content. Parameters + can also be expressed as attribute/value pairs on the + object element itself when brevity is desired. +--> + +<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*> +<!ATTLIST object + %attrs; + declare (declare) #IMPLIED + classid %URI; #IMPLIED + codebase %URI; #IMPLIED + data %URI; #IMPLIED + type %ContentType; #IMPLIED + codetype %ContentType; #IMPLIED + archive %UriList; #IMPLIED + standby %Text; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + usemap %URI; #IMPLIED + name NMTOKEN #IMPLIED + tabindex %Number; #IMPLIED + align %ImgAlign; #IMPLIED + border %Pixels; #IMPLIED + hspace %Pixels; #IMPLIED + vspace %Pixels; #IMPLIED + > + +<!-- + param is used to supply a named property value. + In XML it would seem natural to follow RDF and support an + abbreviated syntax where the param elements are replaced + by attribute value pairs on the object start tag. +--> +<!ELEMENT param EMPTY> +<!ATTLIST param + id ID #IMPLIED + name CDATA #REQUIRED + value CDATA #IMPLIED + valuetype (data|ref|object) "data" + type %ContentType; #IMPLIED + > + +<!--=================== Java applet ==================================--> +<!-- + One of code or object attributes must be present. + Place param elements before other content. +--> +<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*> +<!ATTLIST applet + %coreattrs; + codebase %URI; #IMPLIED + archive CDATA #IMPLIED + code CDATA #IMPLIED + object CDATA #IMPLIED + alt %Text; #IMPLIED + name NMTOKEN #IMPLIED + width %Length; #REQUIRED + height %Length; #REQUIRED + align %ImgAlign; #IMPLIED + hspace %Pixels; #IMPLIED + vspace %Pixels; #IMPLIED + > + +<!--=================== Images ===========================================--> + +<!-- + To avoid accessibility problems for people who aren't + able to see the image, you should provide a text + description using the alt and longdesc attributes. + In addition, avoid the use of server-side image maps. +--> + +<!ELEMENT img EMPTY> +<!ATTLIST img + %attrs; + src %URI; #REQUIRED + alt %Text; #REQUIRED + name NMTOKEN #IMPLIED + longdesc %URI; #IMPLIED + height %Length; #IMPLIED + width %Length; #IMPLIED + usemap %URI; #IMPLIED + ismap (ismap) #IMPLIED + align %ImgAlign; #IMPLIED + border %Length; #IMPLIED + hspace %Pixels; #IMPLIED + vspace %Pixels; #IMPLIED + > + +<!-- usemap points to a map element which may be in this document + or an external document, although the latter is not widely supported --> + +<!--================== Client-side image maps ============================--> + +<!-- These can be placed in the same document or grouped in a + separate document although this isn't yet widely supported --> + +<!ELEMENT map ((%block; | form | %misc;)+ | area+)> +<!ATTLIST map + %i18n; + %events; + id ID #REQUIRED + class CDATA #IMPLIED + style %StyleSheet; #IMPLIED + title %Text; #IMPLIED + name CDATA #IMPLIED + > + +<!ELEMENT area EMPTY> +<!ATTLIST area + %attrs; + shape %Shape; "rect" + coords %Coords; #IMPLIED + href %URI; #IMPLIED + nohref (nohref) #IMPLIED + alt %Text; #REQUIRED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!--================ Forms ===============================================--> + +<!ELEMENT form %form.content;> <!-- forms shouldn't be nested --> + +<!ATTLIST form + %attrs; + action %URI; #REQUIRED + method (get|post) "get" + name NMTOKEN #IMPLIED + enctype %ContentType; "application/x-www-form-urlencoded" + onsubmit %Script; #IMPLIED + onreset %Script; #IMPLIED + accept %ContentTypes; #IMPLIED + accept-charset %Charsets; #IMPLIED + target %FrameTarget; #IMPLIED + > + +<!-- + Each label must not contain more than ONE field + Label elements shouldn't be nested. +--> +<!ELEMENT label %Inline;> +<!ATTLIST label + %attrs; + for IDREF #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!ENTITY % InputType + "(text | password | checkbox | + radio | submit | reset | + file | hidden | image | button)" + > + +<!-- the name attribute is required for all but submit & reset --> + +<!ELEMENT input EMPTY> <!-- form control --> +<!ATTLIST input + %attrs; + type %InputType; "text" + name CDATA #IMPLIED + value CDATA #IMPLIED + checked (checked) #IMPLIED + disabled (disabled) #IMPLIED + readonly (readonly) #IMPLIED + size CDATA #IMPLIED + maxlength %Number; #IMPLIED + src %URI; #IMPLIED + alt CDATA #IMPLIED + usemap %URI; #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onselect %Script; #IMPLIED + onchange %Script; #IMPLIED + accept %ContentTypes; #IMPLIED + align %ImgAlign; #IMPLIED + > + +<!ELEMENT select (optgroup|option)+> <!-- option selector --> +<!ATTLIST select + %attrs; + name CDATA #IMPLIED + size %Number; #IMPLIED + multiple (multiple) #IMPLIED + disabled (disabled) #IMPLIED + tabindex %Number; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onchange %Script; #IMPLIED + > + +<!ELEMENT optgroup (option)+> <!-- option group --> +<!ATTLIST optgroup + %attrs; + disabled (disabled) #IMPLIED + label %Text; #REQUIRED + > + +<!ELEMENT option (#PCDATA)> <!-- selectable choice --> +<!ATTLIST option + %attrs; + selected (selected) #IMPLIED + disabled (disabled) #IMPLIED + label %Text; #IMPLIED + value CDATA #IMPLIED + > + +<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field --> +<!ATTLIST textarea + %attrs; + name CDATA #IMPLIED + rows %Number; #REQUIRED + cols %Number; #REQUIRED + disabled (disabled) #IMPLIED + readonly (readonly) #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + onselect %Script; #IMPLIED + onchange %Script; #IMPLIED + > + +<!-- + The fieldset element is used to group form fields. + Only one legend element should occur in the content + and if present should only be preceded by whitespace. +--> +<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*> +<!ATTLIST fieldset + %attrs; + > + +<!ENTITY % LAlign "(top|bottom|left|right)"> + +<!ELEMENT legend %Inline;> <!-- fieldset label --> +<!ATTLIST legend + %attrs; + accesskey %Character; #IMPLIED + align %LAlign; #IMPLIED + > + +<!-- + Content is %Flow; excluding a, form, form controls, iframe +--> +<!ELEMENT button %button.content;> <!-- push button --> +<!ATTLIST button + %attrs; + name CDATA #IMPLIED + value CDATA #IMPLIED + type (button|submit|reset) "submit" + disabled (disabled) #IMPLIED + tabindex %Number; #IMPLIED + accesskey %Character; #IMPLIED + onfocus %Script; #IMPLIED + onblur %Script; #IMPLIED + > + +<!-- single-line text input control (DEPRECATED) --> +<!ELEMENT isindex EMPTY> +<!ATTLIST isindex + %coreattrs; + %i18n; + prompt %Text; #IMPLIED + > + +<!--======================= Tables =======================================--> + +<!-- Derived from IETF HTML table standard, see [RFC1942] --> + +<!-- + The border attribute sets the thickness of the frame around the + table. The default units are screen pixels. + + The frame attribute specifies which parts of the frame around + the table should be rendered. The values are not the same as + CALS to avoid a name clash with the valign attribute. +--> +<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)"> + +<!-- + The rules attribute defines which rules to draw between cells: + + If rules is absent then assume: + "none" if border is absent or border="0" otherwise "all" +--> + +<!ENTITY % TRules "(none | groups | rows | cols | all)"> + +<!-- horizontal placement of table relative to document --> +<!ENTITY % TAlign "(left|center|right)"> + +<!-- horizontal alignment attributes for cell contents + + char alignment char, e.g. char=':' + charoff offset for alignment char +--> +<!ENTITY % cellhalign + "align (left|center|right|justify|char) #IMPLIED + char %Character; #IMPLIED + charoff %Length; #IMPLIED" + > + +<!-- vertical alignment attributes for cell contents --> +<!ENTITY % cellvalign + "valign (top|middle|bottom|baseline) #IMPLIED" + > + +<!ELEMENT table + (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))> +<!ELEMENT caption %Inline;> +<!ELEMENT thead (tr)+> +<!ELEMENT tfoot (tr)+> +<!ELEMENT tbody (tr)+> +<!ELEMENT colgroup (col)*> +<!ELEMENT col EMPTY> +<!ELEMENT tr (th|td)+> +<!ELEMENT th %Flow;> +<!ELEMENT td %Flow;> + +<!ATTLIST table + %attrs; + summary %Text; #IMPLIED + width %Length; #IMPLIED + border %Pixels; #IMPLIED + frame %TFrame; #IMPLIED + rules %TRules; #IMPLIED + cellspacing %Length; #IMPLIED + cellpadding %Length; #IMPLIED + align %TAlign; #IMPLIED + bgcolor %Color; #IMPLIED + > + +<!ENTITY % CAlign "(top|bottom|left|right)"> + +<!ATTLIST caption + %attrs; + align %CAlign; #IMPLIED + > + +<!-- +colgroup groups a set of col elements. It allows you to group +several semantically related columns together. +--> +<!ATTLIST colgroup + %attrs; + span %Number; "1" + width %MultiLength; #IMPLIED + %cellhalign; + %cellvalign; + > + +<!-- + col elements define the alignment properties for cells in + one or more columns. + + The width attribute specifies the width of the columns, e.g. + + width=64 width in screen pixels + width=0.5* relative width of 0.5 + + The span attribute causes the attributes of one + col element to apply to more than one column. +--> +<!ATTLIST col + %attrs; + span %Number; "1" + width %MultiLength; #IMPLIED + %cellhalign; + %cellvalign; + > + +<!-- + Use thead to duplicate headers when breaking table + across page boundaries, or for static headers when + tbody sections are rendered in scrolling panel. + + Use tfoot to duplicate footers when breaking table + across page boundaries, or for static footers when + tbody sections are rendered in scrolling panel. + + Use multiple tbody sections when rules are needed + between groups of table rows. +--> +<!ATTLIST thead + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tfoot + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tbody + %attrs; + %cellhalign; + %cellvalign; + > + +<!ATTLIST tr + %attrs; + %cellhalign; + %cellvalign; + bgcolor %Color; #IMPLIED + > + +<!-- Scope is simpler than headers attribute for common tables --> +<!ENTITY % Scope "(row|col|rowgroup|colgroup)"> + +<!-- th is for headers, td for data and for cells acting as both --> + +<!ATTLIST th + %attrs; + abbr %Text; #IMPLIED + axis CDATA #IMPLIED + headers IDREFS #IMPLIED + scope %Scope; #IMPLIED + rowspan %Number; "1" + colspan %Number; "1" + %cellhalign; + %cellvalign; + nowrap (nowrap) #IMPLIED + bgcolor %Color; #IMPLIED + width %Pixels; #IMPLIED + height %Pixels; #IMPLIED + > + +<!ATTLIST td + %attrs; + abbr %Text; #IMPLIED + axis CDATA #IMPLIED + headers IDREFS #IMPLIED + scope %Scope; #IMPLIED + rowspan %Number; "1" + colspan %Number; "1" + %cellhalign; + %cellvalign; + nowrap (nowrap) #IMPLIED + bgcolor %Color; #IMPLIED + width %Pixels; #IMPLIED + height %Pixels; #IMPLIED + > + diff --git a/test/valid/dtds/xhtml1.dcl b/test/valid/dtds/xhtml1.dcl new file mode 100644 index 0000000..fed2103 --- /dev/null +++ b/test/valid/dtds/xhtml1.dcl @@ -0,0 +1,179 @@ +<!SGML -- SGML Declaration for valid XML documents -- + "ISO 8879:1986 (WWW)" + + CHARSET + BASESET + "ISO Registration Number 176//CHARSET + ISO/IEC 10646-1:1993 UCS-4 with implementation + level 3//ESC 2/5 2/15 4/6" + DESCSET + 0 9 UNUSED + 9 2 9 + 11 2 UNUSED + 13 1 13 + 14 18 UNUSED + 32 95 32 + 127 1 UNUSED + 128 32 UNUSED + -- use this instead of the official declaration because SP only + supports 16-bit characters -- + 160 65374 160 + 65534 2 UNUSED + -- 55296 2048 UNUSED + 57344 8190 57344 + 65534 2 UNUSED + 65536 1048576 65536 -- + CAPACITY NONE + + SCOPE DOCUMENT + + SYNTAX + SHUNCHAR NONE + BASESET "ISO Registration Number 176//CHARSET + ISO/IEC 10646-1:1993 UCS-4 with implementation + level 3//ESC 2/5 2/15 4/6" + DESCSET + 0 1114112 0 + FUNCTION + RE 13 + RS 10 + SPACE 32 + TAB SEPCHAR 9 + + NAMING + LCNMSTRT "" + UCNMSTRT "" + NAMESTRT + 58 95 192-214 216-246 248-305 308-318 321-328 + 330-382 384-451 461-496 500-501 506-535 592-680 + 699-705 902 904-906 908 910-929 931-974 976-982 + 986 988 990 992 994-1011 1025-1036 1038-1103 + 1105-1116 1118-1153 1168-1220 1223-1224 + 1227-1228 1232-1259 1262-1269 1272-1273 + 1329-1366 1369 1377-1414 1488-1514 1520-1522 + 1569-1594 1601-1610 1649-1719 1722-1726 + 1728-1742 1744-1747 1749 1765-1766 2309-2361 + 2365 2392-2401 2437-2444 2447-2448 2451-2472 + 2474-2480 2482 2486-2489 2524-2525 2527-2529 + 2544-2545 2565-2570 2575-2576 2579-2600 + 2602-2608 2610-2611 2613-2614 2616-2617 + 2649-2652 2654 2674-2676 2693-2699 2701 + 2703-2705 2707-2728 2730-2736 2738-2739 + 2741-2745 2749 2784 2821-2828 2831-2832 + 2835-2856 2858-2864 2866-2867 2870-2873 2877 + 2908-2909 2911-2913 2949-2954 2958-2960 + 2962-2965 2969-2970 2972 2974-2975 2979-2980 + 2984-2986 2990-2997 2999-3001 3077-3084 + 3086-3088 3090-3112 3114-3123 3125-3129 + 3168-3169 3205-3212 3214-3216 3218-3240 + 3242-3251 3253-3257 3294 3296-3297 3333-3340 + 3342-3344 3346-3368 3370-3385 3424-3425 + 3585-3630 3632 3634-3635 3648-3653 3713-3714 + 3716 3719-3720 3722 3725 3732-3735 3737-3743 + 3745-3747 3749 3751 3754-3755 3757-3758 3760 + 3762-3763 3773 3776-3780 3904-3911 3913-3945 + 4256-4293 4304-4342 4352 4354-4355 4357-4359 + 4361 4363-4364 4366-4370 4412 4414 4416 4428 + 4430 4432 4436-4437 4441 4447-4449 4451 4453 + 4455 4457 4461-4462 4466-4467 4469 4510 4520 + 4523 4526-4527 4535-4536 4538 4540-4546 4587 + 4592 4601 7680-7835 7840-7929 7936-7957 + 7960-7965 7968-8005 8008-8013 8016-8023 8025 + 8027 8029 8031-8061 8064-8116 8118-8124 8126 + 8130-8132 8134-8140 8144-8147 8150-8155 + 8160-8172 8178-8180 8182-8188 8486 8490-8491 + 8494 8576-8578 12295 12321-12329 12353-12436 + 12449-12538 12549-12588 19968-40869 44032-55203 + + LCNMCHAR "" + UCNMCHAR "" + NAMECHAR + 45-46 183 720-721 768-837 864-865 903 1155-1158 + 1425-1441 1443-1465 1467-1469 1471 1473-1474 + 1476 1600 1611-1618 1632-1641 1648 1750-1764 + 1767-1768 1770-1773 1776-1785 2305-2307 2364 + 2366-2381 2385-2388 2402-2403 2406-2415 + 2433-2435 2492 2494-2500 2503-2504 2507-2509 + 2519 2530-2531 2534-2543 2562 2620 2622-2626 + 2631-2632 2635-2637 2662-2673 2689-2691 2748 + 2750-2757 2759-2761 2763-2765 2790-2799 + 2817-2819 2876 2878-2883 2887-2888 2891-2893 + 2902-2903 2918-2927 2946-2947 3006-3010 + 3014-3016 3018-3021 3031 3047-3055 3073-3075 + 3134-3140 3142-3144 3146-3149 3157-3158 + 3174-3183 3202-3203 3262-3268 3270-3272 + 3274-3277 3285-3286 3302-3311 3330-3331 + 3390-3395 3398-3400 3402-3405 3415 3430-3439 + 3633 3636-3642 3654-3662 3664-3673 3761 + 3764-3769 3771-3772 3782 3784-3789 3792-3801 + 3864-3865 3872-3881 3893 3895 3897 3902-3903 + 3953-3972 3974-3979 3984-3989 3991 3993-4013 + 4017-4023 4025 8400-8412 8417 12293 12330-12335 + 12337-12341 12441-12442 12445-12446 12540-12542 + + NAMECASE + GENERAL NO + ENTITY NO + + DELIM + GENERAL SGMLREF + HCRO "&#x" -- 38 is the number for ampersand -- + NESTC "/" + NET ">" + PIC "?>" + SHORTREF NONE + + NAMES + SGMLREF + + QUANTITY NONE + + ENTITIES + "amp" 38 + "lt" 60 + "gt" 62 + "quot" 34 + "apos" 39 + + FEATURES + MINIMIZE + DATATAG NO + OMITTAG NO + RANK NO + SHORTTAG + STARTTAG + EMPTY NO + UNCLOSED NO + NETENABL IMMEDNET + ENDTAG + EMPTY NO + UNCLOSED NO + ATTRIB + DEFAULT YES + OMITNAME NO + VALUE NO + EMPTYNRM YES + IMPLYDEF + ATTLIST NO + DOCTYPE NO + ELEMENT NO + ENTITY NO + NOTATION NO + LINK + SIMPLE NO + IMPLICIT NO + EXPLICIT NO + OTHER + CONCUR NO + SUBDOC NO + FORMAL NO + URN NO + KEEPRSRE YES + VALIDITY TYPE + ENTITIES + REF ANY + INTEGRAL YES + APPINFO NONE + SEEALSO "ISO 8879:1986//NOTATION + Extensible Markup Language (XML) 1.0//EN" +> diff --git a/test/valid/dtds/xmlspec.dtd b/test/valid/dtds/xmlspec.dtd new file mode 100644 index 0000000..55cfba6 --- /dev/null +++ b/test/valid/dtds/xmlspec.dtd @@ -0,0 +1,1102 @@ +<!-- ............................................................... --> +<!-- XML specification DTD ......................................... --> +<!-- ............................................................... --> + +<!-- +TYPICAL INVOCATION: +# <!DOCTYPE spec PUBLIC +# "-//W3C//DTD Specification::19980521//EN" +# "http://www.w3.org/XML/1998/06/xmlspec-19980521.dtd"> + +PURPOSE: + This DTD was developed for use with the XML family of W3C + specifications. It is an XML-compliant DTD based in part on + the TEI Lite and Sweb DTDs. + +DEPENDENCIES: + None. + +CHANGE HISTORY: + The list of changes is at the end of the DTD. + + For all details, see the design report at: + +# <http://www.w3.org/XML/1998/06/xmlspec-report-19980521.htm> + + The "typical invocation" FPI always gets updated to reflect the + date of the most recent changes. + + Search this file for "#" in the first column to see change history + comments. + +MAINTAINER: + Eve Maler + ArborText Inc. + elm@arbortext.com + voice: +1 781 270 5750 + fax: +1 781 273 3760 +--> + +<!-- ............................................................... --> +<!-- Entities for characters and symbols ........................... --> + +<!-- +#1998-03-10: maler: Added “ and ”. +# Used 8879:1986-compatible decimal character +# references. +# Merged charent.mod file back into main file. +#1998-05-14: maler: Fixed ldquo and rdquo. Gave mdash a real number. +--> + +<!ENTITY lt "&#60;"> +<!ENTITY gt ">"> +<!ENTITY amp "&#38;"> +<!ENTITY apos "'"> +<!ENTITY quot """> +<!ENTITY nbsp " "> +<!-- +<!ENTITY mdash "—"> +<!ENTITY ldquo "“"> +<!ENTITY rdquo "”"> +--> + +<!-- ............................................................... --> +<!-- Entities for classes of standalone elements ................... --> + +<!-- +#1997-10-16: maler: Added table to %illus.class;. +#1997-11-28: maler: Added htable to %illus.class;. +#1997-12-29: maler: IGNOREd table. +#1998-03-10: maler: Removed SGML Open-specific %illus.class;. +# Added "local" entities for customization. +#1998-05-14: maler: Added issue to %note.class;. +# Removed %[local.]statusp.class;. +#1998-05-21: maler: Added constraintnote to %note.class;. +--> + +<!ENTITY % local.p.class ""> +<!ENTITY % p.class "p + %local.p.class;"> + +<!ENTITY % local.list.class ""> +<!ENTITY % list.class "ulist|olist|slist|glist + %local.list.class;"> + +<!ENTITY % local.speclist.class ""> +<!ENTITY % speclist.class "orglist|blist + %local.speclist.class;"> + +<!ENTITY % local.note.class ""> +<!ENTITY % note.class "note|issue|wfcnote|vcnote + |constraintnote %local.note.class;"> + +<!ENTITY % local.illus.class ""> +<!ENTITY % illus.class "eg|graphic|scrap|htable + %local.illus.class;"> + +<!-- ............................................................... --> +<!-- Entities for classes of phrase-level elements ................. --> + +<!-- +#1997-12-29: maler: Added xspecref to %ref.class;. +#1998-03-10: maler: Added %ednote.class;. +# Added "local" entities for customization. +--> + +<!ENTITY % local.annot.class ""> +<!ENTITY % annot.class "footnote + %local.annot.class;"> + +<!ENTITY % local.termdef.class ""> +<!ENTITY % termdef.class "termdef|term + %local.termdef.class;"> + +<!ENTITY % local.emph.class ""> +<!ENTITY % emph.class "emph|quote + %local.emph.class;"> + +<!ENTITY % local.ref.class ""> +<!ENTITY % ref.class "bibref|specref|termref|titleref + |xspecref|xtermref + %local.ref.class;"> + +<!ENTITY % local.loc.class ""> +<!ENTITY % loc.class "loc + %local.loc.class;"> + +<!ENTITY % local.tech.class ""> +<!ENTITY % tech.class "kw|nt|xnt|code + %local.tech.class;"> + +<!ENTITY % local.ednote.class ""> +<!ENTITY % ednote.class "ednote + %local.ednote.class;"> + +<!-- ............................................................... --> +<!-- Entities for mixtures of standalone elements .................. --> + +<!-- +#1997-09-30: maler: Created %p.mix; to eliminate p from self. +#1997-09-30: maler: Added %speclist.class; to %obj.mix; and %p.mix;. +#1997-09-30: maler: Added %note.class; to %obj.mix; and %p.mix;. +#1997-10-16: maler: Created %entry.mix;. Note that some elements +# left out here are still allowed in termdef, +# which entry can contain through %p.pcd.mix;. +#1997-11-28: maler: Added %p.class; to %statusobj.mix;. +#1998-03-10: maler: Added %ednote.class; to all mixtures, except +# %p.mix; and %statusobj.mix;, because paragraphs +# and status paragraphs will contain ednote +# through %p.pcd.mix;. +#1998-03-23: maler: Added %termdef.mix; (broken out from +# %termdef.pcd.mix;). +#1998-05-14: maler: Removed %statusobj.mix; and all mentions of +# %statusp.mix;. +--> + +<!ENTITY % div.mix + "%p.class;|%list.class;|%speclist.class;|%note.class; + |%illus.class;|%ednote.class;"> +<!ENTITY % obj.mix + "%p.class;|%list.class;|%speclist.class;|%note.class; + |%illus.class;|%ednote.class;"> +<!ENTITY % p.mix + "%list.class;|%speclist.class;|%note.class;|%illus.class;"> +<!ENTITY % entry.mix + "%list.class;|note|eg|graphic|%ednote.class;"> +<!ENTITY % hdr.mix + "%p.class;|%list.class;|%ednote.class;"> +<!ENTITY % termdef.mix + "%note.class;|%illus.class;"> + +<!-- ............................................................... --> +<!-- Entities for mixtures of #PCDATA and phrase-level elements .... --> + +<!-- Note that %termdef.pcd.mix contains %note.class; + and %illus.class;, considered standalone elements. --> + +<!-- +#1997-09-30: maler: Added scrap and %note.class; to %termdef.pcd.mix;. +#1997-11-28: maler: Added %loc.class; to %p.pcd.mix;. +#1998-03-10: maler: Added %ednote.class; to all mixtures. +#1998-03-23: maler: Moved some %termdef.pcd.mix; stuff out to +# %termdef.mix;. +#1998-05-14: maler: Removed %statusp.pcd.mix;. +#1998-05-21: maler: Added constraint element to %eg.pcd.mix;. +--> + +<!ENTITY % p.pcd.mix + "#PCDATA|%annot.class;|%termdef.class;|%emph.class; + |%ref.class;|%tech.class;|%loc.class;|%ednote.class;"> +<!ENTITY % head.pcd.mix + "#PCDATA|%annot.class;|%emph.class;|%tech.class;|%ednote.class;"> +<!ENTITY % label.pcd.mix + "#PCDATA|%annot.class;|%termdef.class;|%emph.class;|%tech.class; + |%ednote.class;"> +<!ENTITY % eg.pcd.mix + "#PCDATA|%annot.class;|%emph.class;|%ednote.class;|constraint"> +<!ENTITY % termdef.pcd.mix + "#PCDATA|term|%emph.class;|%ref.class;|%tech.class; + |%ednote.class;"> +<!ENTITY % bibl.pcd.mix + "#PCDATA|%emph.class;|%ref.class;|%loc.class;|%ednote.class;"> +<!ENTITY % tech.pcd.mix + "#PCDATA|%ednote.class;"> +<!ENTITY % loc.pcd.mix + "#PCDATA|%loc.class;|%ednote.class;"> + +<!-- ............................................................... --> +<!-- Entities for customizable content models ...................... --> + +<!-- +#1998-03-10: maler: Added customization entities. +#1998-05-14: maler: Allowed prevlocs and latestloc in either order. +--> + +<!ENTITY % spec.mdl + "header, front?, body, back?"> + +<!ENTITY % header.mdl + "title, subtitle?, version, w3c-designation, w3c-doctype, + pubdate, notice*, publoc, ((prevlocs, latestloc?) | + (latestloc, prevlocs?))?, authlist, status, abstract, + pubstmt?, sourcedesc?, langusage, revisiondesc"> + +<!ENTITY % pubdate.mdl + "day?, month, year"> + +<!-- ............................................................... --> +<!-- Entities for common attributes ................................ --> + +<!-- key attribute: + Optionally provides a sorting or indexing key, for cases when + the element content is inappropriate for this purpose. --> +<!ENTITY % key.att + 'key CDATA #IMPLIED'> + +<!-- def attribute: + Points to the element where the relevant definition can be + found, using the IDREF mechanism. %def.att; is for optional + def attributes, and %def-req.att; is for required def + attributes. --> +<!ENTITY % def.att + 'def IDREF #IMPLIED'> +<!ENTITY % def-req.att + 'def IDREF #REQUIRED'> + +<!-- ref attribute: + Points to the element where more information can be found, + using the IDREF mechanism. %ref.att; is for optional + ref attributes, and %ref-req.att; is for required ref + attributes. --> +<!ENTITY % ref.att + 'ref IDREF #IMPLIED'> +<!ENTITY % ref-req.att + 'ref IDREF #REQUIRED'> + +<!-- +#1998-03-23: maler: Added show and actuate attributes to href. +# Added semi-common xml:space attribute. +--> + +<!-- HREF and source attributes: + Points to the element where more information or source data + can be found, using the URL (XLL simple link) mechanism. + For some purposes, is associated with additional XLL + attributes. %href.att; is for optional HREF attributes, + and %href-req.att; is for required HREF attributes. + %source-req.att; is for the source attribute, which + is always required. --> +<!ENTITY % href.att + 'xml:link CDATA #FIXED "simple" + href CDATA #IMPLIED + show CDATA #FIXED "embed" + actuate CDATA #FIXED "auto"'> + +<!ENTITY % href-req.att + 'xml:link CDATA #FIXED "simple" + href CDATA #REQUIRED + show CDATA #FIXED "embed" + actuate CDATA #FIXED "auto"'> + +<!ENTITY % source-req.att + 'xml:link CDATA #FIXED "simple" + xml:attributes NMTOKENS #FIXED "href source" + source CDATA #REQUIRED + show CDATA #FIXED "embed" + actuate CDATA #FIXED "auto"'> + +<!-- xml:space attribute: + Indicates that the element contains white space + that the formatter or other application should retain, + as appropriate to its function. --> +<!ENTITY % xmlspace.att + 'xml:space (default + |preserve) #FIXED "preserve"'> + +<!-- Common attributes: + Every element has an ID attribute (sometimes required, + but usually optional) for links, and a Role attribute + for extending the useful life of the DTD by allowing + authors to make subclasses for any element. %common.att; + is for common attributes where the ID is optional, and + %common-idreq.att; is for common attributes where the + ID is required. --> +<!ENTITY % common.att + 'id ID #IMPLIED + role NMTOKEN #IMPLIED'> +<!ENTITY % common-idreq.att + 'id ID #REQUIRED + role NMTOKEN #IMPLIED'> + +<!-- ............................................................... --> +<!-- Common elements ............................................... --> + +<!-- head: Title on divisions, productions, and the like --> +<!ELEMENT head (%head.pcd.mix;)*> +<!ATTLIST head %common.att;> + +<!-- ............................................................... --> +<!-- Major specification structure ................................. --> + +<!-- +#1998-03-10: maler: Made spec content model easily customizable. +--> + +<!ELEMENT spec (%spec.mdl;)> +<!ATTLIST spec %common.att;> + +<!ELEMENT front (div1+)> +<!ATTLIST front %common.att;> + +<!ELEMENT body (div1+)> +<!ATTLIST body %common.att;> + +<!-- +#1997-09-30: maler: Added inform-div1 to back content. +--> + +<!ELEMENT back ((div1+, inform-div1*) | inform-div1+)> +<!ATTLIST back %common.att;> + +<!ELEMENT div1 (head, (%div.mix;)*, div2*)> +<!ATTLIST div1 %common.att;> + +<!-- +#1997-09-30: maler: Added inform-div1 declarations. +--> + +<!-- inform-div1: Non-normative division in back matter --> +<!ELEMENT inform-div1 (head, (%div.mix;)*, div2*)> +<!ATTLIST inform-div1 %common.att;> + +<!ELEMENT div2 (head, (%div.mix;)*, div3*)> +<!ATTLIST div2 %common.att;> + +<!ELEMENT div3 (head, (%div.mix;)*, div4*)> +<!ATTLIST div3 %common.att;> + +<!ELEMENT div4 (head, (%div.mix;)*)> +<!ATTLIST div4 %common.att;> + +<!-- Specification header .......... --> + +<!-- +#1998-03-10: maler: Made header content model easily customizable. +--> + +<!ELEMENT header (%header.mdl;)> +<!ATTLIST header %common.att;> + +<!-- Example of title: "Extensible Cheese Language (XCL)" --> +<!ELEMENT title (#PCDATA)> +<!ATTLIST title %common.att;> + +<!-- Example of subtitle: "A Cheesy Specification" --> +<!ELEMENT subtitle (#PCDATA)> +<!ATTLIST subtitle %common.att;> + +<!-- Example of version: "Version 666.0" --> +<!ELEMENT version (#PCDATA)> +<!ATTLIST version %common.att;> + +<!-- Example of w3c-designation: "WD-xcl-19991231" --> +<!ELEMENT w3c-designation (#PCDATA)> +<!ATTLIST w3c-designation %common.att;> + +<!-- Example of w3c-doctype: "World Wide Web Consortium Working + Draft" --> +<!ELEMENT w3c-doctype (#PCDATA)> +<!ATTLIST w3c-doctype %common.att;> + +<!-- +#1998-03-10: maler: Made pubdate content model easily customizable. +--> + +<!ELEMENT pubdate (%pubdate.mdl;)> +<!ATTLIST pubdate %common.att;> + +<!ELEMENT day (#PCDATA)> +<!ATTLIST day %common.att;> + +<!ELEMENT month (#PCDATA)> +<!ATTLIST month %common.att;> + +<!ELEMENT year (#PCDATA)> +<!ATTLIST year %common.att;> + +<!-- Example of notice: "This draft is for public comment..." --> +<!ELEMENT notice (%hdr.mix;)+> +<!ATTLIST notice %common.att;> + +<!ELEMENT publoc (loc+)> +<!ATTLIST publoc %common.att;> + +<!ELEMENT prevlocs (loc+)> +<!ATTLIST prevlocs %common.att;> + +<!ELEMENT latestloc (loc+)> +<!ATTLIST latestloc %common.att;> + +<!-- loc (defined in "Phrase-level elements" below) --> + +<!ELEMENT authlist (author+)> +<!ATTLIST authlist %common.att;> + +<!-- +#1997-09-30: maler: Made affiliation optional. +#1998-03-10: maler: Made email optional. +--> + +<!ELEMENT author (name, affiliation?, email?)> +<!ATTLIST author %common.att;> + +<!ELEMENT name (#PCDATA)> +<!ATTLIST name + %common.att; + %key.att;> + +<!ELEMENT affiliation (#PCDATA)> +<!ATTLIST affiliation %common.att;> + +<!ELEMENT email (#PCDATA)> +<!-- HREF attribute: + email functions as a hypertext reference through this + required attribute. Typically the reference would use + the mailto: scheme. --> +<!ATTLIST email + %common.att; + %href-req.att;> + +<!-- +#1998-05-15: maler: Changed status content from %statusobj.mix; +# to plain %obj.mix;. statusp is obsolete. +--> + +<!ELEMENT status (%obj.mix;)+> +<!ATTLIST status %common.att;> + +<!ELEMENT abstract (%hdr.mix;)*> +<!ATTLIST abstract %common.att;> + +<!ELEMENT pubstmt (%hdr.mix;)+> +<!ATTLIST pubstmt %common.att;> + +<!ELEMENT sourcedesc (%hdr.mix;)+> +<!ATTLIST sourcedesc %common.att;> + +<!ELEMENT langusage (language+)> +<!ATTLIST langusage %common.att;> + +<!ELEMENT language (#PCDATA)> +<!ATTLIST language %common.att;> + +<!ELEMENT revisiondesc (%hdr.mix;)+> +<!ATTLIST revisiondesc %common.att;> + +<!-- ............................................................... --> +<!-- Standalone elements ........................................... --> + +<!-- Paragraphs .................... --> + +<!-- +#1997-09-30: maler: Changed from %obj.mix; to %p.mix;. +#1997-12-29: maler: Changed order of %p.mix; and %p.pcd.mix; +# references. +#1997-12-29: maler: Changed order of %statusobj.mix; and +# %statusp.pcd.mix; references. +#1998-05-14: maler: Removed statusp declarations. +--> + +<!ELEMENT p (%p.pcd.mix;|%p.mix;)*> +<!ATTLIST p %common.att;> + +<!-- Lists ......................... --> + +<!ELEMENT ulist (item+)> +<!-- spacing attribute: + Use "normal" to get normal vertical spacing for items; + use "compact" to get less spacing. The default is dependent + on the stylesheet. --> +<!ATTLIST ulist + %common.att; + spacing (normal|compact) #IMPLIED> + +<!ELEMENT olist (item+)> +<!-- spacing attribute: + Use "normal" to get normal vertical spacing for items; + use "compact" to get less spacing. The default is dependent + on the stylesheet. --> +<!ATTLIST olist + %common.att; + spacing (normal|compact) #IMPLIED> + +<!ELEMENT item (%obj.mix;)+> +<!ATTLIST item %common.att;> + +<!ELEMENT slist (sitem+)> +<!ATTLIST slist %common.att;> + +<!ELEMENT sitem (%p.pcd.mix;)*> +<!ATTLIST sitem %common.att;> + +<!ELEMENT glist (gitem+)> +<!ATTLIST glist %common.att;> + +<!ELEMENT gitem (label, def)> +<!ATTLIST gitem %common.att;> + +<!ELEMENT label (%label.pcd.mix;)*> +<!ATTLIST label %common.att;> + +<!ELEMENT def (%obj.mix;)*> +<!ATTLIST def %common.att;> + +<!-- Special lists ................. --> + +<!ELEMENT blist (bibl+)> +<!ATTLIST blist %common.att;> + +<!ELEMENT bibl (%bibl.pcd.mix;)*> +<!-- HREF attribute: + bibl optionally functions as a hypertext reference to the + referred-to resource through this attribute. --> +<!ATTLIST bibl + %common.att; + %href.att; + %key.att;> + +<!ELEMENT orglist (member+)> +<!ATTLIST orglist %common.att;> + +<!-- +#1997-09-30: maler: Added optional affiliation. +--> + +<!ELEMENT member (name, affiliation?, role?)> +<!ATTLIST member %common.att;> + +<!-- name (defined in "Specification header" above) --> +<!-- affiliation (defined in "Specification header" above) --> + +<!ELEMENT role (#PCDATA)> +<!ATTLIST role %common.att;> + +<!-- Notes ......................... --> + +<!ELEMENT note (%obj.mix;)+> +<!ATTLIST note %common.att;> + +<!-- +#1998-05-14: maler: Declared issue element. +--> + +<!ELEMENT issue (%obj.mix;)+> +<!ATTLIST issue %common-idreq.att;> + +<!ELEMENT wfcnote (head, (%obj.mix;)+)> +<!-- ID attribute: + wfcnote must have an ID so that it can be pointed to + from a wfc element in a production. --> +<!ATTLIST wfcnote + %common-idreq.att;> + +<!ELEMENT vcnote (head, (%obj.mix;)+)> +<!-- ID attribute: + vcnote must have an ID so that it can be pointed to + from a vc element in a production. --> +<!ATTLIST vcnote + %common-idreq.att;> + +<!-- +#1998-05-21: maler: Declared generic constraintnote element. +--> + +<!ELEMENT constraintnote (head, (%obj.mix;)+)> +<!-- ID attribute: + cnote must have an ID so that it can be pointed to + from a constraint element in a production. --> +<!-- type attribute: + cnote must have a type value keyword so that it can be + correctly characterized in the specification. --> +<!ATTLIST constraintnote + %common-idreq.att; + type NMTOKEN #REQUIRED> + +<!-- Illustrations ................. --> + +<!-- +#1998-03-23: maler: Added xml:space attribute. +--> + +<!ELEMENT eg (%eg.pcd.mix;)*> +<!ATTLIST eg + %common.att; + %xmlspace.att;> + +<!ELEMENT graphic EMPTY> +<!-- source attribute: + The graphic data must reside at the location pointed to. + This is a hypertext reference, but for practical purposes, + for now it should just be a pathname. --> +<!ATTLIST graphic + %common.att; + %source-req.att; + alt CDATA #IMPLIED> + +<!-- +#1997-11-28: maler: Added prodgroup to scrap and defined it. +#1998-05-21: maler: Added constraint to prod. +--> + +<!ELEMENT scrap (head, (prodgroup+ | prod+ | bnf))> +<!-- lang attribute: + The scrap can link to a description of the language used, + found in a language element in the header. --> +<!ATTLIST scrap + %common.att; + lang IDREF #IMPLIED> + +<!ELEMENT prodgroup (prod+)> +<!-- pcw<n> attributes: + Presentational attributes to control the width + of the "pseudo-table" columns used to output + groups of productions. --> +<!ATTLIST prodgroup + %common.att; + pcw1 CDATA #IMPLIED + pcw2 CDATA #IMPLIED + pcw3 CDATA #IMPLIED + pcw4 CDATA #IMPLIED + pcw5 CDATA #IMPLIED +> + +<!ELEMENT prod (lhs, (rhs, (com|wfc|vc|constraint)*)+)> +<!-- ID attribute: + The production must have an ID so that cross-references + (specref) and mentions of nonterminals (nt) can link to + it. --> +<!ATTLIST prod + %common-idreq.att;> + +<!ELEMENT lhs (#PCDATA)> +<!ATTLIST lhs %common.att;> + +<!ELEMENT rhs (#PCDATA|nt|xnt|com)*> +<!ATTLIST rhs %common.att;> + +<!-- nt and xnt (defined in "Phrase-level elements" below) --> + +<!-- +#1997-11-28: maler: Added loc and bibref to com content. +--> + +<!ELEMENT com (#PCDATA|loc|bibref)*> +<!ATTLIST com %common.att;> + +<!-- wfc: Should generate the head of the wfcnote pointed to --> +<!ELEMENT wfc EMPTY> +<!-- def attribute: + Each well formedness tagline in a production must link to the + wfcnote that defines it. --> +<!ATTLIST wfc + %def-req.att; + %common.att;> + +<!-- vc: Should generate the head of the vcnote pointed to --> +<!ELEMENT vc EMPTY> +<!-- def attribute: + Each validity tagline in a production must link to the vcnote + that defines it. --> +<!ATTLIST vc + %def-req.att; + %common.att;> + +<!-- +#1998-05-21: maler: Declared generic constraint element. +--> + +<!-- constraint: Should generate the head of the constraintnote + pointed to --> +<!ELEMENT constraint EMPTY> +<!-- def attribute: + Each constraint tagline in a production must link to the + constraint note that defines it. --> +<!ATTLIST constraint + %def-req.att; + %common.att;> + +<!-- +#1998-03-23: maler: Added xml:space attribute. +--> + +<!-- bnf: Un-marked-up production --> +<!ELEMENT bnf (%eg.pcd.mix;)*> +<!ATTLIST bnf + %common.att; + %xmlspace.att;> + +<!-- +#1997-10-16: maler: Added table mechanism. +#1997-11-28: maler: Added non-null system ID to entity declaration. +# Added HTML table module. +#1997-12-29: maler: IGNOREd SGML Open table model. +#1998-03-10: maler: Removed SGML Open table model. +# Merged html-tbl.mod file into main file. +# Added %common.att; to all HTML table elements. +#1998-05-14: maler: Replaced table model with full HTML 4.0 model. +# Removed htable in favor of table. +# Removed htbody in favor of tbody. +--> + +<!ENTITY % cellhalign.att + 'align (left|center + |right|justify + |char) #IMPLIED + char CDATA #IMPLIED + charoff CDATA #IMPLIED'> + +<!ENTITY % cellvalign.att + 'valign (top|middle + |bottom + |baseline) #IMPLIED'> + +<!ENTITY % thtd.att + 'abbr CDATA #IMPLIED + axis CDATA #IMPLIED + headers IDREFS #IMPLIED + scope (row + |col + |rowgroup + |colgroup) #IMPLIED + rowspan NMTOKEN "1" + colspan NMTOKEN "1"'> + +<!ENTITY % width.att + 'width CDATA #IMPLIED'> + +<!ENTITY % span.att + 'span NMTOKEN "1"'> + +<!ELEMENT table + (caption?, (col*|colgroup*), thead?, tfoot?, tbody+)> +<!ATTLIST table + %common.att; + %width.att; + summary CDATA #IMPLIED + border CDATA #IMPLIED + frame (void|above + |below|hsides + |lhs|rhs + |vsides|box + |border) #IMPLIED + rules (none|groups + |rows|cols + |all) #IMPLIED + cellspacing CDATA #IMPLIED + cellpadding CDATA #IMPLIED> + +<!ELEMENT caption (%p.pcd.mix;)*> +<!ATTLIST caption %common.att;> + +<!ELEMENT col EMPTY> +<!ATTLIST col + %common.att; + %span.att; + %width.att; + %cellhalign.att; + %cellvalign.att;> + +<!ELEMENT colgroup (col)*> +<!ATTLIST colgroup + %common.att; + %span.att; + %width.att; + %cellhalign.att; + %cellvalign.att;> + +<!ELEMENT thead (tr)+> +<!ATTLIST thead + %common.att; + %cellhalign.att; + %cellvalign.att;> + +<!ELEMENT tfoot (tr)+> +<!ATTLIST tfoot + %common.att; + %cellhalign.att; + %cellvalign.att;> + +<!ELEMENT tbody (tr)+> +<!ATTLIST tbody + %common.att; + %cellhalign.att; + %cellvalign.att;> + +<!ELEMENT tr (th|td)+> +<!ATTLIST tr + %common.att; + %cellhalign.att; + %cellvalign.att;> + +<!ELEMENT th (%p.pcd.mix;|%p.mix;)*> +<!ATTLIST th + %common.att; + %thtd.att; + %cellhalign.att; + %cellvalign.att;> + +<!ELEMENT td (%p.pcd.mix;|%p.mix;)*> +<!ATTLIST td + %common.att; + %thtd.att; + %cellhalign.att; + %cellvalign.att;> + +<!-- ............................................................... --> +<!-- Phrase-level elements ......................................... --> + +<!-- bibref: Should generate, in square brackets, "key" on bibl --> +<!ELEMENT bibref EMPTY> +<!-- ref attribute: + A bibliography reference must link to the bibl element that + describes the resource. --> +<!ATTLIST bibref + %common.att; + %ref-req.att;> + +<!ELEMENT code (%tech.pcd.mix;)*> +<!ATTLIST code %common.att;> + +<!-- +#1998-03-10: maler: Declared ednote and related elements. +--> + +<!ELEMENT ednote (name?, date?, edtext)> +<!ATTLIST ednote %common.att;> + +<!ELEMENT date (#PCDATA)> +<!ATTLIST date %common.att;> + +<!ELEMENT edtext (#PCDATA)> +<!ATTLIST edtext %common.att;> + +<!ELEMENT emph (#PCDATA)> +<!ATTLIST emph %common.att;> + +<!-- footnote: Both footnote content and call to footnote --> +<!ELEMENT footnote (%obj.mix;)+> +<!ATTLIST footnote %common.att;> + +<!ELEMENT kw (%tech.pcd.mix;)*> +<!ATTLIST kw %common.att;> + +<!ELEMENT loc (#PCDATA)> +<!-- HREF attribute: + The purpose of a loc element is to function as a hypertext + link to a resource. (Ideally, the content of loc will also + mention the URI of the resource, so that readers of the + printed version will be able to locate the resource.) --> +<!ATTLIST loc + %common.att; + %href-req.att;> + +<!ELEMENT nt (#PCDATA)> +<!-- def attribute: + The nonterminal must link to the production that defines + it. --> +<!ATTLIST nt + %common.att; + %def-req.att;> + +<!-- +#1998-03-10: maler: Declared quote. +--> + +<!-- quote: Scare quotes and other purely presentational quotes --> +<!ELEMENT quote (%p.pcd.mix;)*> +<!ATTLIST quote %common.att;> + +<!-- specref: Should generate italic "[n.n], Section Title" for + div, "n" for numbered item, "[n]" for production, or + "Issue n" for issue --> +<!ELEMENT specref EMPTY> +<!-- ref attribute: + The purpose of a specref element is to link to a div, item + in an olist, or production in the current spec. --> +<!ATTLIST specref + %common.att; + %ref-req.att;> + +<!ELEMENT term (#PCDATA)> +<!ATTLIST term %common.att;> + +<!ELEMENT termdef (%termdef.pcd.mix;|%termdef.mix;)*> +<!-- ID attribute: + A term definition must have an ID so that it can be linked + to from termref elements. --> +<!-- term attribute: + The canonical form of the term or phrase being defined must + appear in this attribute, even if the term or phrase also + appears in the element content in identical form (e.g., in + the term element). --> +<!ATTLIST termdef + %common-idreq.att; + term CDATA #REQUIRED> + +<!ELEMENT termref (#PCDATA)> +<!-- ref attribute: + A term reference must link to the termdef element that + defines the term. --> +<!ATTLIST termref + %common.att; + %def-req.att;> + +<!ELEMENT titleref (#PCDATA)> +<!-- HREF attribute: + A title reference can optionally function as a hypertext + link to the resource with this title. --> +<!ATTLIST titleref + %common.att; + %href.att;> + +<!ELEMENT xnt (#PCDATA)> +<!-- HREF attribute: + The nonterminal must hyperlink to a resource that serves + to define it (e.g., a production in a related XML + specification). --> +<!ATTLIST xnt + %common.att; + %href-req.att;> + +<!-- +#1997-12-29: maler: Declared xspecref. +--> + +<!ELEMENT xspecref (#PCDATA)> +<!-- HREF attribute: + The spec reference must hyperlink to the resource to + cross-refer to (e.g., a section in a related XML + specification). --> +<!ATTLIST xspecref + %common.att; + %href-req.att;> + +<!ELEMENT xtermref (#PCDATA)> +<!-- HREF attribute: + The term reference must hyperlink to the resource that + serves to define the term (e.g., a term definition in + a related XML specification). --> +<!ATTLIST xtermref + %common.att; + %href-req.att;> + +<!-- ............................................................... --> +<!-- Unused elements for ADEPT ..................................... --> + +<!-- +#1997-09-30: maler: Added unusued elements. +#1997-10-14: maler: Fixed div to move nested div to the mixture. +#1998-05-14: maler: Added key-term, htable, and htbody. +--> + +<!-- The following elements are purposely declared but never + referenced. Declaring them allows them to be pasted from + an HTML document or an earlier version of an XML spec document + into a document using this DTD in ADEPT. The ATD Context + Transformation mechanism will try to convert them to the + appropriate element for this DTD. While this conversion + will not work for all fragments, it does allow many cases + to work reasonably well. --> + +<!ELEMENT div + (head?, (%div.mix;|ul|ol|h1|h2|h3|h4|h5|h6|div)*)> +<!ELEMENT h1 (%head.pcd.mix;|em|a)*> +<!ELEMENT h2 (%head.pcd.mix;|em|a)*> +<!ELEMENT h3 (%head.pcd.mix;|em|a)*> +<!ELEMENT h4 (%head.pcd.mix;|em|a)*> +<!ELEMENT h5 (%head.pcd.mix;|em|a)*> +<!ELEMENT h6 (%head.pcd.mix;|em|a)*> +<!ELEMENT pre (%eg.pcd.mix;|em)*> +<!ELEMENT ul (item|li)*> +<!ELEMENT ol (item|li)*> +<!ELEMENT li (#PCDATA|%obj.mix;)*> +<!ELEMENT em (#PCDATA)> +<!ELEMENT a (#PCDATA)> + +<!ELEMENT key-term (#PCDATA)> +<!ELEMENT htable + (caption?, (col*|colgroup*), thead?, tfoot?, tbody+)> +<!ELEMENT htbody (tr)+> +<!ELEMENT statusp (%p.pcd.mix;|%p.mix;)*> + +<!-- ............................................................... --> +<!-- Change history ................................................ --> + +<!-- +#1997-08-18: maler +#- Did a major revision. +#1997-09-10: maler +#- Updated FPI. +#- Removed namekey element and put key attribute on name element. +#- Made statusp element and supporting entities. +#- Added slist element with sitem+ content. +#- Required head on scrap and added new bnf subelement. +#- Added an xnt element and allowed it and nt in regular text and rhs. +#- Removed the ntref element. +#- Added back the com element to the content of rhs. +#- Added a key attribute to bibl. +#- Removed the ident element. +#- Added a term element to be used inside termdef. +#- Added an xtermref element parallel to termref. +#- Beefed up DTD comments. +#1997-09-12: maler +#- Allowed term element in general text. +#- Changed bibref to EMPTY. +#- Added ref.class to termdef.pcd.mix. +#1997-09-14: maler +#- Changed main attribute of xtermref from def to href. +#- Added termdef.class to label contents. +#1997-09-30: maler +#- Added character entity module and added new entities. +#- Removed p from appearing directly in self; created %p.mix;. +#- Added inform-div (non-normative division) element. +#- Fixed xtermref comment to mention HREF, not ref. +#- Extended orglist model to allow optional affiliation. +#- Modified author to make affiliation optional. +#- Added %speclist.class; and %note.class; to %obj.mix; and %p.mix;. +#- Added %note.class; and %illus.class; to %termdef.pcd.mix;. +#- Added unused HTML elements. +#- Put empty system ID next to public ID in entity declarations. +#1997-10-14: maler +#- Fixed "unused" div content model to move nested div to mixture. +#1997-10-16: maler +#- Added SGML Open Exchange tables. +#1997-11-28: maler +#- Added support for prodgroup and its attributes. +#- Added support for HTML tables. +#- Added loc and bibref to content of com. +#- Added loc to general p content models. +#- Allowed p as alternative to statusp in status. +#- Added non-null system IDs to external parameter entity declarations. +#- (Modified the SGML Open table module to make it XML-compliant.) +#- (Modified the character entity module.) +#1997-12-29: maler +#- Moved #PCDATA occurrences to come before GIs in content models. +#- Removed use of the SGML Open table module. +#- Added xspecref element. +#- Ensured that all FPIs contain 4-digit year. +#- (Modified the character entity module.) +#1998-03-10: maler +#- Merged the character entity and table modules into the main file. +#- Added ldquo and rdquo entities. +#- Added common attributes to prodgroup. +#- Made the email element in header optional. +#- Removed reference to the SGML Open table model. +#- Added ednote element. +#- Added quote element. +#- Updated XLink usage to reflect 3 March 1998 WD. +#- Added "local" entities to the class entities for customization. +#- Parameterized several content models to allow for customization. +#1998-03-23: maler +#- Cleaned up some comments and removed some others. +#- Added xml:space semi-common attribute to eg and bnf elements. +#- Added show and embed attributes on all the uses of href. +#- Added %common.att; to all HTML table elements. +#- Added a real URI to the "typical invocation" comment. +#1998-05-14: maler +#- Fixed mdash, ldquo, and rdquo character entities. +#- Switched to the full HTML 4.0 table model. +#- Removed htable/htbody elements and replaced them with table/tbody. +#- Added issue element to %note.class; and declared it. +#- Allowed prevlocs and latestloc in either order. +#- Added key-term, htable, htbody, and statusp as unused elements. +#- Removed real statusp element in favor of plain p. +#1998-05-21: maler +#- Declared generic constraint and constraintnote elements. +#- Added constraintnote to %note.class;. +#- Added constraint to %eg.pcd.mix; and prod content model. +--> + +<!-- ............................................................... --> +<!-- End of XML specification DTD .................................. --> +<!-- ............................................................... -->
\ No newline at end of file |