Thursday, June 9, 2005, 5:51:57 PM, Tim Bray wrote:
> On Jun 9, 2005, at 9:22 AM, David Powell wrote: >> Firstly, there are some mismatches between the RelaxNG grammar and the >> specification text. I know that the RelaxNG grammar isn't >> normative; but this >> doesn't mean that it can be contradictory: > I've asked Paul, and in fact we can fix typos and outright bugs later > on in the process. If you're right about the Relax mismatch (Rob? > Norm?) then let's fix that. > On the other hand, a general re-organization of section 6 is right > out; it is our finding that the format-09 draft (modulo errors) > reflects the rough consensus of the WG. If you disagree, the IETF > provides appeal procedures. Last week I thought about how to rework Section 6. Although some of this reworking might be not acceptable now, I'll post it anyway. It might be that there are some actual ambiguities in the current draft; if so, then I guess that ambiguities might be considered to be "bugs", that still need fixing. It would be good if people could give section 6 a check to see that it makes sense, and that the text matched their impression. This rework itself was done fairly quickly, so it might have made some things worse, but the major changes are: 1) Namespace attributes are explicitly excluded from the attributes that determine the class of a Metadata Element. 2) Added namespace rules to section 6.4.1 and 6.4.2. 3) Added atom:source as a valid location for Metadata Elements. 4) Added paragraph about the intent of Metadata Elements. 5) Renamed 6.4 terms to "Metadata Extensions", "Simple Metadata Extensions", and "Structured Metadata Extensions" for uniformity. 6) Added explicit definition of the term "Atom Vocabulary". 7) Moved sub-sections around so that the section can be read more linearly. I won't be available for the next week to discuss this btw. == Dave's version of Section 6 == 6. Extending Atom 6.1 Extensions To the Atom Vocabulary Future versions of Atom could add new elements to the Atom namespace, and new attributes, in the default namespace, to existing Atom-namespaced elements. Software written to conform to this version of the specification will not be able to process such markup correctly and, in fact, will not be able to distinguish it from markup error. For the purposes of this discussion, unrecognized markup from the Atom vocabulary will be considered "foreign markup". 6.2 Extensions From Non-Atom Vocabularies This specification describes Atom's XML markup vocabulary. Markup from other vocabularies ("foreign markup") can be used in an Atom document. Note that the atom:content element is designed to support the inclusion of arbitrary foreign markup. 6.2.1 Metadata Extensions Child elements of atom:entry, atom:feed, atom:source, and Person constructs are considered Metadata Extensions, and are described below. Child elements of Person constructs are considered to apply to the construct. Atom defines two classes of Metadata Extensions. Simple Metadata Extensions are designed to be easier for simpler implementations to support. To prevent sporadic support of an extension by implementations that only support Simple Metadata Extensions, extension authors SHOULD ensure that an extension is either a Simple Metadata Extension, or a Structured Metadata Extension for all of the extension's possible values. 6.2.1.1 Simple Metadata Extensions A Simple Metadata Extension element MUST NOT have any child elements or attributes, other than namespace declarations. It MUST be namespaced-qualified, and MUST be defined outside of the Atom namespace. The element MAY contain character data, or be empty. Simple Metadata Extensions are not Language-Sensitive. simpleExtensionElement = element * - atom:* { text } The element can be interpreted as a simple property (or name/value pair) of the parent element that encloses it. The pair consisting of the namespace-URI of the element and the local name of the element can be interpreted as the name of the property. The character data content of the element can be interpreted as the value of the property. If the element is empty, then the property value can be interpreted as an empty string. 6.2.1.1 Structured Metadata Extensions The root element of a Structured Metadata Extension MUST have at least child element or attribute, other than namespace declarations. It MUST be namespace-qualified, and MUST be defined outside of the Atom namespace. It MAY have attributes, it MAY contain well-formed XML content (including character data), or it MAY be empty. Structured Metadata Extensions are Language-Sensitive. structuredExtensionElement = element * - atom:* { (attribute * { text }+, (text|anyElement)*) | (attribute * { text }*, (text?, anyElement+, (text|anyElement)*)) } The structure of a Structured Metadata Extension, including the order of its child elements, could be significant. This specification does not provide an interpretation of a Structured Metadata Extension. The syntax of the XML contained in the element, and an interpretation of how the element relates to its containing element is defined by the specification of the Atom extension. 6.2.2 Unknown Foreign Markup Atom allows foreign markup anywhere in an Atom document, except where it is explicitly forbidden. Markup in other locations, such as namespaced attributes, and child elements of atom-namespaced elements (for those elements that this specification does not already define a meaning for), are termed Unknown Foreign Markup. The role of Unknown Foreign Markup is undefined by this specification. 6.3 Processing Foreign Markup Atom Processors which encounter foreign markup in a location that is legal according to this specification MUST NOT stop processing or signal an error. It might be the case that the Atom Processor is able to process the foreign markup correctly and does so. Otherwise, such markup is termed "unknown foreign markup". When unknown foreign markup is encountered as a child of atom:entry, atom:feed, atom:source or a Person construct, Atom Processors MAY bypass the markup and any textual content and MUST NOT change their behavior as a result of the markup's presence. When unknown foreign markup is encountered in a Text Contruct or atom:content element, software SHOULD ignore the markup and process any text content of foreign elements as though the surrounding markup were not present. -- Dave