- From: <noah_mendelsohn@us.ibm.com>
- Date: Wed, 24 Dec 2003 19:00:04 -0500
- To: Hans Teijgeler <hans.teijgeler@quicknet.nl>
- Cc: "Henry S. Thompson" <ht@cogsci.ed.ac.uk>, Morgane Erenati <morgane.erenati@wanadoo.fr>, xmlschema-dev@w3.org
Let me take a crack at answering, though neither Henry or I speak
officially for the schema workgroup in this case.
>> What is the official party line?
The Schema Recommendation says both features are there, neither is
deprecated, and you are welcome to use either or both. The correct
validation behavior is as specified in the Recommendation, and if that
proves in any way ambiguous, you should file a bug report. I think it's
straightforward: all the constraints you declare must be met for the
instance to be considered valid.
The only warning I see is at [1] where it says:
"For compatibility (see Terminology (§1.4)) this datatype should be used
only on attributes"
You quote the Altova help desk as saying:
"ID/IDREF datatypes are present in XML Schema only for compatibility
reasons with respect to DTDs. They should NOT be used under normal
circumstances, except when the goal is to model behavior of an existing
DTD."
I don't quite agree. They are there to provide a facility similar to that
available in DTDs, and you should use them whenever they are the best
model to meet your needs. If a facility is to be avoided the
Recommendation would say so, and in this case it doesn't.
Note that ID/IDREF are structurally different than key/keyref. The former
are types: you can't have an attribute which is simultaneously typed as
an integer and an ID. On the other hand, a given attribute or element can
participate is a key or keyref in many relationships simultaneously, and
indeed both elements and attributes are supported. You may or may not
feel in certain circumstances that typing an attribute as an IDREF more
directly models your intentions. It's fairly common to see this done in
situations where graphs are being encoded into XML, as being a reference
is inherent in the nature of an attribute representing a graph edge. Such
usage is not in general limited to cases where there was a pre-existing
DTD. It's just a matter of taste. It certainly is true that for many
purposes key/keyref is more powerful and appropriate.
It is also true that I don't thing the Schema WG paid great attention to
the convenience of using the two to constrain the same data at the same
time. So, if it proves inconvenient or confusing to do so, don't. On
the other hand, I think the recommendation is fairly clear that you can
use both sets of constraint mechanisms separately or together, and all
declared constraints must be met for the document to be valid.
By the way, there has been a simmering debate in the W3C about a range off
issues relating to mechanisms of this sort. I can't easily reproduce it
here, but a search of the TAG mailing list archives should turn it up if
you're interested. I hope this helps.
Noah
[1] http://www.w3.org/TR/xmlschema-2/#IDREF
--------------------------------------
Noah Mendelsohn
IBM Corporation
One Rogers Street
Cambridge, MA 02142
1-617-693-4036
--------------------------------------
Hans Teijgeler <hans.teijgeler@quicknet.nl>
Sent by: xmlschema-dev-request@w3.org
12/24/03 05:11 PM
To: "Henry S. Thompson" <ht@cogsci.ed.ac.uk>
cc: Morgane Erenati <morgane.erenati@wanadoo.fr>,
xmlschema-dev@w3.org, (bcc: Noah Mendelsohn/Cambridge/IBM)
Subject: Re: IDREFS types in schemas
Dear Henry,
On Dec. 4th 2002 a person of the Altova (=Spy) helpdesk wrote me:
QUOTE
ID/IDREF datatypes are present in XML Schema only for compatibility
reasons with
respect to DTDs. They should NOT be used under normal
circumstances, except when the goal is to model behavior of an existing
DTD.
Specifically they should NEVER be used together with key/keyref as
this will create total confusion, because now you have two separate
mechanisms
trying to do the same thing mixed together with weird
consequences.
UNQUOTE
I do not sense that from your reply below. What is the official party
line?
Regards,
Hans
==================================
"Henry S. Thompson" wrote:
> xs:ID (I think that's what you want for inp), xs:IDREF and xs:IDREFS
> function the same as they do in DTDs -- see any introductory XML book
> for details.
>
> Something like
>
> <xs:element name="GInP">
> <xs:complexType>
> <xs:sequence>
> . . .
> </xs:sequence>
> <xs:attribute name="inp" type="xs:ID" use="required"/>
> </xs:complexType>
> </xs:element>
>
> <xs:element name="Correspondance">
> <xs:complexType>
> <xs:sequence>
> . . .
> </xs:sequence>
> <xs:attribute name="corresplist" type="xs:IDREFS"/>
> </xs:complexType>
> </xs:element>
>
> or maybe I have the attributes on the wrong elements, I wasn't sure
> from your description.
>
> See the Primer [1] for an overall introduction to elements and types,
> and also the more powerful schema-native key and keyref.
>
> ht
>
> [1] http://www.w3.org/TR/xmlschema-0/
> --
> Henry S. Thompson, HCRC Language Technology Group, University of
Edinburgh
> Half-time member of W3C Team
> 2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
> Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
> URL: http://www.ltg.ed.ac.uk/~ht/
> [mail really from me _always_ has this .sig -- mail without it is
forged spam]
Received on Wednesday, 24 December 2003 19:05:38 UTC