CCML is an XML-based language for
        agent-driven content negotiation.
        Note that CCML0.2 is superceded by CCML0.3 and later versions.
        A CCML0.2 document allows a piece of software that comes
        in several alternative parts to be expressed in terms of
        those parts and the requirements they have of any system
        onto which they may be installed.
        A CCML document is processed against an environment
        description (a set of named properties). The result is a
        set of compatible URIs of parts used to deploy the software
        in the described environment.
        The document lists a number of abstract components that
        divide the software into various roles (such as a
        platform-independent part, a highly-dependent part, and an
        interface between the other two). Each abstract component
        is then divided into groups of potential concrete
        components which list the (relative) URIs of the components
        together with their requirements.
        A CCML0.2 document should begin with:
        
          
<!DOCTYPE CCML PUBLIC "-//Lancaster University//DTD CCML 0.2//EN-UK"
  "http://www.comp.lancs.ac.uk/computing/research/mpg/projects/pan/ccml-2.dtd">
         
        The top-level CCML element is CCML, which has no
        attributes.
        Each abstract component is described by a <ABS> element. This has no
        attributes, but contains several <CON> elements, each representing a
        concrete component.
        Each <CON> has a
        URI attribute listing its
        (space-separated) URIs (relative to the document's
        location). It may also contain several <REL>, <LOGIC> and <EXT> elements, each expressing a
        condition that must be met if the concrete component
        (<CON>) is to be
        considered compatible with the described environment.
        In processing the document, exactly one compatible
        <CON> must be chosen from
        each <ABS> block, or
        failure is reported. If several <CON>s are compatible, the last is
        chosen.
        Each <REL> element has
        a PROP attribute identifying a
        property in the environment description, and an
        ARG attribute giving a set of
        compatible values, and optional attributes OP and TYPE
        supporting more sophisticated property
        expressions.
        Each <LOGIC> contains
        other expression elements to form a logical expression.
        Finally, an <EXT
        DATA="#id"> is a reference expression that identifies an
        element at another location in the document, and evaluates
        the same as that element.
        The syntax is defined concisely by the DTD.
        
          Example
          
            
              
<!DOCTYPE CCML PUBLIC "-//Lancaster University//DTD CCML 0.2//EN-UK"
  "http://www.comp.lancs.ac.uk/computing/research/mpg/projects/pan/ccml-2.dtd">
<!-- A proxylet requiring three components (one per ABS):
       * the platform-specific ADP,
       * a veneer between the ADP and the ACP,
       * the platform-independent ACP. -->
<CCML>
  <LOGIC ID="linux" OP="AND">
    <REL PROP="capsule" ARG="linux-module" />
    <REL PROP="capsule-version"
           OP="GE"
         TYPE="VERSION"
          ARG="1.1" />
  </LOGIC>
  <ABS>
    <!-- ADP component -->
    <!-- this component is allowed to be empty -->
    <CON/>
    <CON URI="wibble.jar">
      <EXT DATA="#linux" />
      <REL PROP="arch" ARG="i386,i486,i586,i686" />
    </CON>
    <CON URI="wubble.jar">
      <EXT DATA="#linux" />
      <REL PROP="arch" ARG="sun4" />
    </CON>
    <CON URI="webble.jar">
      <REL PROP="caspule" ARG="telefonica" />
    </CON>
  </ABS>
  <ABS>
    <!-- ACP/ADP veneer component -->
    <!-- this component is allowed to be empty -->
    <CON/>
    <CON URI="squibble.jar">
      <REL PROP="profile" ARG="UK.ac.lancs.linuxdevice.Kernel" />
    </CON>
    <CON URI="rabble.jar">
      <REL PROP="profile" ARG="ES.telefonica.AOS" />
    </CON>
  </ABS>
  <ABS>
    <!-- ACP component -->
    <!-- this component is platform-independent -->
    <CON URI="wobble.jar" />
  </ABS>
</CCML>
             
           
         
        
          Comparison with CCML0.1
          
            
              - 
                It introduces (perhaps errantly) a public
                identifier for the document type, namely
                -//Lancaster University//DTD CCML
                0.2//EN-UK. 
- 
                It renames most of the original elements: 
                  - 
                    <SELECT>becomes<ABS>, to indicate that
                    it represents an abstract component.
 
- 
                    <CHOICE>becomes<CON>, to indicate that
                    it represents a concrete component.
 
- 
                    <PROPERTY
                    NAME="name" VALUE="value"
                    />becomes<REL PROP="name"
                    ARG="value"/>.
 
 
- 
                It introduces OPandTYPEattributes to
                property expressions, for
                richer comparisons.
 
- 
                It introduces <LOGIC>, for logical expressions.
 
- 
                It introduces <EXT>, for referenced expressions.