- From: Mary Fernandez <mff@research.att.com>
- Date: 04 Feb 2004 10:59:15 -0500
- To: public-qt-comments@w3.org
The following issue was identified during formal definition of
SequenceType matching. Resolution of this issue is necessary to
complete closure of Issue 559 (New Sequence Type needs to be fully
implemented in Formal Semantics).
Current status:
1. The XQuery type system is based on XML Schema.
2. Section 2.4.4.3 Matching an ElementTest and an Element Node, point 2
states that:
a. element(ElementName, TypeName) matches a given element node if
the name of the element node matches ElementName or matches the
name of an element in a substitution group headed by an element
with the name ElementName [if such a head element exists]
b. type-matches(TypeName, AT) is true, where AT is the type of the
given element node.
3. To express a sequence type in the XQuery type system, it should
correspond to some valid XML Schema structure. In XML Schema
terminology, the sequence type syntax element(ElementName,TypeName)
represents a new local element ElementName in the substitution
group of a global element with the *same* ElementName, and with
type TypeName.
In XML Schema, you might express this sequence type as:
<xs:element name="ElementName" substitutionGroup="ElementName"
type="TypeName"/>
Problem 1:
XML Schema requires that all members of a substitution group be
globally declared, therefore the above XML Schema type is invalid
and thus there is no valid XQuery type expression that represents
the sequence type element(ElementName, TypeName).
Problem 2:
Even if we permitted such a type in the XQuery type system, another
problem arises.
XML Schema (and hence the XQuery type system) requires the type name
of a substitution group member to be derived from the type name of
the head of the substitution group. This constraint is not enforced
by sequence-type matching, and therefore it is out of the scope of
XML Schema and our type system.
Because the current semantics of element(ElementName, TypeName)
cannot be expressed in the XQuery type system, any example based on
it is potentially unsound. To illustrate, consider the following
XML Schema structures:
An element person of type Person:
define element person of type Person
define type Person {
element manager of type xs:string,
}
A type Company:
define type Company {
element ticker of type xs:string
}
and consider the sequence type:
element(person, Company)
There is no corresponding XML Schema or XQuery type for this
sequence type, i.e., the following is invalid, because type Company
is _not_ derived from type Person:
<xs:element name="person" substitutionGroup="person"
type="Company"/>
Consequence: we do not know how to map this sequence type into the
XQuery type system and therefore cannot provide a static semantics
for it.
Possible solution 1: enforce the XML Schema's type-derivation
constraint.
Possible solution 2: treat element(person,Company) as the following
local XML Schema element:
<xs:element name="person" type="Company"/>
which is simple, but excludes substitution groups from the semantics.
--
Mary Fernandez <mff@research.att.com>
AT&T Labs - Research
Received on Wednesday, 4 February 2004 10:57:25 UTC