[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Re: Example [Was: Two things to strengthen the spec]
Michael Fitzgerald wrote:
> OK. James and Makoto are the doorkeepers for the spec. I was merely leaning
> on the doorbell. I shall relent.
Oh, please don't give up easily!
I have created an example. It can be an informative appendix of the specification.
How do you feel about this?
1) An instance document in the XML syntax
<?xml version="1.0"?>
<foo xmlns=""
><pre1:bar1 xmlns:pre1="http://n1"
/><pre2:bar2 xmlns:pre2="http://n2"
/></foo>
Note: The root element has two child elements but has no
child strings.
3) This instance document in the data model
This document is represented by an element foo
containing two child elements.
The root element e0 is represented by
element(name("", foo), cx0, {}, {e1, e2}),
where cx0 is a context {"" -> ""} and e1 (e2) represent the first
(resp., second) child element.
e1
element(name("http://n1", bar1), cx1, {}, {})
e2
element(name("http://n2", bar2), cx2, {}, {})
where cx1 and cx2 are contexts {"" -> "", pre1 -> "http://n1"} and
{"" -> "", pre2 -> "http://n2"}, respectively. (We omit the base
URI in this example.)
3) schema
This grammar is normalized as defined in Section 5 and satisfies the
restrictions in Section 7.
<grammar ns="" xmlns="http://relaxng.org/ns/structure/0.9">
<start>
<ref name="foo"/>
</start>
<define name="foo">
<element>
<name>foo</name>
<group>
<ref name="bar1"/>
<ref name="bar2"/>
</group>
</element>
</define>
<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) Validation
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)
Cheers,
Makoto
Internet: mura034@attglobal.net
Nifty: VEQ00625
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC