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]


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


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


Powered by eList eXpress LLC