- From: Joseph M. Reagle Jr. <reagle@w3.org>
- Date: Tue, 20 Feb 2001 13:38:15 -0500
- To: ht@cogsci.ed.ac.uk (Henry S. Thompson)
- Cc: xmlschema-dev@w3.org
At 23:21 2/19/2001 +0000, Henry S. Thompson wrote:
>Presuming the content model for ds:KeyInfoType is still something like
>
> <xs:choice maxOccurs="unbounded">
> . ..
> <xs:any namespace="##other"/>
> </xs:choice>
Yep [1].
[1] http://policy.w3.org/sigenc/xmldsig-core-schema.xsd
>You have two problems:
>
>1) the minOccurs on the choice defaults to 1, so your
>keyRetrievalMethod is being validated by the choice's required first
>iteration, as it were;
>2) your content model is ambiguous -- if there were _two_
>keyRetrievalMethod elements, the second could stay with the <any> or
>go with the added explicit <element>.
But they are from different namespaces...?
>Isn't what you want to _restrict_ KeyInfoType with the
>KeyRetrievalMethod reference? This should have the right result.
Actually yes, but I haven't figured out how to restrict a referenced part of
KeyInfoType. Is it possible to say an element is of ds:KeyInfoType except
for a restriction in one of the things it references: ds:RetrievalMethod? In
this instance, I'm trying to create a enc:KeyInfo of dsig:KeyInfoType but
restrict the ds:RetrievalMethod's Type attribute (via fixing or removing the
attribute value since the Type will always be a EncryptedKey -- we don't
need/want generality where it is wanted in dsig).
In general, I have three possible strategies, and I'm not sure what the best
practice is.
(I'm renaming the restricted RetrievalMethod to enc:KeyRetrievalMethod for
clarity, but it's not necessary, and be a cool demonstration of polymorphism
if I find and a solution and don't rename it).
A. Create a new but orphaned (in the encryption namespace)
enc:KeyRetrivalMethod that is permitted by ds:KeyInfoType's ANY:
<enc:EncryptedData>
<ds:KeyInfoType>
<enc:KeyRetrievalMethod>
</..>
This has a weird hodgepodge/striping and isn't the tightest object design
(ANY can be useful, but discouraged where you can do real OO IMHO.)
B. Create a enc:KeyInfoType and <enc:KeyInfo> element that is derived from
ds:KeyInfoType with a restricted ds:RetrievalMethod, or failing that a new
enc:KeyRetrievalMethod.
In the instance, it looks like everything is from enc: but if you have the
schema you understand the relationships.
C. Create a completely new enc:KeyInfoType that is defined the same as
ds:KeyInfoType except for this definition.
This looks like B, but loosing the OO complexType relationships.
__
Joseph Reagle Jr. http://www.w3.org/People/Reagle/
W3C Policy Analyst mailto:reagle@w3.org
IETF/W3C XML-Signature Co-Chair http://www.w3.org/Signature
W3C XML Encryption Chair http://www.w3.org/Encryption/2001/
Received on Tuesday, 20 February 2001 13:38:18 UTC