OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

relax-ng message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Subject: Re: Example [Was: Two things to strengthen the spec]


A few comments:

1. I don't think it's necessary to show the simplified schema after each 
stage of simplification.  I think it's sufficient to show the result after 
all simplifications are performed.

2. In section 2 I would describe the data model in words rather than 
introducing any notation at that point. I would wait until the example at 
the end of section 6 to represent the instance of the data model formally 
using the notation that is introduced in the earlier subsections of section 
6.

3. I see that you have addressed the problem of extraneous whitespace by 
adopting a special formatting style that puts the indentation in the tag. 
Technically, that's a perfectly reasonable approach, but I wonder whether 
readers won't be disconcerted by this.

--On Tuesday, July 31, 2001 5:38 PM +0900 Murata Makoto 
<mura034@attglobal.net> wrote:

> I revised my example and sketched subsections of Sections 2, 3, 4, 6,
> and 7.  Before XMLizing these subsections, please let me know if
> they deserve the length.
>
> <section>
> <title>Example</title>
>
> <para>Throughout this specification, we use the following XML document
> as an example.</para>
>
> <programlisting>
> <?xml version="1.0"?>
> <foo xmlns=""
>    ><pre1:bar1 xmlns:pre1="http://n1"
>   /><pre2:bar2 xmlns:pre2="http://n2"
>   /></foo>
>
> Note that the root element has two child elements but has no child
> strings.
>
> This document is represented by an element foo containing two child
> elements.
>
> We use the following notation:
>
> (...)
>   represents a set
>
> {...}
>   rrepresents a sequence
>
> prefix ->  uri
>   represents a prefix-namespace pair, or the default
>   namespace when the prefix is the empty string.
>
> element(n,cx, a, m)
>   an element with name n, context cx, attributes a and mixed
>   sequence m as children
>
> context(b, pair1, pair2, ....)
>   a context with base uri b and a mapping given by
>   pair1, pair2, ....
>
> Let cx0 be the context for the root element.  We assume that uri1 is
> the base URI of this document.  Then,
>
> 	cx0 = context(uri1, ""->"")
>
> The root element e0 is represented by
>
> 	element(name("", foo), cx0, {}, {e1, e2})
>
> where e1 and e2 represent the first and second child element,
> respectively.
>
> Let cx1 and cx2 be contexts of e1 and e2.  Then,
>
> 	cx1 = context(uri1, "" -> "", pre1 -> "http://n1")
>
> and
>
> 	cx2 = context(uri1, "" -> "", pre2 -> "http://n2").
>
>
> e1 is represented by by
>
> 	element(name("http://n1", bar1), cx1, {}, {})
>
> and e2 is represented by by
>
> 	element(name("http://n2", bar2), cx2, {}, {})
>
>
> 3.2 Example
>
> Here is an example schema.
>
> ex10.rng
>
> 4.20 Example
>
> We consider how a schema in 3.2 is normalized, but we use the XML
> instance syntax for convenience.  We assume that unprefixed
> tags are in the namespace "http://relaxng.org/ns/structure/0.9".
>
> 4.20.1 Result of 4.1
>
> ex11.rng
>
> 4.20.2 Result of 4.2
>
> <element name="foo" ns=""
>    ><element ns="http://n1" name="bar1"
>       ><empty
>   /></element
>    ><element ns="http://n2" name="bar2"
>       ><empty
>   /></element
>> </element>
>
>
> 4.20.3 Result of 4.3, 4.4, 4.5, and 4.6
>
> These steps do not apply to this example.
>
> 4.20.4 Result of 4.7
>
> <element ns=""
>   ><name>foo</name
>    ><element ns="http://n1"
>       ><name>bar1</name
>       ><empty
>   /></element
>    ><element ns="http://n2"
>       ><name>bar2</name
>       ><empty
>   /></element
>> </element>
>
>
> 4.20.5 Result of 4.8
>
> <element
>   ><name ns="">foo</name
>    ><element
>       ><name ns="http://n1">bar1</name
>       ><empty
>   /></element
>    ><element
>       ><name ns="http://n2">bar2</name
>       ><empty
>   /></element
>> </element>
>
>
> 4.20.6 Result of 4.9 and 4.10
>
> These steps do not apply to this example.
>
> 4.20.7 Result of 4.11
>
> <element
>   ><name ns="">foo</name
>   ><group
>     ><element
>       ><name ns="http://n1">bar1</name
>       ><empty
>    /></element
>     ><element
>       ><name ns="http://n2">bar2</name
>       ><empty
>    /></element
>   ></group
>> </element>
>
>
> 4.20.8 Result of 4.12, 4.13, 4.14, and 4.15
>
> These steps do not apply to this example.
>
> 4.20.9 Result of 4.16
>
> <grammar
>   ><start
>     ><element
>       ><name ns="">foo</name
>       ><group
>         ><element
>           ><name ns="http://n1">bar1</name
>           ><empty
>        /></element
>         ><element
>           ><name ns="http://n2">bar2</name
>           ><empty
>        /></element
>       ></group
>     ></element
>   ></start
>> </grammar>
>
>
> 4.20.10 Result of 4.17
>
> <grammar
>   ><start
>     ><element
>       ><name ns="">foo</name
>       ><group
>         ><ref name="bar1"
>        /><ref name="bar2"
>       /></group
>     ></element
>   ></start
>
>   ><define name="bar1"
>     ><element
>       ><name ns="http://n1">bar1</name
>       ><empty
>    /></element
>   ></define
>
>   ><define name="bar2"
>     ><element
>       ><name ns="http://n2">bar2</name
>       ><empty
>    /></element
>   ></define
>> </grammar>
>
> 4.20.11 Result of 4.18 and 4.19
>
> These steps do not apply to this example.
>
> 6.5 Example
>
> Let nameclass nc1 = <name ns="http://n1">bar1</name> and
> nameclass nc2 = <name ns="http://n2">bar2</name>.
>
> Then, by the inference rule (name) in 6.1, we have
>
> 	name("http://n1", "bar1") in nc1
>
> and
> 	name("http://n2", "bar2") in nc2 .
>
> By the inference rule (empty) in 6.2.3, we have
>
> 	cx1 |= {};() = <empty/> => {};{}
>
> and
>
> 	cx2 |= {};() = <empty/> => {};{}
>
> Since
>
> 	deref(bar1) =
> 	  <element>
> 	    <name ns="http://n1">bar1</name>
> 	    <empty/>
> 	  </element>
>
> we have
>
> 	cx0 |-   {}; e1 =~ <ref name="bar1"/> => {}; {}
>
> by applying the inference rule (element) in 6.2.8.   Note that
> we have chosen cx0, since any context is allowed.
>
> Likewise, we have
>
> 	cx0 |-   {}; e2 =~ <ref name="bar2"/>  => {}; {}
>
> By the inference rule (group) in 6.2.1, we have
>
> 	cx0 |-   {}; (e1, e2)
> 	           =~ <group><ref name="bar1"/><ref name="bar2"/></group>
> 			=> {}; {}
>
> Since
>
> deref(foo) = <element><name>foo</name>
>               <group>
>                 <ref name="bar1"/>
>                 <ref name="bar2"/>
>               </group>
>              </element>
> ,
>
> we have
>
> 	cx3 |- {}; element(name("", foo), cx0, {}, {e1, e2}) =~
>                      <ref name="foo"/> => {}; {}
>
> by the the inference rule (element) in 6.2.8 again.  Here
> cx3 is an arbitrary context.
>
> Finally, since start() = <ref name="foo"/>, we can apply the
> inference rule (valid) in 6.4 and obtain
>
> 	valid(e0)
>
>
> 7.5 Example
>
> Observe that the normalized schema in 4.20 satisfies all
> restrictions in 7.1 thorough 7.4.
>
>
> ----
> Murata Makoto  mura034@attglobal.net
>
> ------------------------------------------------------------------
> To unsubscribe from this elist send a message with the single word
> "unsubscribe" in the body to: relax-ng-request@lists.oasis-open.org
>
>






[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Powered by eList eXpress LLC