- From: Henry S. Thompson <ht@cogsci.ed.ac.uk>
- Date: 23 Feb 2001 11:23:24 +0000
- To: "Joseph M. Reagle Jr." <reagle@w3.org>
- Cc: xmlschema-dev@w3.org, "Michael Sperberg-McQueen" <cmsmcq@w3.org>
"Joseph M. Reagle Jr." <reagle@w3.org> writes:
> At 15:47 2/21/2001 +0000, Henry S. Thompson wrote:
> >Sure, you can do that: all you have to do, since RetrievalMethodType
> >is not used anywhere else, is just redefine it to not have the Type
> >attribute. This has to be done in a stub document which is in the
> >dsig namespace.
>
> Ok, I tried this [1, where "prime" is the stub] and still get:
> >Detected during instance validation
> >file:/i:/2web/policy/stub-sigenc/01-19-xmlenc-schema.xsd:29:15: Error: non-deterministic content model for type KeyInfoType: {Wildcard: ##other}/{http://www.w3.org/2001/02/xmlenc#}:KeyRetrievalMethod
>
>
> [1] http://policy.w3.org/stub-sigenc/prime.xsd
> <schema xmlns="http://www.w3.org/2000/10/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="0.1" elementFormDefault="qualified" attributeFormDefault="unqualified">
> <redefine schemaLocation="xmldsig-core-schema.xsd">
> <complexType name="RetrievalMethodType">
> <complexContent>
> <restriction base="ds:RetrievalMethodType">
> <sequence>
> <element name="Transforms" type="ds:TransformsType" minOccurs="0" />
> </sequence>
> <attribute name="URI" type="uriReference" />
> <attribute name="Type" type="uriReference" use="fixed"
> value="http://www.w3.org/2001/02/xmlenc#EncryptedKey" />
> </restriction>
> </complexContent>
> </complexType>
> </redefine>
> </schema>
>
> http://policy.w3.org/stub-sigenc/01-19-xmlenc-schema.xsd
> ...
> <import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="prime.xsd" />
So down to here is fine, and you could just stop, and use (the
indirectly redefined) ds:KeyRetrievalMethod. But there would be no
signal in the instance, e.g enc:KeyRetrievalMethod, that there was a change.
> <complexType name="KeyInfoType">
> <complexContent>
> <extension base="ds:KeyInfoType">
> <sequence>
> <element ref="xenc:KeyRetrievalMethod" minOccurs="0" />
> </sequence>
> </extension>
> </complexContent>
> </complexType>
You don't need this, and in any case it doesn't render ds:KeyInfoType OK.
> <element name="KeyRetrievalMethod" type="ds:RetrievalMethodType" substitutionGroup="ds:RetrievalMethod" />
But this, because of the <any namespace='##other'/> in
ds:KeyInfoType, does indeed render ds:KeyInfoType ambiguous.
Sigh.
So the only fully clean approachs I can see are to
a) Forget the substitution group, and redefine ds:KeyInfoType to have
xenc:KeyRetrievalMethod in place of the <any namespace="##other"/>.
This has the disadvantage of closing off futher ad-hoc inclusions.
b) redefine ds:KeyInfoType to get rid of the <any> altogether, and
use the substitutionGroup route to get xenc:KeyRetrievalMethod in there.
This has the same disadvantage as the above, _and_ requires
xmldsig-core-schema.xsd to be change to use a ref= to
ds:KeyRetrievalMethod.
Take home message: In flexible content models where ambiguity issues
may arise, _either_ use global element refs to facilitate constrained
re-use via substitution groups, _or_ include a wildcard to allow
unconstrained re-use. You can't have both, until v1.1 where we
provide a richer wildcard functionality.
Given that that will come (so that you can take option (a) above and
still allow a restricted <any> which doesn't conflict with ds: or
xenc:), I think I'd recommend option (a).
ht
--
Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
W3C Fellow 1999--2001, part-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/
Received on Friday, 23 February 2001 06:23:29 UTC