Comparison of Approaches

All,

I have written a note that compares the attribute centric approaches 
discussed so far as a basis for discussion. I also added an example for 
the third approach we hinted at, but not necessarily defined in detail 
to clarify what it would be like.

Cheers,

--umit





-- 
Umit Yalcinalp                                  
Consulting Member of Technical Staff
ORACLE
Phone: +1 650 607 6154                          
Email: umit.yalcinalp@oracle.com
There are three methodologies identified so far:

-- The proposal as presented in [1]. 

   Pros: 

   -- Handles subtypes, such as "image/*" also list of subtypes. 
   -- Attribute based, defines a special global attribute that designates
      the media-type. Therefore, it is easy to infer the additional
      information in the document.


   Cons: 
 
   -- The approach requires two different attributes, one in the
      document to designate the actual media-type value and one in the
      schema designated by annotation. The methodology of
      incorporating annotations by schema extensions may not be
      generally supported by processors.

-- Gudge's Proposal in [2]. 

   Pros: 

   -- Simple, requires one attribute instead of two. 
   -- Applications can fix the value of the attribute to designate specific 
   values, such as "image/jpeg". 

   Cons: 
   -- Applications can not declare subtypes for content. It is not possible to 
      designate a media type without designating a subtype, disallows 
      enumeration, wildcard. 

-- Type Extension Proposal: 

   This proposal is to define a base type, MediaType and all known
   media types, derived from it in the media types note's schema. The
   level of granularity only extends to the media type but not to tthe
   subtypes in a media type hierarchy.

   Applications can further use these types to designate specific
   media types, using the method used in [2] by fixing the value or
   directly using the types for wildcarding. Applications define their
   own attributes that use these defined types for designating the
   media type of the binary data.
   

   Pros: 

   -- Similar to [2], as applications will rely on a single attribute declaration.
   
   
   Cons: 
   -- Applications must designate the attribures themselves. There is 
      not a single global attribute that designates the media type. 
   -- All media types (not subtypes) must be designated by the note. 
   -- It is complicated to process media type information. 
      Each attribute that the application uses must be evaluated to 
      infer whether it derives from the media type to further interpret 
      the content appropriately. 


   Here is a variant of the example used in [2] that illustrates the
   third approach:

The Media Types Schema: 

<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' 
           targetNamespace='http://www.w3.org/2004/03/MediaTypes' 
	   xmlns:tns='http://www.w3.org/2004/03/MediaTypes' >

<xs:simpleType name='MediaType' >
  <xs:restriction base='xs:string' >
   <xs:pattern value='{pattern for media types goes here}' />
  </xs:restriction>
 </xs:simpleType>
</xs:schema>

<!--
  The schema defines a type which is known to derive from the 
  base type MediaType. 

  All known media types are represented, such as image, text, ... 
  in the schema, but NOT the subtypes. 
-->
 
<xs:simpleType name='ImageType' >
  <xs:restriction base='tns:MediaType' >
   <xs:pattern value='image/{pattern for media types goes here}' />
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name='TextType' >
  <xs:restriction base='tns:MediaType' >
   <xs:pattern value='text/{pattern for media types goes here}' />
  </xs:restriction>
</xs:simpleType>

...


</xs:schema>


Schema For the Document: 


<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' 
           targetNamespace='http://example.org/myservice' 
           xmlns:tns='http://example.org/myservice' 
	   xmlns:mt='http://www.w3.org/2004/03/MediaTypes' >

  <xs:import namespace='http://www.w3.org/2004/03/MediaTypes' />

  <!-- The application defines its own attributes -->

  <xs:attribute name='ImageAttr' type='tns:ImageType' />
  <xs:attribute name='AppAttr' type='tns:ApplicationType' />

  <!-- The types are used to designate the media type -->

  <xs:element name='Person' type='tns:Person' />
  <xs:complexType name='Person' >
   <xs:sequence>
    <xs:element name='Name' type='xs:string' />
    <xs:element name='Portrait' type='tns:Portrait' />
    <xs:element name='Signature' type='tns:Signature' />
   </xs:sequence>
  </xs:complexType>

  <xs:complexType name='Portrait' >
   <xs:simpleContent>
    <xs:extension base='xs:base64Binary' >
     <xs:attribute ref='tns:ImageAttr' required='true'/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name='Signature' >
   <xs:simpleContent>
    <xs:extension base='xs:base64Binary' >
     <xs:attribute ref='tns:AppAttr' 
                   fixed='application/pkcs7-signature' 
                   required='true' />
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>

</xs:schema>


References: 

[1]http://lists.w3.org/Archives/Public/public-ws-media-types/2004Apr/0000.html
[2]http://lists.w3.org/Archives/Public/public-ws-media-types/2004Mar/0010.html

Received on Monday, 19 April 2004 17:21:21 UTC