diff options
| author | Daniel Veillard <veillard@src.gnome.org> | 2001-10-23 13:10:19 +0000 |
|---|---|---|
| committer | Daniel Veillard <veillard@src.gnome.org> | 2001-10-23 13:10:19 +0000 |
| commit | 5151c06f30d840c373d7afaaeb654e77b37da8cc (patch) | |
| tree | fafd2b348911eb68a6fc526c86028c20d138c6b8 | |
| parent | b6b0fd8962e95bdb27e9e65bc785ce8cf1a3622c (diff) | |
| download | android_external_libxml2-5151c06f30d840c373d7afaaeb654e77b37da8cc.tar.gz android_external_libxml2-5151c06f30d840c373d7afaaeb654e77b37da8cc.tar.bz2 android_external_libxml2-5151c06f30d840c373d7afaaeb654e77b37da8cc.zip | |
fixed an erroneous validation bug when PE refs occurs in external parsed
* parser.c: fixed an erroneous validation bug when PE refs
occurs in external parsed entities referenced from the
internals subset
* test/valid/index.xml test/valid/dtds/nitf-2-5.dtd
test/valid/dtds/NewsMLv1.0.dtd result/valid/index.xml*:
added the associated testcase, it's a nice one.
* HTMLparser.c: generate the DTD node as HTML still ...
* HTMLtree.c: fixed errors in Set/GetMetaEncoding
Daniel
| -rw-r--r-- | ChangeLog | 11 | ||||
| -rw-r--r-- | HTMLparser.c | 2 | ||||
| -rw-r--r-- | HTMLtree.c | 12 | ||||
| -rw-r--r-- | parser.c | 3 | ||||
| -rw-r--r-- | result/valid/index.xml | 808 | ||||
| -rw-r--r-- | result/valid/index.xml.err | 0 | ||||
| -rw-r--r-- | result/valid/rss.xml | 1 | ||||
| -rw-r--r-- | result/valid/rss.xml.err | 2 | ||||
| -rw-r--r-- | test/valid/dtds/NewsMLv1.0.dtd | 1578 | ||||
| -rw-r--r-- | test/valid/dtds/nitf-2-5.dtd | 1004 | ||||
| -rw-r--r-- | test/valid/index.xml | 111 | ||||
| -rw-r--r-- | test/valid/rss.xml | 1 |
12 files changed, 3522 insertions, 11 deletions
@@ -1,3 +1,14 @@ +Tue Oct 23 14:32:04 CEST 2001 Daniel Veillard <daniel@veillard.com> + + * parser.c: fixed an erroneous validation bug when PE refs + occurs in external parsed entities referenced from the + internals subset + * test/valid/index.xml test/valid/dtds/nitf-2-5.dtd + test/valid/dtds/NewsMLv1.0.dtd result/valid/index.xml*: + added the associated testcase, it's a nice one. + * HTMLparser.c: generate the DTD node as HTML still ... + * HTMLtree.c: fixed errors in Set/GetMetaEncoding + Mon Oct 22 14:20:17 CEST 2001 Daniel Veillard <daniel@veillard.com> * HTMLparser.c: fixed a bug in htmlNewDoc() diff --git a/HTMLparser.c b/HTMLparser.c index 428248ed..0b9061d0 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -1823,7 +1823,7 @@ htmlNewDocNoDtD(const xmlChar *URI, const xmlChar *ExternalID) { cur->_private = NULL; if ((ExternalID != NULL) || (URI != NULL)) - xmlCreateIntSubset(cur, BAD_CAST "html", ExternalID, URI); + xmlCreateIntSubset(cur, BAD_CAST "HTML", ExternalID, URI); return(cur); } @@ -54,7 +54,7 @@ htmlGetMetaEncoding(htmlDocPtr doc) { * Search the html */ while (cur != NULL) { - if (cur->name != NULL) { + if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) { if (xmlStrEqual(cur->name, BAD_CAST"html")) break; if (xmlStrEqual(cur->name, BAD_CAST"head")) @@ -72,7 +72,7 @@ htmlGetMetaEncoding(htmlDocPtr doc) { * Search the head */ while (cur != NULL) { - if (cur->name != NULL) { + if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) { if (xmlStrEqual(cur->name, BAD_CAST"head")) break; if (xmlStrEqual(cur->name, BAD_CAST"meta")) @@ -90,7 +90,7 @@ found_head: */ found_meta: while (cur != NULL) { - if (cur->name != NULL) { + if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) { if (xmlStrEqual(cur->name, BAD_CAST"meta")) { xmlAttrPtr attr = cur->properties; int http; @@ -180,7 +180,7 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { * Search the html */ while (cur != NULL) { - if (cur->name != NULL) { + if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) { if (xmlStrcasecmp(cur->name, BAD_CAST"html") == 0) break; if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0) @@ -198,7 +198,7 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { * Search the head */ while (cur != NULL) { - if (cur->name != NULL) { + if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) { if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0) break; if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) @@ -237,7 +237,7 @@ found_meta: * encoding informations */ while (cur != NULL) { - if (cur->name != NULL) { + if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) { if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) { xmlAttrPtr attr = cur->properties; int http; @@ -2085,7 +2085,8 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { ctxt->wellFormed = 0; ctxt->disableSAX = 1; } - if ((ctxt->inSubset == 1) && (tmp == '%')) { + if ((tmp == '%') && (ctxt->inSubset == 1) && + (ctxt->inputNr == 1)) { ctxt->errNo = XML_ERR_ENTITY_PE_INTERNAL; if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) ctxt->sax->error(ctxt->userData, diff --git a/result/valid/index.xml b/result/valid/index.xml new file mode 100644 index 00000000..d0ab20da --- /dev/null +++ b/result/valid/index.xml @@ -0,0 +1,808 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE NewsML PUBLIC "urn:newsml:iptc.org:20001006:NewsMLv1.0:1" "dtds/NewsMLv1.0.dtd" [ +<!ENTITY % nitf SYSTEM "dtds/nitf-2-5.dtd"> +<!-- + 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 id ID #IMPLIED> +<!ATTLIST nitf uno CDATA #IMPLIED> +<!ATTLIST nitf version CDATA #FIXED "-//IPTC-NAA//DTD NITF-XML 2.1//EN"> +<!ATTLIST nitf change.date CDATA #FIXED "4 July 2000"> +<!ATTLIST nitf change.time CDATA #FIXED "1900"> +<!ATTLIST nitf baselang CDATA #IMPLIED> +<!ATTLIST nitf class NMTOKENS #IMPLIED> +<!ELEMENT head (title? , meta* , tobject? , iim? , docdata? , pubdata* , revision-history*)> +<!ATTLIST head id ID #IMPLIED> +<!ELEMENT title (#PCDATA)> +<!ATTLIST title id ID #IMPLIED> +<!ATTLIST title type (main | subtitle | parttitle | alternate | abbrev | other) #IMPLIED> +<!ELEMENT meta EMPTY> +<!ATTLIST meta id ID #IMPLIED> +<!ATTLIST meta http-equiv NMTOKEN #IMPLIED> +<!ATTLIST meta name NMTOKEN #IMPLIED> +<!ATTLIST meta content CDATA #REQUIRED> +<!ELEMENT tobject (tobject.property* , tobject.subject*)> +<!ATTLIST tobject id ID #IMPLIED> +<!ATTLIST tobject tobject.type CDATA "news"> +<!ELEMENT tobject.property EMPTY> +<!ATTLIST tobject.property id ID #IMPLIED> +<!ATTLIST tobject.property tobject.property.type CDATA "current"> +<!ELEMENT tobject.subject EMPTY> +<!ATTLIST tobject.subject id ID #IMPLIED> +<!ATTLIST tobject.subject tobject.subject.ipr CDATA "IPTC"> +<!ATTLIST tobject.subject tobject.subject.refnum NMTOKEN #REQUIRED> +<!ATTLIST tobject.subject tobject.subject.code CDATA #IMPLIED> +<!ATTLIST tobject.subject tobject.subject.type CDATA #IMPLIED> +<!ATTLIST tobject.subject tobject.subject.matter CDATA #IMPLIED> +<!ATTLIST tobject.subject tobject.subject.detail CDATA #IMPLIED> +<!ELEMENT iim (ds)*> +<!ATTLIST iim id ID #IMPLIED> +<!ATTLIST iim ver NMTOKEN #IMPLIED> +<!ELEMENT ds EMPTY> +<!ATTLIST ds id ID #IMPLIED> +<!ATTLIST ds num NMTOKEN #REQUIRED> +<!ATTLIST ds 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 id ID #IMPLIED> +<!ELEMENT correction EMPTY> +<!ATTLIST correction id ID #IMPLIED> +<!ATTLIST correction info CDATA #IMPLIED> +<!ATTLIST correction id-string CDATA #IMPLIED> +<!ATTLIST correction reg-src CDATA #IMPLIED> +<!ELEMENT evloc EMPTY> +<!ATTLIST evloc id ID #IMPLIED> +<!ATTLIST evloc iso-cc CDATA #IMPLIED> +<!ATTLIST evloc state-prov CDATA #IMPLIED> +<!ATTLIST evloc county-dist CDATA #IMPLIED> +<!ATTLIST evloc city CDATA #IMPLIED> +<!ELEMENT doc-id EMPTY> +<!ATTLIST doc-id id ID #IMPLIED> +<!ATTLIST doc-id regsrc CDATA #IMPLIED> +<!ATTLIST doc-id id-string CDATA #IMPLIED> +<!ELEMENT del-list (from-src)*> +<!ATTLIST del-list id ID #IMPLIED> +<!ELEMENT from-src EMPTY> +<!ATTLIST from-src id ID #IMPLIED> +<!ATTLIST from-src src-name CDATA #IMPLIED> +<!ATTLIST from-src level-number CDATA #IMPLIED> +<!ELEMENT urgency EMPTY> +<!ATTLIST urgency id ID #IMPLIED> +<!ATTLIST urgency ed-urg NMTOKEN #IMPLIED> +<!ELEMENT fixture EMPTY> +<!ATTLIST fixture id ID #IMPLIED> +<!ATTLIST fixture fix-id CDATA #IMPLIED> +<!ELEMENT date.issue EMPTY> +<!ATTLIST date.issue id ID #IMPLIED> +<!ATTLIST date.issue norm CDATA #IMPLIED> +<!ELEMENT date.release EMPTY> +<!ATTLIST date.release id ID #IMPLIED> +<!ATTLIST date.release norm CDATA #IMPLIED> +<!ELEMENT date.expire EMPTY> +<!ATTLIST date.expire id ID #IMPLIED> +<!ATTLIST date.expire norm CDATA #IMPLIED> +<!ELEMENT doc-scope EMPTY> +<!ATTLIST doc-scope id ID #IMPLIED> +<!ATTLIST doc-scope scope CDATA #IMPLIED> +<!ELEMENT series EMPTY> +<!ATTLIST series id ID #IMPLIED> +<!ATTLIST series series.name CDATA #IMPLIED> +<!ATTLIST series series.part NMTOKEN "0"> +<!ATTLIST series series.totalpart NMTOKEN "0"> +<!ELEMENT ed-msg EMPTY> +<!ATTLIST ed-msg id ID #IMPLIED> +<!ATTLIST ed-msg msg-type CDATA #IMPLIED> +<!ATTLIST ed-msg info CDATA #IMPLIED> +<!ELEMENT du-key EMPTY> +<!ATTLIST du-key id ID #IMPLIED> +<!ATTLIST du-key generation NMTOKEN #IMPLIED> +<!ATTLIST du-key part NMTOKEN #IMPLIED> +<!ATTLIST du-key version NMTOKEN #IMPLIED> +<!ATTLIST du-key key CDATA #IMPLIED> +<!ELEMENT doc.copyright EMPTY> +<!ATTLIST doc.copyright id ID #IMPLIED> +<!ATTLIST doc.copyright year NMTOKEN #IMPLIED> +<!ATTLIST doc.copyright holder CDATA #IMPLIED> +<!ELEMENT doc.rights EMPTY> +<!ATTLIST doc.rights id ID #IMPLIED> +<!ATTLIST doc.rights owner CDATA #IMPLIED> +<!ATTLIST doc.rights startdate CDATA #IMPLIED> +<!ATTLIST doc.rights enddate CDATA #IMPLIED> +<!ATTLIST doc.rights agent CDATA #IMPLIED> +<!ATTLIST doc.rights geography CDATA #IMPLIED> +<!ATTLIST doc.rights location-code CDATA #IMPLIED> +<!ATTLIST doc.rights code-source CDATA #IMPLIED> +<!ATTLIST doc.rights type CDATA #IMPLIED> +<!ATTLIST doc.rights limitations CDATA #IMPLIED> +<!ELEMENT key-list (keyword)*> +<!ATTLIST key-list id ID #IMPLIED> +<!ELEMENT keyword EMPTY> +<!ATTLIST keyword id ID #IMPLIED> +<!ATTLIST keyword key CDATA #IMPLIED> +<!ELEMENT pubdata EMPTY> +<!ATTLIST pubdata id ID #IMPLIED> +<!ATTLIST pubdata type (print | audio | video | web | appliance | other) #IMPLIED> +<!ATTLIST pubdata item-length CDATA #IMPLIED> +<!ATTLIST pubdata unit-of-measure (word | character | byte | inch | pica | cm | hour | minute | second | other) #IMPLIED> +<!ATTLIST pubdata date.publication CDATA #IMPLIED> +<!ATTLIST pubdata name CDATA #IMPLIED> +<!ATTLIST pubdata issn CDATA #IMPLIED> +<!ATTLIST pubdata volume CDATA #IMPLIED> +<!ATTLIST pubdata number CDATA #IMPLIED> +<!ATTLIST pubdata issue CDATA #IMPLIED> +<!ATTLIST pubdata edition.name CDATA #IMPLIED> +<!ATTLIST pubdata edition.area CDATA #IMPLIED> +<!ATTLIST pubdata position.section CDATA #IMPLIED> +<!ATTLIST pubdata position.sequence CDATA #IMPLIED> +<!ATTLIST pubdata ex-ref CDATA #IMPLIED> +<!ELEMENT revision-history EMPTY> +<!ATTLIST revision-history id ID #IMPLIED> +<!ATTLIST revision-history name CDATA #IMPLIED> +<!ATTLIST revision-history function (writer-author | editor | producer | archivist | videographer | graphic-artist | photographer | statistician | other) #IMPLIED> +<!ATTLIST revision-history norm CDATA #IMPLIED> +<!ATTLIST revision-history comment CDATA #IMPLIED> +<!ELEMENT body (body.head? , body.content* , body.end?)> +<!ATTLIST body id ID #IMPLIED> +<!ATTLIST body class NMTOKENS #IMPLIED> +<!ATTLIST body style CDATA #IMPLIED> +<!ATTLIST body lang NMTOKEN #IMPLIED> +<!ATTLIST body dir (ltr | rtl) #IMPLIED> +<!ATTLIST body background CDATA #IMPLIED> +<!ELEMENT body.head (hedline? , note* , rights? , byline* , distributor? , dateline* , abstract? , series?)> +<!ATTLIST body.head id ID #IMPLIED> +<!ELEMENT hedline (hl1 , hl2*)> +<!ATTLIST hedline id ID #IMPLIED> +<!ELEMENT hl1 (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST hl1 id ID #IMPLIED> +<!ATTLIST hl1 class NMTOKENS #IMPLIED> +<!ATTLIST hl1 style CDATA #IMPLIED> +<!ATTLIST hl1 lang NMTOKEN #IMPLIED> +<!ATTLIST hl1 dir (ltr | rtl) #IMPLIED> +<!ELEMENT hl2 (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST hl2 id ID #IMPLIED> +<!ATTLIST hl2 class NMTOKENS #IMPLIED> +<!ATTLIST hl2 style CDATA #IMPLIED> +<!ATTLIST hl2 lang NMTOKEN #IMPLIED> +<!ATTLIST hl2 dir (ltr | rtl) #IMPLIED> +<!ELEMENT note (body.content)+> +<!ATTLIST note id ID #IMPLIED> +<!ATTLIST note class NMTOKENS #IMPLIED> +<!ATTLIST note style CDATA #IMPLIED> +<!ATTLIST note lang NMTOKEN #IMPLIED> +<!ATTLIST note dir (ltr | rtl) #IMPLIED> +<!ATTLIST note noteclass (cpyrt | end | hd | editorsnote | trademk | undef) #IMPLIED> +<!ATTLIST note type (std | pa | npa) "std"> +<!ATTLIST note src CDATA #IMPLIED> +<!ATTLIST note md CDATA #IMPLIED> +<!ELEMENT rights (#PCDATA | rights.owner | rights.startdate | rights.enddate | rights.agent | rights.geography | rights.type | rights.limitations)*> +<!ATTLIST rights id ID #IMPLIED> +<!ELEMENT rights.owner (#PCDATA)> +<!ATTLIST rights.owner id ID #IMPLIED> +<!ATTLIST rights.owner contact CDATA #IMPLIED> +<!ELEMENT rights.startdate (#PCDATA)> +<!ATTLIST rights.startdate id ID #IMPLIED> +<!ATTLIST rights.startdate norm CDATA #IMPLIED> +<!ELEMENT rights.enddate (#PCDATA)> +<!ATTLIST rights.enddate id ID #IMPLIED> +<!ATTLIST rights.enddate norm CDATA #IMPLIED> +<!ELEMENT rights.agent (#PCDATA)> +<!ATTLIST rights.agent id ID #IMPLIED> +<!ATTLIST rights.agent contact CDATA #IMPLIED> +<!ELEMENT rights.geography (#PCDATA)> +<!ATTLIST rights.geography id ID #IMPLIED> +<!ATTLIST rights.geography location-code CDATA #IMPLIED> +<!ATTLIST rights.geography code-source CDATA #IMPLIED> +<!ELEMENT rights.type (#PCDATA)> +<!ATTLIST rights.type id ID #IMPLIED> +<!ELEMENT rights.limitations (#PCDATA)> +<!ATTLIST rights.limitations id ID #IMPLIED> +<!ELEMENT byline (#PCDATA | person | byttl | location | virtloc)*> +<!ATTLIST byline id ID #IMPLIED> +<!ELEMENT byttl (#PCDATA | org)*> +<!ATTLIST byttl id ID #IMPLIED> +<!ELEMENT distributor (#PCDATA | org)*> +<!ATTLIST distributor id ID #IMPLIED> +<!ELEMENT dateline (#PCDATA | location | story.date)*> +<!ATTLIST dateline id ID #IMPLIED> +<!ATTLIST dateline class NMTOKENS #IMPLIED> +<!ATTLIST dateline style CDATA #IMPLIED> +<!ATTLIST dateline lang NMTOKEN #IMPLIED> +<!ATTLIST dateline dir (ltr | rtl) #IMPLIED> +<!ELEMENT story.date (#PCDATA)> +<!ATTLIST story.date id ID #IMPLIED> +<!ATTLIST story.date norm CDATA #IMPLIED> +<!ELEMENT abstract (p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)+> +<!ATTLIST abstract id ID #IMPLIED> +<!ELEMENT copyrite (#PCDATA | copyrite.year | copyrite.holder)*> +<!ATTLIST copyrite id ID #IMPLIED> +<!ELEMENT copyrite.year (#PCDATA)> +<!ATTLIST copyrite.year id ID #IMPLIED> +<!ELEMENT copyrite.holder (#PCDATA)> +<!ATTLIST copyrite.holder id ID #IMPLIED> +<!ELEMENT body.content (block | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*> +<!ATTLIST body.content id ID #IMPLIED> +<!ELEMENT block ((dateline? , copyrite? , abstract?)? , (p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)* , datasource?)> +<!ATTLIST block id ID #IMPLIED> +<!ATTLIST block class NMTOKENS #IMPLIED> +<!ATTLIST block style CDATA #IMPLIED> +<!ATTLIST block lang NMTOKEN #IMPLIED> +<!ATTLIST block dir (ltr | rtl) #IMPLIED> +<!ELEMENT p (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST p id ID #IMPLIED> +<!ATTLIST p class NMTOKENS #IMPLIED> +<!ATTLIST p style CDATA #IMPLIED> +<!ATTLIST p lang NMTOKEN #IMPLIED> +<!ATTLIST p dir (ltr | rtl) #IMPLIED> +<!ATTLIST p lede (true | false) #IMPLIED> +<!ATTLIST p summary (true | false) #IMPLIED> +<!ATTLIST p optional-text (true | false) #IMPLIED> +<!ELEMENT table (caption? , (col* | colgroup*) , thead? , tfoot? , tbody+)> +<!ATTLIST table id ID #IMPLIED> +<!ATTLIST table class NMTOKENS #IMPLIED> +<!ATTLIST table style CDATA #IMPLIED> +<!ATTLIST table lang NMTOKEN #IMPLIED> +<!ATTLIST table dir (ltr | rtl) #IMPLIED> +<!ATTLIST table tabletype ENTITY #IMPLIED> +<!ATTLIST table align (left | center | right) #IMPLIED> +<!ATTLIST table width CDATA #IMPLIED> +<!ATTLIST table cols NMTOKEN #IMPLIED> +<!ATTLIST table border CDATA #IMPLIED> +<!ATTLIST table frame (void | above | below | hsides | lhs | rhs | vsides | box | border) #IMPLIED> +<!ATTLIST table rules (none | basic | rows | cols | all) #IMPLIED> +<!ATTLIST table cellspacing CDATA #IMPLIED> +<!ATTLIST table cellpadding CDATA #IMPLIED> +<!ATTLIST table table.fmt CDATA #IMPLIED> +<!ATTLIST table table.domain CDATA #IMPLIED> +<!ATTLIST table table.inst CDATA #IMPLIED> +<!ELEMENT media (media-metadata* , media-reference , media-object? , media-caption* , media-producer?)> +<!ATTLIST media id ID #IMPLIED> +<!ATTLIST media class NMTOKENS #IMPLIED> +<!ATTLIST media style CDATA #IMPLIED> +<!ATTLIST media lang NMTOKEN #IMPLIED> +<!ATTLIST media dir (ltr | rtl) #IMPLIED> +<!ATTLIST media media-type (text | audio | image | video | data | application | other) #REQUIRED> +<!ELEMENT media-reference (#PCDATA)> +<!ATTLIST media-reference id ID #IMPLIED> +<!ATTLIST media-reference class NMTOKENS #IMPLIED> +<!ATTLIST media-reference style CDATA #IMPLIED> +<!ATTLIST media-reference lang NMTOKEN #IMPLIED> +<!ATTLIST media-reference dir (ltr | rtl) #IMPLIED> +<!ATTLIST media-reference data-location CDATA #REQUIRED> +<!ATTLIST media-reference name CDATA #IMPLIED> +<!ATTLIST media-reference source CDATA #IMPLIED> +<!ATTLIST media-reference mime-type CDATA #REQUIRED> +<!ATTLIST media-reference coding CDATA #IMPLIED> +<!ATTLIST media-reference time CDATA #IMPLIED> +<!ATTLIST media-reference time-unit-of-measure CDATA #IMPLIED> +<!ATTLIST media-reference outcue CDATA #IMPLIED> +<!ATTLIST media-reference source-credit CDATA #IMPLIED> +<!ATTLIST media-reference copyright CDATA #IMPLIED> +<!ATTLIST media-reference alternate-text CDATA #IMPLIED> +<!ATTLIST media-reference height NMTOKEN #IMPLIED> +<!ATTLIST media-reference width NMTOKEN #IMPLIED> +<!ATTLIST media-reference units (pixels) "pixels"> +<!ATTLIST media-reference imagemap CDATA #IMPLIED> +<!ATTLIST media-reference noflow (noflow) #IMPLIED> +<!ELEMENT media-metadata EMPTY> +<!ATTLIST media-metadata id ID #IMPLIED> +<!ATTLIST media-metadata class NMTOKENS #IMPLIED> +<!ATTLIST media-metadata style CDATA #IMPLIED> +<!ATTLIST media-metadata lang NMTOKEN #IMPLIED> +<!ATTLIST media-metadata dir (ltr | rtl) #IMPLIED> +<!ATTLIST media-metadata name CDATA #REQUIRED> +<!ATTLIST media-metadata value CDATA #IMPLIED> +<!ELEMENT media-object (#PCDATA)> +<!ATTLIST media-object id ID #IMPLIED> +<!ATTLIST media-object class NMTOKENS #IMPLIED> +<!ATTLIST media-object style CDATA #IMPLIED> +<!ATTLIST media-object lang NMTOKEN #IMPLIED> +<!ATTLIST media-object dir (ltr | rtl) #IMPLIED> +<!ATTLIST media-object encoding CDATA #REQUIRED> +<!ELEMENT media-caption (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*> +<!ATTLIST media-caption id ID #IMPLIED> +<!ATTLIST media-caption class NMTOKENS #IMPLIED> +<!ATTLIST media-caption style CDATA #IMPLIED> +<!ATTLIST media-caption lang NMTOKEN #IMPLIED> +<!ATTLIST media-caption dir (ltr | rtl) #IMPLIED> +<!ELEMENT media-producer (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST media-producer id ID #IMPLIED> +<!ATTLIST media-producer class NMTOKENS #IMPLIED> +<!ATTLIST media-producer style CDATA #IMPLIED> +<!ATTLIST media-producer lang NMTOKEN #IMPLIED> +<!ATTLIST media-producer dir (ltr | rtl) #IMPLIED> +<!ELEMENT ol (li)+> +<!ATTLIST ol id ID #IMPLIED> +<!ATTLIST ol class NMTOKENS #IMPLIED> +<!ATTLIST ol style CDATA #IMPLIED> +<!ATTLIST ol lang NMTOKEN #IMPLIED> +<!ATTLIST ol dir (ltr | rtl) #IMPLIED> +<!ATTLIST ol continue (continue) #IMPLIED> +<!ATTLIST ol seqnum NMTOKEN #IMPLIED> +<!ATTLIST ol compact (compact) #IMPLIED> +<!ELEMENT ul (li)+> +<!ATTLIST ul id ID #IMPLIED> +<!ATTLIST ul class NMTOKENS #IMPLIED> +<!ATTLIST ul style CDATA #IMPLIED> +<!ATTLIST ul lang NMTOKEN #IMPLIED> +<!ATTLIST ul dir (ltr | rtl) #IMPLIED> +<!ATTLIST ul wrap (vert | horiz | none) "none"> +<!ATTLIST ul plain (plain) #IMPLIED> +<!ATTLIST ul dingbat ENTITY #IMPLIED> +<!ATTLIST ul src CDATA #IMPLIED> +<!ATTLIST ul md CDATA #IMPLIED> +<!ATTLIST ul compact (compact) #IMPLIED> +<!ELEMENT li (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*> +<!ATTLIST li id ID #IMPLIED> +<!ATTLIST li class NMTOKENS #IMPLIED> +<!ATTLIST li style CDATA #IMPLIED> +<!ATTLIST li lang NMTOKEN #IMPLIED> +<!ATTLIST li dir (ltr | rtl) #IMPLIED> +<!ATTLIST li dingbat ENTITY #IMPLIED> +<!ATTLIST li src CDATA #IMPLIED> +<!ATTLIST li md CDATA #IMPLIED> +<!ATTLIST li skip NMTOKEN "0"> +<!ELEMENT dl (dt | dd)+> +<!ATTLIST dl id ID #IMPLIED> +<!ATTLIST dl class NMTOKENS #IMPLIED> +<!ATTLIST dl style CDATA #IMPLIED> +<!ATTLIST dl lang NMTOKEN #IMPLIED> +<!ATTLIST dl dir (ltr | rtl) #IMPLIED> +<!ELEMENT dt (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST dt id ID #IMPLIED> +<!ATTLIST dt class NMTOKENS #IMPLIED> +<!ATTLIST dt style CDATA #IMPLIED> +<!ATTLIST dt lang NMTOKEN #IMPLIED> +<!ATTLIST dt dir (ltr | rtl) #IMPLIED> +<!ELEMENT dd (block)*> +<!ATTLIST dd id ID #IMPLIED> +<!ATTLIST dd class NMTOKENS #IMPLIED> +<!ATTLIST dd style CDATA #IMPLIED> +<!ATTLIST dd lang NMTOKEN #IMPLIED> +<!ATTLIST dd dir (ltr | rtl) #IMPLIED> +<!ELEMENT bq (block+ , credit?)*> +<!ATTLIST bq id ID #IMPLIED> +<!ATTLIST bq class NMTOKENS #IMPLIED> +<!ATTLIST bq style CDATA #IMPLIED> +<!ATTLIST bq lang NMTOKEN #IMPLIED> +<!ATTLIST bq dir (ltr | rtl) #IMPLIED> +<!ATTLIST bq nowrap (nowrap) #IMPLIED> +<!ATTLIST bq quote-source CDATA #IMPLIED> +<!ELEMENT credit (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST credit id ID #IMPLIED> +<!ATTLIST credit class NMTOKENS #IMPLIED> +<!ATTLIST credit style CDATA #IMPLIED> +<!ATTLIST credit lang NMTOKEN #IMPLIED> +<!ATTLIST credit dir (ltr | rtl) #IMPLIED> +<!ELEMENT fn (body.content)+> +<!ATTLIST fn id ID #IMPLIED> +<!ATTLIST fn class NMTOKENS #IMPLIED> +<!ATTLIST fn style CDATA #IMPLIED> +<!ATTLIST fn lang NMTOKEN #IMPLIED> +<!ATTLIST fn dir (ltr | rtl) #IMPLIED> +<!ELEMENT pre (#PCDATA)> +<!ATTLIST pre id ID #IMPLIED> +<!ELEMENT hr EMPTY> +<!ATTLIST hr id ID #IMPLIED> +<!ATTLIST hr src CDATA #IMPLIED> +<!ELEMENT datasource (#PCDATA)> +<!ATTLIST datasource id ID #IMPLIED> +<!ELEMENT caption (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*> +<!ATTLIST caption id ID #IMPLIED> +<!ATTLIST caption class NMTOKENS #IMPLIED> +<!ATTLIST caption style CDATA #IMPLIED> +<!ATTLIST caption lang NMTOKEN #IMPLIED> +<!ATTLIST caption dir (ltr | rtl) #IMPLIED> +<!ATTLIST caption align (top | bottom | left | right) #IMPLIED> +<!ELEMENT col EMPTY> +<!ATTLIST col id ID #IMPLIED> +<!ATTLIST col class NMTOKENS #IMPLIED> +<!ATTLIST col style CDATA #IMPLIED> +<!ATTLIST col lang NMTOKEN #IMPLIED> +<!ATTLIST col dir (ltr | rtl) #IMPLIED> +<!ATTLIST col span NMTOKEN "1"> +<!ATTLIST col width CDATA #IMPLIED> +<!ATTLIST col align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST col char CDATA #IMPLIED> +<!ATTLIST col charoff CDATA #IMPLIED> +<!ATTLIST col valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT colgroup (col)+> +<!ATTLIST colgroup id ID #IMPLIED> +<!ATTLIST colgroup class NMTOKENS #IMPLIED> +<!ATTLIST colgroup style CDATA #IMPLIED> +<!ATTLIST colgroup lang NMTOKEN #IMPLIED> +<!ATTLIST colgroup dir (ltr | rtl) #IMPLIED> +<!ATTLIST colgroup align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST colgroup char CDATA #IMPLIED> +<!ATTLIST colgroup charoff CDATA #IMPLIED> +<!ATTLIST colgroup valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT thead (tr)+> +<!ATTLIST thead id ID #IMPLIED> +<!ATTLIST thead class NMTOKENS #IMPLIED> +<!ATTLIST thead style CDATA #IMPLIED> +<!ATTLIST thead lang NMTOKEN #IMPLIED> +<!ATTLIST thead dir (ltr | rtl) #IMPLIED> +<!ATTLIST thead align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST thead char CDATA #IMPLIED> +<!ATTLIST thead charoff CDATA #IMPLIED> +<!ATTLIST thead valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT tbody (tr)+> +<!ATTLIST tbody id ID #IMPLIED> +<!ATTLIST tbody class NMTOKENS #IMPLIED> +<!ATTLIST tbody style CDATA #IMPLIED> +<!ATTLIST tbody lang NMTOKEN #IMPLIED> +<!ATTLIST tbody dir (ltr | rtl) #IMPLIED> +<!ATTLIST tbody align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST tbody char CDATA #IMPLIED> +<!ATTLIST tbody charoff CDATA #IMPLIED> +<!ATTLIST tbody valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT tfoot (tr)+> +<!ATTLIST tfoot id ID #IMPLIED> +<!ATTLIST tfoot class NMTOKENS #IMPLIED> +<!ATTLIST tfoot style CDATA #IMPLIED> +<!ATTLIST tfoot lang NMTOKEN #IMPLIED> +<!ATTLIST tfoot dir (ltr | rtl) #IMPLIED> +<!ATTLIST tfoot align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST tfoot char CDATA #IMPLIED> +<!ATTLIST tfoot charoff CDATA #IMPLIED> +<!ATTLIST tfoot valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT tr (th | td)+> +<!ATTLIST tr id ID #IMPLIED> +<!ATTLIST tr class NMTOKENS #IMPLIED> +<!ATTLIST tr style CDATA #IMPLIED> +<!ATTLIST tr lang NMTOKEN #IMPLIED> +<!ATTLIST tr dir (ltr | rtl) #IMPLIED> +<!ATTLIST tr align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST tr char CDATA #IMPLIED> +<!ATTLIST tr charoff CDATA #IMPLIED> +<!ATTLIST tr valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT th (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*> +<!ATTLIST th id ID #IMPLIED> +<!ATTLIST th class NMTOKENS #IMPLIED> +<!ATTLIST th style CDATA #IMPLIED> +<!ATTLIST th lang NMTOKEN #IMPLIED> +<!ATTLIST th dir (ltr | rtl) #IMPLIED> +<!ATTLIST th axis CDATA #IMPLIED> +<!ATTLIST th axes CDATA #IMPLIED> +<!ATTLIST th nowrap (nowrap) #IMPLIED> +<!ATTLIST th rowspan NMTOKEN "1"> +<!ATTLIST th colspan NMTOKEN "1"> +<!ATTLIST th align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST th char CDATA #IMPLIED> +<!ATTLIST th charoff CDATA #IMPLIED> +<!ATTLIST th valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT td (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q | p | hl2 | table | media | ol | ul | dl | bq | fn | note | pre | hr)*> +<!ATTLIST td id ID #IMPLIED> +<!ATTLIST td class NMTOKENS #IMPLIED> +<!ATTLIST td style CDATA #IMPLIED> +<!ATTLIST td lang NMTOKEN #IMPLIED> +<!ATTLIST td dir (ltr | rtl) #IMPLIED> +<!ATTLIST td axis CDATA #IMPLIED> +<!ATTLIST td axes CDATA #IMPLIED> +<!ATTLIST td nowrap (nowrap) #IMPLIED> +<!ATTLIST td rowspan NMTOKEN "1"> +<!ATTLIST td colspan NMTOKEN "1"> +<!ATTLIST td align (left | center | right | justify | char) #IMPLIED> +<!ATTLIST td char CDATA #IMPLIED> +<!ATTLIST td charoff CDATA #IMPLIED> +<!ATTLIST td valign (top | middle | bottom | baseline) #IMPLIED> +<!ELEMENT chron (#PCDATA)> +<!ATTLIST chron id ID #IMPLIED> +<!ATTLIST chron norm CDATA #IMPLIED> +<!ELEMENT event (#PCDATA | alt-code)*> +<!ATTLIST event id ID #IMPLIED> +<!ATTLIST event start-date CDATA #IMPLIED> +<!ATTLIST event end-date CDATA #IMPLIED> +<!ATTLIST event idsrc CDATA #REQUIRED> +<!ATTLIST event value CDATA #REQUIRED> +<!ELEMENT function (#PCDATA | alt-code)*> +<!ATTLIST function id ID #IMPLIED> +<!ATTLIST function idsrc CDATA #REQUIRED> +<!ATTLIST function value CDATA #REQUIRED> +<!ELEMENT location (#PCDATA | sublocation | city | state | region | country | alt-code)*> +<!ATTLIST location id ID #IMPLIED> +<!ATTLIST location location-code CDATA #IMPLIED> +<!ATTLIST location code-source CDATA #IMPLIED> +<!ELEMENT sublocation (#PCDATA | alt-code)*> +<!ATTLIST sublocation id ID #IMPLIED> +<!ATTLIST sublocation location-code CDATA #IMPLIED> +<!ATTLIST sublocation code-source CDATA #IMPLIED> +<!ELEMENT city (#PCDATA | alt-code)*> +<!ATTLIST city id ID #IMPLIED> +<!ATTLIST city city-code CDATA #IMPLIED> +<!ATTLIST city code-source CDATA #IMPLIED> +<!ELEMENT state (#PCDATA | alt-code)*> +<!ATTLIST state id ID #IMPLIED> +<!ATTLIST state state-code CDATA #IMPLIED> +<!ATTLIST state code-source CDATA #IMPLIED> +<!ELEMENT region (#PCDATA | alt-code)*> +<!ATTLIST region id ID #IMPLIED> +<!ATTLIST region region-code CDATA #IMPLIED> +<!ATTLIST region code-source CDATA #IMPLIED> +<!ELEMENT country (#PCDATA | alt-code)*> +<!ATTLIST country id ID #IMPLIED> +<!ATTLIST country iso-cc CDATA #IMPLIED> +<!ELEMENT money (#PCDATA)> +<!ATTLIST money id ID #IMPLIED> +<!ATTLIST money unit CDATA #IMPLIED> +<!ATTLIST money date CDATA #IMPLIED> +<!ELEMENT num (#PCDATA | frac | sub | sup)*> +<!ATTLIST num id ID #IMPLIED> +<!ATTLIST num units CDATA #IMPLIED> +<!ATTLIST num decimal-ch CDATA #IMPLIED> +<!ATTLIST num thousands-ch CDATA #IMPLIED> +<!ELEMENT frac (numer , frac-sep? , denom)> +<!ATTLIST frac id ID #IMPLIED> +<!ELEMENT numer (#PCDATA)> +<!ATTLIST numer id ID #IMPLIED> +<!ELEMENT frac-sep (#PCDATA)> +<!ATTLIST frac-sep id ID #IMPLIED> +<!ELEMENT denom (#PCDATA)> +<!ATTLIST denom id ID #IMPLIED> +<!ELEMENT sub (#PCDATA)> +<!ATTLIST sub id ID #IMPLIED> +<!ATTLIST sub class NMTOKENS #IMPLIED> +<!ATTLIST sub style CDATA #IMPLIED> +<!ATTLIST sub lang NMTOKEN #IMPLIED> +<!ATTLIST sub dir (ltr | rtl) #IMPLIED> +<!ELEMENT sup (#PCDATA)> +<!ATTLIST sup id ID #IMPLIED> +<!ATTLIST sup class NMTOKENS #IMPLIED> +<!ATTLIST sup style CDATA #IMPLIED> +<!ATTLIST sup lang NMTOKEN #IMPLIED> +<!ATTLIST sup dir (ltr | rtl) #IMPLIED> +<!ELEMENT object.title (#PCDATA | alt-code)*> +<!ATTLIST object.title id ID #IMPLIED> +<!ATTLIST object.title class NMTOKENS #IMPLIED> +<!ATTLIST object.title style CDATA #IMPLIED> +<!ATTLIST object.title lang NMTOKEN #IMPLIED> +<!ATTLIST object.title dir (ltr | rtl) #IMPLIED> +<!ATTLIST object.title idsrc CDATA #REQUIRED> +<!ATTLIST object.title value CDATA #REQUIRED> +<!ELEMENT org (#PCDATA | alt-code)*> +<!ATTLIST org id ID #IMPLIED> +<!ATTLIST org idsrc CDATA #REQUIRED> +<!ATTLIST org value CDATA #REQUIRED> +<!ELEMENT alt-code EMPTY> +<!ATTLIST alt-code id ID #IMPLIED> +<!ATTLIST alt-code idsrc CDATA #REQUIRED> +<!ATTLIST alt-code value CDATA #REQUIRED> +<!ELEMENT person (#PCDATA | name.given | name.family | function | alt-code)*> +<!ATTLIST person id ID #IMPLIED> +<!ATTLIST person idsrc CDATA #REQUIRED> +<!ATTLIST person value CDATA #REQUIRED> +<!ELEMENT name.given (#PCDATA)> +<!ATTLIST name.given id ID #IMPLIED> +<!ELEMENT name.family (#PCDATA)> +<!ATTLIST name.family id ID #IMPLIED> +<!ELEMENT postaddr (addressee , delivery.point? , (postcode | delivery.office | region | country)*)> +<!ATTLIST postaddr id ID #IMPLIED> +<!ELEMENT virtloc (#PCDATA | alt-code)*> +<!ATTLIST virtloc id ID #IMPLIED> +<!ATTLIST virtloc idsrc CDATA #REQUIRED> +<!ATTLIST virtloc value CDATA #REQUIRED> +<!ELEMENT a (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST a id ID #IMPLIED> +<!ATTLIST a class NMTOKENS #IMPLIED> +<!ATTLIST a style CDATA #IMPLIED> +<!ATTLIST a lang NMTOKEN #IMPLIED> +<!ATTLIST a dir (ltr | rtl) #IMPLIED> +<!ATTLIST a href CDATA #IMPLIED> +<!ATTLIST a name CDATA #IMPLIED> +<!ATTLIST a md CDATA #IMPLIED> +<!ATTLIST a rel NMTOKEN #IMPLIED> +<!ATTLIST a rev NMTOKEN #IMPLIED> +<!ATTLIST a title CDATA #IMPLIED> +<!ATTLIST a methods NMTOKENS #IMPLIED> +<!ELEMENT br EMPTY> +<!ATTLIST br id ID #IMPLIED> +<!ELEMENT em (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST em id ID #IMPLIED> +<!ATTLIST em class NMTOKENS #IMPLIED> +<!ATTLIST em style CDATA #IMPLIED> +<!ATTLIST em lang NMTOKEN #IMPLIED> +<!ATTLIST em dir (ltr | rtl) #IMPLIED> +<!ELEMENT lang (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST lang id ID #IMPLIED> +<!ATTLIST lang class NMTOKENS #IMPLIED> +<!ATTLIST lang style CDATA #IMPLIED> +<!ATTLIST lang lang NMTOKEN #IMPLIED> +<!ATTLIST lang dir (ltr | rtl) #IMPLIED> +<!ELEMENT pronounce (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST pronounce id ID #IMPLIED> +<!ATTLIST pronounce guide CDATA #IMPLIED> +<!ATTLIST pronounce phonetic CDATA #IMPLIED> +<!ELEMENT q (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST q id ID #IMPLIED> +<!ATTLIST q class NMTOKENS #IMPLIED> +<!ATTLIST q style CDATA #IMPLIED> +<!ATTLIST q lang NMTOKEN #IMPLIED> +<!ATTLIST q dir (ltr | rtl) #IMPLIED> +<!ATTLIST q quote-source CDATA #IMPLIED> +<!ELEMENT addressee (person , function? , care.of?)> +<!ATTLIST addressee id ID #IMPLIED> +<!ELEMENT care.of (#PCDATA)> +<!ATTLIST care.of id ID #IMPLIED> +<!ELEMENT delivery.point (#PCDATA | br)*> +<!ATTLIST delivery.point id ID #IMPLIED> +<!ATTLIST delivery.point point-code CDATA #IMPLIED> +<!ATTLIST delivery.point code-source CDATA #IMPLIED> +<!ELEMENT postcode (#PCDATA)> +<!ATTLIST postcode id ID #IMPLIED> +<!ATTLIST postcode code-source CDATA #IMPLIED> +<!ELEMENT delivery.office (#PCDATA | br)*> +<!ATTLIST delivery.office id ID #IMPLIED> +<!ATTLIST delivery.office office-code CDATA #IMPLIED> +<!ATTLIST delivery.office code-source CDATA #IMPLIED> +<!ELEMENT body.end (tagline? , bibliography?)> +<!ATTLIST body.end id ID #IMPLIED> +<!ELEMENT tagline (#PCDATA | chron | copyrite | event | function | location | money | num | object.title | org | person | postaddr | virtloc | a | br | em | lang | pronounce | q)*> +<!ATTLIST tagline id ID #IMPLIED> +<!ATTLIST tagline type (std | pa | npa) "std"> +<!ELEMENT bibliography (#PCDATA)> +<!ATTLIST bibliography id ID #IMPLIED> +]> +<NewsML> + <Catalog Href="http://www.afp.com/dtd/AFPCatalog.xml"/> + <NewsEnvelope> + <DateAndTime>20011022T154508Z</DateAndTime> + </NewsEnvelope> + <NewsItem> + <Identification> + <NewsIdentifier> + <ProviderId>afp.com</ProviderId> + <DateId>20011022</DateId> + <NewsItemId>mmd--deutsch--journal--spo</NewsItemId> + <RevisionId PreviousRevision="0" Update="N">1</RevisionId> + <PublicIdentifier>urn:NewsML:afp.com:20011022:mmd--deutsch--journal--spo:1</PublicIdentifier> + </NewsIdentifier> + <NameLabel>HINTERGRUND</NameLabel> + </Identification> + <NewsManagement> + <NewsItemType FormalName="News"/> + <FirstCreated>20011022T154508Z</FirstCreated> + <ThisRevisionCreated>20011022T154508Z</ThisRevisionCreated> + <Status FormalName="Usable"/> + </NewsManagement> + <NewsComponent> + <AdministrativeMetadata> + <Provider> + <Party FormalName="AFP"/> + </Provider> + </AdministrativeMetadata> + <DescriptiveMetadata> + <Language FormalName="de"/> + </DescriptiveMetadata> + <NewsComponent> + <NewsLines> + <HeadLine>Berliner SPD führt Gespräche mit FDP und Grünen</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022154450.sq80bp9h.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>INFOGRAFIK: Das Berliner Wahlergebnis</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022113032.remo00m7.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Schwierige Koalitionsverhandlungen in Berlin</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022124314.9hv2kozk.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Die Lieblingsfarben des Kanzlers sind Rot Gelb Grün</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022134541.cmmaoim7.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>INFOGRAFIK: Wen wählt Wowereit?</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022122545.hl3z2as6.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>CDU ist auch in kommunalen Rathäusern der Verlierer</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022120205.b8sykfvu.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Gutes Abschneiden der PDS hat verschiedene Gründe</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022134159.agvne048.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Ans Regieren hat sich Klaus Wowereit gewöhnt</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021161031.1oq7qyub.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Steffel brachte CDU nicht auf Erfolgskurs</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021165007.kt9qog9m.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Sibyll Klotz: Vollblutpolitikerin mit "Berliner Schnauze"</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021184658.lctevest.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Mit Gysi muss weiter gerechnet werden</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021180441.6tpvgx0y.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Rexrodt - das Stehaufmännchen der Berliner FDP</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021165558.gujrz59m.xml"/> + </NewsComponent> + </NewsComponent> + </NewsItem> +</NewsML> diff --git a/result/valid/index.xml.err b/result/valid/index.xml.err new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/result/valid/index.xml.err diff --git a/result/valid/rss.xml b/result/valid/rss.xml index d3d1aad2..642fb808 100644 --- a/result/valid/rss.xml +++ b/result/valid/rss.xml @@ -17,7 +17,6 @@ Based on RSS DTD originally created by Lars Marius Garshol - larsga@ifi.uio.no. - $Id: rss.xml,v 1.1 2001/04/20 13:48:21 veillard Exp $ --><!ELEMENT rss (channel)> <!ATTLIST rss version CDATA #REQUIRED> diff --git a/result/valid/rss.xml.err b/result/valid/rss.xml.err index 307a8ccf..98941d02 100644 --- a/result/valid/rss.xml.err +++ b/result/valid/rss.xml.err @@ -1,3 +1,3 @@ -./test/valid/rss.xml:178: validity error: Element rss doesn't carry attribute version +./test/valid/rss.xml:177: validity error: Element rss doesn't carry attribute version </rss> ^ diff --git a/test/valid/dtds/NewsMLv1.0.dtd b/test/valid/dtds/NewsMLv1.0.dtd new file mode 100644 index 00000000..5799b298 --- /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/nitf-2-5.dtd b/test/valid/dtds/nitf-2-5.dtd new file mode 100644 index 00000000..253e6205 --- /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/index.xml b/test/valid/index.xml new file mode 100644 index 00000000..2a0e6714 --- /dev/null +++ b/test/valid/index.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE NewsML PUBLIC "urn:newsml:iptc.org:20001006:NewsMLv1.0:1" "dtds/NewsMLv1.0.dtd" [ + <!ENTITY % nitf SYSTEM "dtds/nitf-2-5.dtd"> + %nitf; +]> +<NewsML> + <Catalog Href="http://www.afp.com/dtd/AFPCatalog.xml"/> + <NewsEnvelope> + <DateAndTime>20011022T154508Z</DateAndTime> + </NewsEnvelope> + <NewsItem> + <Identification> + <NewsIdentifier> + <ProviderId>afp.com</ProviderId> + <DateId>20011022</DateId> + <NewsItemId>mmd--deutsch--journal--spo</NewsItemId> + <RevisionId PreviousRevision="0" Update="N">1</RevisionId> + <PublicIdentifier>urn:NewsML:afp.com:20011022:mmd--deutsch--journal--spo:1</PublicIdentifier> + </NewsIdentifier> + <NameLabel>HINTERGRUND</NameLabel> + </Identification> + <NewsManagement> + <NewsItemType FormalName="News"/> + <FirstCreated>20011022T154508Z</FirstCreated> + <ThisRevisionCreated>20011022T154508Z</ThisRevisionCreated> + <Status FormalName="Usable"/> + </NewsManagement> + <NewsComponent> + <AdministrativeMetadata> + <Provider> + <Party FormalName="AFP"/> + </Provider> + </AdministrativeMetadata> + <DescriptiveMetadata> + <Language FormalName="de"/> + </DescriptiveMetadata> + <NewsComponent> + <NewsLines> + <HeadLine>Berliner SPD führt Gespräche mit FDP und Grünen</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022154450.sq80bp9h.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>INFOGRAFIK: Das Berliner Wahlergebnis</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022113032.remo00m7.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Schwierige Koalitionsverhandlungen in Berlin</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022124314.9hv2kozk.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Die Lieblingsfarben des Kanzlers sind Rot Gelb Grün</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022134541.cmmaoim7.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>INFOGRAFIK: Wen wählt Wowereit?</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022122545.hl3z2as6.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>CDU ist auch in kommunalen Rathäusern der Verlierer</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022120205.b8sykfvu.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Gutes Abschneiden der PDS hat verschiedene Gründe</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011022134159.agvne048.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Ans Regieren hat sich Klaus Wowereit gewöhnt</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021161031.1oq7qyub.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Steffel brachte CDU nicht auf Erfolgskurs</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021165007.kt9qog9m.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Sibyll Klotz: Vollblutpolitikerin mit "Berliner Schnauze"</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021184658.lctevest.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Mit Gysi muss weiter gerechnet werden</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021180441.6tpvgx0y.xml"/> + </NewsComponent> + <NewsComponent> + <NewsLines> + <HeadLine>Rexrodt - das Stehaufmännchen der Berliner FDP</HeadLine> + </NewsLines> + <NewsItemRef NewsItem="011021165558.gujrz59m.xml"/> + </NewsComponent> + </NewsComponent> + </NewsItem> +</NewsML> diff --git a/test/valid/rss.xml b/test/valid/rss.xml index 429e0fe6..5d6102d8 100644 --- a/test/valid/rss.xml +++ b/test/valid/rss.xml @@ -17,7 +17,6 @@ Based on RSS DTD originally created by Lars Marius Garshol - larsga@ifi.uio.no. - $Id: rss-0.91.dtd,v 1.1 1999/07/25 07:59:31 danda Exp $ --> <!ELEMENT rss (channel)> |
