<!-- 
                   ===========================================
                   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 speci