re: xml schema question

Schema Part 1 says: "We have not so far seen any need to reconstruct the 
XML 1.0 notion of root."

There have been several questions on this subject, however I do not fully 
understand the reasons why Schema does not support the restriction of 
allowable root elements within an instance. It seems to me a Schema could 
very well function as a kind of digital "contract" between parties which 
exchange documents. For instance, a company po.com could issue a Schema 
po.xsd, effectively saying to its customers: "If you send us a purchase 
order which is schema valid with respect to po.xsd, then that will be a 
purchase order which we can process". Of course, po.com would not want to 
receive the purchase order Helena Cavanagh describes:

<?xml version="1.0"?>
<comment>Is this possible?</comment>

The Schema author could prohibit this by making "comment" a non-global 
element. However, there could be other design reasons to make "comment" a 
global element: the Schema author might want to have "comment" available 
for use in content models throughout po.xsd. Let's suppose the Schema 
author wants to keep "comment" global.

Henry Thompson writes in response to Helena:

> With respect to root/document element, XML 1.0 doesn't give you this
> facility (in DTDs) -- XML Schema does, in that chapter 7 describes how
> to invoke schema validation specifying the starting element
> declaration to use.

In that case, a customer of po.com could make an instance order.xml as 
above, validate it with "comment" as starting element, and send it to 
po.com, where it would be validated with "purchaseOrder" as starting 
element and fail because there is no "purchaseOrder" element (with a simple 
example like po.xsd in the Primer this would not happen, in the real world 
it certainly would). As far as I can see, the only way for po.com to avoid 
this mistake would be to write a companion document for po.xsd which 
describes which elements are acceptable as root (or to make "purchaseOrder" 
the only global element declaration, which is undesirable for reasons 
stated above).

It seems to me it would be preferable if the Schema author could restrict 
the use of global elements as root, for instance by writing something like:

<xsd:element name="comment" type="xsd:string" nonroot="True"/>

saying that "comment" does not constitute one of the possible root 
elements. The absence of the nonroot attribute would indicate that the 
global element is acceptable as root (like all global elements are in the 
current spec). Of course it is not a desirable feature to restrict possible 
roots to only one in every Schema. It is true that XML 1.0 and DTD don't 
support this either, but that in itself does not seem a sufficient reason 
why Schema doesn't.

Am I missing something? Are there other ways to achieve what I want? Or is 
Schema not intended to be used in the way I suggest po.com uses it?

Thanks for your response,

Marc

Marc de Graauw IT
Orteliuskade 44-2
1057 AH  Amsterdam
tel:	+31 20 6123 281
mob:	+31 6 53 146724
fax: 	+31 20 6123 964

Received on Tuesday, 3 October 2000 10:51:11 UTC