Subject: RE: Issue: XML_LANG_CLARIFY

From: "Julian F. Reschke" <[email-masked]>
Date: Tue, 19 Jun 2001 17:00:00 +0200

Hi,

I've spend some more time thinking about this issue, and actually
implementing my proposal in our server.

Text was added to section 4.4 which tries to define what a property value
is, using the W3C recommandations "Namespaces in XML" and "Canonical XML" as
base.

BTW: I think the first sentence "...when expressed in XML MUST be well
formed." is misleading. In WebDAV, there's no way to express the value of a
property other than in XML, so it will by definition be well-formed.

Feedback appreciated,

Julian
--

4.4 Property Values

   The value of a property when expressed in XML MUST be well formed.

   XML has been chosen because it is a flexible, self-describing,
   structured data format that supports rich schema definitions, and
   because of its support for multiple character sets.  XML's self-
   describing nature allows any property's value to be extended by
   adding new elements.  Older clients will not break when they
   encounter extensions because they will still have the data specified
   in the original schema and will ignore elements they do not
   understand.  XML's support for multiple character sets allows any
   human-readable property to be encoded and read in a character set
   familiar to the user.  XML's support for multiple human languages,
   using the "xml:lang" attribute, handles cases where the same
   character set is employed by multiple human languages.

(added text starts here)

   The value of a property is defined in terms of the W3C
   recommendations "XML Information Set" [XML-INFOSET] and "Canonical
   XML" [RFC3076].  It consists of a subset of the property element's
   information items, of which some are optional (that is, a server MAY
   choose not to persist them).

   [prefix] (optional) The namespace prefix part of the element-type
      name.

   [children] (required) An ordered list of child information items, in
      document order.  Note that the full Information Set of each child
      is part of the value.

   [attributes] (required) An unordered set of attribute information
      items.

   [namespace attributes] (optional) An unordered set of attribute
      information items, one for each of the namespace declarations.

   [in-scope namespaces] (optional) An unordered set of namespace
      information items, one for each of the namespaces in effect for
      this element.

   [base URI] (optional) The base URI of the element, as computed by the
      method of XML Base.

   In addition, attributes from the XML namespace
   (http://www.w3.org/XML/1998/namespace) are inherited by means of
   section 2.4 of [RFC3076]:

   xml:lang (required)

   other attributes from the XML namespace (optional)

4.4.1 Examples for property values

   Set request:

     <propertyupdate
   	  xmlns="DAV:" xmlns:foo="http://foo.bar.com"
xmlns:x="http://www.w3.org/XML/1998/namespace"
   		xml:lang="en" x:space="preserve">
   	  <set>
   	    <foo:bar attr="test">xyz</foo:bar>
   	  </set>
     </propertyupdate>

    Inheritance of attributes from XML namespaces as defined in section
   2.4 of [RFC3076]:

     <propertyupdate
   	  xmlns="DAV:" xmlns:foo="http://foo.bar.com"
xmlns:="http://www.w3.org/XML/1998/namespace"
   		xml:lang="en" x:space="preserve">
   	  <set>
   	    <foo:bar attr="test" xml:lang="en" x:space="preserve">xyz</foo:bar>
   	  </set>
     </propertyupdate>

   The value of the property named ("http://foo.bar.com", "bar") thus
   is:

   [prefix] "foo"

   [children] 3 character information items

   [attributes] attribute information items, describing "attr",
      "xml:lang" and "x:space"

   [namespace attributes] (empty)

   [in-scope namespaces] the namespace information items (no value,
      "DAV:"), ("foo", "http://foo.bar.com"), ("x",
      "http://www.w3.org/XML/1998/namespace"), ("xml",
      "http://www.w3.org/XML/1998/namespace")

   [base URI] no value

   Removal of optional information:

     <propertyupdate
   	  xmlns="DAV:" xmlns:foo="http://foo.bar.com"
xmlns:x="http://www.w3.org/XML/1998/namespace"
   		xml:lang="en" x:space="preserve">
   	  <set>
   	    <foo:bar attr="test" xml:lang="en">xyz</foo:bar>
   	  </set>
     </propertyupdate>

   The value of the property named ("http://foo.bar.com", "bar") then
   becomes:

   [children] 3 character information items

   [attributes] attribute information item, describing "attr" and
      "xml:lang"