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 04:22:21 UTC