RE: Forcing content according to attribute

This is the classic use case for "conditional type assignment" which is a
feature in XSDL 1.1.

With version 1.0, the only way to achieve it is by naming the attribute
xsi:type.

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: xmlschema-dev-request@w3.org 
> [mailto:xmlschema-dev-request@w3.org] On Behalf Of Papalagi Pakeha
> Sent: 23 January 2008 00:29
> To: xmlschema-dev@w3.org
> Subject: Forcing content according to attribute
> 
> 
> hello,
> 
> in our xml documents we use <Attachment> tag to specify, 
> well, attachments to these documents. something like:
> 
> <Doc>
> <Title>xyz</Title>
> ....
> <Attachment type="logo" 
> format="url">http://some.url/logo.jpg</Attachment>
> <Attachment type="token" format="inline">U29tZVRoaW5nCg==</Attachment>
> <Attachment type="data" format="filename">local.file.bin</Attachment>
> </Doc>
> 
> Is there any way in XSD to enforce:
> - base64 content for format="inline",
> - URL content when format="url", and
> - non-URL when format="filename"
> ?
> 
> For now I have:
> 
>   <xs:element name="Attachment">
>     <xs:complexType>
>       <xs:simpleContent>
>         <xs:extension base="xs:string">
>           <xs:attribute name="format" use="required">
>             <xs:simpleType>
>               <xs:restriction base="xs:string">
>                 <xs:enumeration value="inline"/>
>                 <xs:enumeration value="filename"/>
>                 <xs:enumeration value="url"/>
>               </xs:restriction>
>             </xs:simpleType>
>           </xs:attribute>
>           <xs:attribute name="type" use="required">
>             <xs:simpleType>
>               <xs:restriction base="xs:string">
>                 <xs:enumeration value="logo"/>
>                 <xs:enumeration value="token"/>
>                 <xs:enumeration value="data"/>
>               </xs:restriction>
>             </xs:simpleType>
>           </xs:attribute>
>         </xs:extension>
>       </xs:simpleContent>
>     </xs:complexType>
>   </xs:element>
> 
> that works well but accepts any "xs:string" for content and 
> not enforcing URL/non-URL/base64.
> 
> can anyone throw some hints on how to achieve the link 
> between format and content please?
> 
> thanks!
> 
> papa
> 
> 

Received on Wednesday, 23 January 2008 09:23:38 UTC