Draft. See "Content Assembly Mechanism (CAM) Specifications and Description Document." Edited by David Webber. Draft Version 1.0. Produced by the OASIS Content Assembly Mechanism Technical Committee. 69 pages. ZIP file contains the schema and DTD.


<!-- CAM structure for OASIS CAM. February 12th, 2003
Modification history:
1.00 Initial
Copyright (c) 2003 OASIS. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that such redistributions retain
this copyright notice.
This CAM structure is provided "as is" and there are no
expressed or implied warranties.
In no event shall OASIS be liable for any
damages arising out of the use of this structure.  -->

<!ELEMENT CAM (AssemblyStructure, BusinessUseContext?, ContentReference?, DataValidations?, ExternalMapping?, annotation?) >

<!ELEMENT AssemblyStructure (Header, Declaration*, Structure+)>
<!ELEMENT Header (CAMlevel, Description?, Owner?, Version?, DateTime)>
<!ELEMENT CAMlevel EMPTY>
<!ATTLIST CAMlevel
          value (1 | 2 | 3) #REQUIRED >
<!ELEMENT Description (#PCDATA) >
<!ELEMENT Owner       (#PCDATA) >
<!ELEMENT Version (#PCDATA) >
<!ELEMENT DateTime (#PCDATA) >

<!ELEMENT Declaration EMPTY >
<!ATTLIST Declaration
          parameter CDATA #REQUIRED
          values    CDATA #IMPLIED
          default   CDATA #IMPLIED
          datatype  CDATA #IMPLIED >

<!ELEMENT Structure ANY >
<!ATTLIST Structure
          ID         CDATA    #IMPLIED
          reference  CDATA    #IMPLIED
          taxonomy (UID | XSD | DTD | RNG | XML)   #REQUIRED >

<!ELEMENT BusinessUseContext (Rules)>
<!ELEMENT Rules (default?, context*)>
<!ELEMENT default (context+ | constraint+ )>
<!ELEMENT context (context+ | constraint+ )>
<!ATTLIST context
        condition CDATA #REQUIRED
>

<!ELEMENT ContentReference (Addressing,item+)>
<!ELEMENT Addressing (registry+)>

<!ELEMENT constraint EMPTY >
<!ATTLIST constraint
        condition CDATA #IMPLIED
        action CDATA #REQUIRED >
<!-- predicates (  excludeAttribute | excludeElement | excludeTree |
                  makeOptional | makeMandatory | makeRepeatable |
                  setChoice | setId | setLength | setLimit | setMask |
                  setValue | restrictValues | restrictValuesByUID |
                  useAttribute | useChoice | useElement | useTree |
                  useAttributeByID | useChoiceByID | useElementByID |
                  useTreeByID ) -->

<!ELEMENT DataValidations ( Conditions+ )>
<!ELEMENT Conditions ( conditional+ )>
<!ATTLIST Conditions
          condition CDATA #IMPLIED >
<!ELEMENT conditional EMPTY >
<!ATTLIST conditional
          expression CDATA #REQUIRED
          syntax (XPath | JavaScript | VB | Perl | Other) #IMPLIED
          outcome ( fail | ignore | report ) #REQUIRED
          message CDATA #IMPLIED
          test    ( always | postcheck | precheck )  #REQUIRED >

<!ELEMENT registry EMPTY>
<!ATTLIST registry
          name CDATA #REQUIRED
          access CDATA #REQUIRED
          method (URL | http | SOAP | ebXML | UDDI | Other) #REQUIRED
          description CDATA #IMPLIED
>

<!ELEMENT item EMPTY>
<!ATTLIST item
        type (noun | corecomponent | BIE | BRIC | defaultAssembly | identifier | verb | schema | documentation) #REQUIRED
        name CDATA #IMPLIED
        UIDReference CDATA #REQUIRED
        taxonomy CDATA #REQUIRED
        registry CDATA #IMPLIED
	  datatype CDATA #IMPLIED
	  setlength CDATA #IMPLIED
	  setmask CDATA #IMPLIED
>

<!ELEMENT annotation  (documentation+) >

<!ELEMENT documentation  (#PCDATA) >

<!ATTLIST documentation
               type (description | note | license | usage | other)   #REQUIRED  >

<!ELEMENT ExternalMapping (ContentAssociation+) >
<!ELEMENT ContentAssociation (Description?,InputSource,OutputStore,RulesSet) >
<!ELEMENT InputSource EMPTY >
<!ATTLIST InputSource
          type ( SQL | XML | EDI | TXT | ODBC | OTHER ) #IMPLIED
          location CDATA #IMPLIED >
<!ELEMENT OutputStore EMPTY >
<!ATTLIST OutputStore
          type ( SQL | XML | EDI | TXT | ODBC | OTHER ) #IMPLIED
          location CDATA #IMPLIED >

<!ELEMENT RulesSet (MapRule+) >
<!ELEMENT MapRule EMPTY >
<!ATTLIST MapRule
          output CDATA #REQUIRED
          input CDATA #REQUIRED >