<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns='http://relaxng.org/ns/structure/1.0'
xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<!-- Used for DigestMethod, KeyInfoType and anyThing -->
<!-- Since xmldsig-core also has a start, I have to include it
in the include for redefinition. -->
<start>
<choice>
<!-- We get to define the permissible root elements! -->
<element name="EncryptedData"><ref name="EncryptedDataType"/></element>
<element name="EncryptedKey"><ref name="EncryptedKeyType"/></element>
</choice>
</start>
<define name='anyThing'>
<zeroOrMore>
<choice>
<text/>
<element>
<anyName>
<except>
<nsName/>
<nsName ns='http://www.w3.org/2000/09/xmldsig#'/>
</except>
</anyName>
<ref name='anyThing'/>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
</element>
</choice>
</zeroOrMore>
</define>
</include>
<!-- Import definitions from the xmldsig rng -->
<define name="KeyInfoType" combine="interleave">
<zeroOrMore>
<choice>
<element name="EncryptedKey"><ref name="EncryptedKeyType"/></element>
<element name="AgreementMethod"><ref name="AgreementMethodType"/></element>
</choice>
</zeroOrMore>
</define>
<define name="DigestMethodType" combine="choice">
<notAllowed/>
</define>
<define name="TransformType" combine="choice">
<notAllowed/>
</define>
<!-- Now redefined in the include statement
<define name="anyThing" combine="choice">
<notAllowed/>
</define>
-->
<!-- End import -->
<define name="EncryptedDataType">
<ref name="EncryptedType"/>
</define>
<define name="EncryptedKeyType">
<ref name="EncryptedType"/>
<optional><element name='ReferenceList'>
<ref name="ReferenceListType"/></element>
</optional>
<optional><element name='CarriedKeyName'><data type="string"/></element></optional>
<optional><attribute name='Recipient'> <data type="string"/></attribute></optional>
</define>
<define name="EncryptedType">
<element name="EncryptionMethod"><ref name="EncryptionMethodType"/></element>
<optional>
<ref name="KeyInfoType"/>
</element>
</optional>
<optional>
<element name="CipherData"><ref name="CipherDataType"/></element>
</optional>
<optional>
<element name="EncryptionProperties"><ref name="EncryptionPropertiesType"/></element>
</optional>
<optional><attribute name="Id"><data type="ID"/></attribute></optional>
<optional><attribute name="Type"><data type="anyURI"/></attribute></optional>
<optional><attribute name="MimeType"><data type="string"/></attribute></optional>
<optional><attribute name="Encoding"><data type="anyURI"/></attribute></optional>
<optional><attribute name='xsi:schemaLocation'/></optional>
</define>
<define name="EncryptionMethodType">
<zeroOrMore>
<choice>
<element name="KeySize">
<data type="integer"/>
</element>
<element name="OAEPparams">
<data type="base64Binary"/>
</element>
<text/>
<ref name="DigestMethodType"/>
</element>
</choice>
</zeroOrMore>
<attribute name="Algorithm"><data type="anyURI"/></attribute>
</define>
<define name="AgreementMethodType">
<zeroOrMore>
<choice>
<element name="KA-Nonce">
<data type="base64Binary"/>
</element>
<ref name="DigestMethodType"/>
</element>
<text/>
<element>
<nsName ns="http://www.w3.org/2000/09/xmldsig#"/>
<ref name="anyThing"/>
</element>
<element name="OriginatorKeyInfo"><ref name="KeyInfoType"/></element>
<element name="RecipientKeyInfo"><ref name="KeyInfoType"/></element>
</choice>
</zeroOrMore>
<attribute name="Algorithm"><data type="anyURI"/></attribute>
</define>
<define name="ReferenceListType">
<oneOrMore>
<choice>
<element name="DataReference">
<text/>
<attribute name="URI"><data type="anyURI"/></attribute>
</element>
<element name="KeyReference">
<text/>
<attribute name="URI"><data type="anyURI"/></attribute>
</element>
</choice>
</oneOrMore>
</define>
<define name="CipherDataType">
<choice>
<element name="CipherValue"><data type="base64Binary"/></element>
<element name="CipherReference">
<element name="Transforms">
<oneOrMore>
<ref name='TransformType'/>
</element>
</oneOrMore>
</element>
<attribute name="URI">
<data type="anyURI"/>
</attribute>
</element>
</choice>
</define>
<define name="EncryptionPropertiesType">
<element name="EncryptionProperty">
<zeroOrMore>
<element>
<anyName/>
<text/>
</element>
</zeroOrMore>
<optional>
<attribute name="Target">
<data type="anyURI"/>
</attribute>
</optional>
<optional>
<attribute name="Id">
<data type="ID"/>
</attribute>
</optional>
</element>
<optional>
<attribute name="Id">
<data type="ID"/>
</attribute>
</optional>
<zeroOrMore>
</zeroOrMore>
</define>
</grammar>