CMDBf Data Model

From PeformIQ Upgrade
Jump to navigation Jump to search
<?xml version="1.0" encoding="UTF-8" ?>

<!--
  Copyright Notice
  (c) 2007 by BMC Software, CA, Fujitsu, Hewlett-Packard, IBM, and 
  Microsoft.   All rights reserved.
  
  Permission to copy and display this portion of the CMDB Federation
  specification, in any medium without fee or royalty is hereby granted, 
  provided that you include the following on ALL copies of the CMDB 
  Federation specification, or portions thereof, that you make:
  1. A link or URL to the Specification at the website of one of the 
     authors.
  2. The copyright notice as shown in the Specification.

  BMC Software, CA, Fujitsu, Hewlett-Packard, IBM, and Microsoft 
  (collectively, the "Authors") each agree to grant you a royalty-free 
  license, under reasonable, non-discriminatory terms and conditions to 
  their respective patents that they deem necessary to implement the 
  Specification.  

  THE "CMDB FEDERATION" SPECIFICATION IS PROVIDED "AS IS,"
  AND THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
  IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT
  THE CONTENTS OF THE "CMDB FEDERATION" SPECIFICATION ARE SUITABLE FOR 
  ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT 
  INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER 
  RIGHTS.
  
  THE AUTHORS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL,
  INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO ANY
  USE OR DISTRIBUTION OF THE "CMDB FEDERATION" SPECIFICATION.
  
  The name and trademarks of the Authors may NOT be used in any manner,
  including advertising or publicity pertaining to the "CMDB 
  FEDERATION" Specification or its contents without specific, written 
  prior permission. Title to copyright in the "CMDB FEDERATION" 
  Specification will at all times remain with the Authors.
  
  No other rights are granted by implication, estoppel or otherwise.
-->

<xs:schema  targetNamespace="http://cmdbf.org/schema/1-0-0/datamodel"
  elementFormDefault="qualified" blockDefault="#all"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:cmdbf="http://cmdbf.org/schema/1-0-0/datamodel">

  <!-- Message Global Element Declarations -->

  <xs:element name="query" type="cmdbf:QueryType" />
  <xs:element name="queryResult" type="cmdbf:QueryResultType" />
  <xs:element name="registerRequest"
    type="cmdbf:RegisterRequestType" />
  <xs:element name="registerResponse"
    type="cmdbf:RegistrationServiceResponseType" />
  <xs:element name="deregisterRequest"
    type="cmdbf:DeregisterRequestType" />
  <xs:element name="deregisterResponse"
    type="cmdbf:RegistrationServiceResponseType" />

  <!-- Query Fault Message Global Element Declarations -->
  
  <xs:element name="UnkownTemplateIDFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="graphId" type="xs:ID" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="InvalidPropertyTypeFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="propertyName">        
          <xs:complexType>
            <xs:attribute name="localName" 
              type="xs:NCName" use="required" />
            <xs:attribute name="namespace" 
              type="xs:anyURI" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="XPathErrorFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="expression" type="xs:string" />
        <xs:element name="xpathErrorCode" type="xs:string" />        
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="UnsupportedConstraintFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="constraint">        
          <xs:complexType>
            <xs:attribute name="localName" 
              type="xs:NCName" use="required" />
            <xs:attribute name="namespace" 
              type="xs:anyURI" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="UnsupportedSelectorFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="selector">        
          <xs:complexType>
            <xs:attribute name="localName" 
              type="xs:NCName" use="required" />
            <xs:attribute name="namespace" 
              type="xs:anyURI" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="QueryErrorFault">
    <xs:complexType>
      <xs:sequence>
        <xs:any namespace="##any" processContents="lax" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- Registration Message Global Element Declarations -->

  <xs:element name="InvalidRecordFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="recordId" type="xs:anyURI" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="UnsupportedRecordTypeFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="recordType">        
          <xs:complexType>
            <xs:attribute name="localName" 
              type="xs:NCName" use="required" />
            <xs:attribute name="namespace" 
              type="xs:anyURI" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="InvalidMDRFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="mdrId" type="xs:anyURI" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="RegistrationErrorFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="recordId" type="xs:anyURI" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="DeregistrationErrorFault">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="recordId" type="xs:anyURI" />
      </xs:sequence>
    </xs:complexType>
  </xs:element> 

  <!-- Query Request Definitions -->
  <xs:complexType name="QueryType">
    <xs:sequence>
      <xs:element name="itemTemplate"
        type="cmdbf:ItemTemplateType" minOccurs="0"
        maxOccurs="unbounded" />
      <xs:element name="relationshipTemplate"
        type="cmdbf:RelationshipTemplateType" minOccurs="0"
        maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ItemTemplateType">
    <xs:sequence>
      <xs:choice>
        <xs:group ref="cmdbf:Constraints" />
        <xs:element name="xpathExpression"
          type="cmdbf:XPathExpressionType" minOccurs="0"
          maxOccurs="unbounded" />
      </xs:choice>
      <xs:any minOccurs="0" maxOccurs="unbounded"
        namespace="##other" processContents="lax" />
      </xs:sequence>
    <xs:attribute name="id" type="xs:ID" use="required" />
    <xs:attribute name="suppressFromResult" type="xs:boolean"
                  use="optional" default="false"/>
  </xs:complexType>

  <xs:group name="Constraints" >
      <xs:sequence>
        <xs:element name="contentSelector"
          type="cmdbf:ContentSelectorType" minOccurs="0"
          maxOccurs="1" />
        <xs:element name="instanceIdConstraint"
          type="cmdbf:InstanceIdConstraintType"
          minOccurs="0" maxOccurs="1" />
        <xs:element name="recordConstraint"
          type="cmdbf:RecordConstraintType" minOccurs="0"
          maxOccurs="unbounded" />
    </xs:sequence>
  </xs:group>

  <xs:complexType name="RelationshipTemplateType">
    <xs:sequence>
      <xs:choice>
        <xs:group ref="cmdbf:Constraints" />
        <xs:element name="xpathExpression"
          type="cmdbf:XPathExpressionType" minOccurs="0"
          maxOccurs="unbounded" />
        </xs:choice>
      <xs:element name="sourceTemplate" 
                  type="cmdbf:RelationshipRefType"
        minOccurs="0" maxOccurs="1" />
      <xs:element name="targetTemplate"
                  type="cmdbf:RelationshipRefType"
        minOccurs="0" maxOccurs="1" />
      <xs:element name="depthLimit" type="cmdbf:DepthLimitType"
        minOccurs="0" maxOccurs="1" />
      <xs:any minOccurs="0" maxOccurs="unbounded"
        namespace="##other" processContents="lax" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:ID" use="required" />
    <xs:attribute name="suppressFromResult" type="xs:boolean"
                  use="optional" default="false"/>
  </xs:complexType>

  <xs:complexType name="RelationshipRefType">
    <xs:attribute name="ref" type="xs:IDREF" use="required" />
    <xs:attribute name="minimum" type="xs:int" />
    <xs:attribute name="maximum" type="xs:int" />
  </xs:complexType>

  <xs:complexType name="DepthLimitType">
    <xs:attribute name="maxIntermediateItems"
                  type="xs:positiveInteger" />
    <xs:attribute name="intermediateItemTemplate" type="xs:IDREF" />
  </xs:complexType>

  <xs:complexType name="ContentSelectorType">
    <xs:sequence>
    	<xs:element name="selectedRecordType"
    		type="cmdbf:SelectedRecordTypeType" minOccurs="0"
    		maxOccurs="unbounded" />
    	<xs:any minOccurs="0" maxOccurs="unbounded"
              namespace="##other" processContents="lax" />
    </xs:sequence>
    <xs:attribute name="matchedRecords" type="xs:boolean"
                  use="optional" default="true"/>
  </xs:complexType>

  <xs:complexType name="SelectedRecordTypeType">
    <xs:sequence>
      <xs:element name="selectedProperty" type="cmdbf:QNameType"
        minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="namespace" type="xs:anyURI"
      use="required" />
    <xs:attribute name="localName" type="xs:NCName"
      use="required" />
  </xs:complexType>

  <xs:complexType name="InstanceIdConstraintType">
    <xs:sequence>
      <xs:element ref="cmdbf:instanceId" maxOccurs="unbounded"
        minOccurs="1" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="RecordConstraintType">
    <xs:sequence>
      <xs:element name="recordType"
        type="cmdbf:QNameType" minOccurs="0"
        maxOccurs="unbounded" />
      <xs:element name="propertyValue"
        type="cmdbf:PropertyValueType" minOccurs="0"
        maxOccurs="unbounded" />
      <xs:any minOccurs="0" maxOccurs="unbounded"
        namespace="##other" processContents="lax" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PropertyValueType">
    <xs:sequence>
      <xs:element name="equal" type="cmdbf:EqualOperatorType"
        minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="less" type="cmdbf:ComparisonOperatorType"
        minOccurs="0" maxOccurs="1" />
      <xs:element name="lessOrEqual"
        type="cmdbf:ComparisonOperatorType" minOccurs="0"
        maxOccurs="1" />
      <xs:element name="greater"
        type="cmdbf:ComparisonOperatorType" minOccurs="0"
        maxOccurs="1" />
      <xs:element name="greaterOrEqual"
        type="cmdbf:ComparisonOperatorType" minOccurs="0"
        maxOccurs="1" />
      <xs:element name="contains" type="cmdbf:StringOperatorType"
        minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="like" type="cmdbf:StringOperatorType"
        minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="isNull" type="cmdbf:NullOperatorType"
        minOccurs="0" maxOccurs="1" />
      <xs:any minOccurs="0" maxOccurs="unbounded"
        namespace="##other" processContents="lax" />
    </xs:sequence>
    <xs:attribute name="namespace" type="xs:anyURI"
      use="required" />
    <xs:attribute name="localName" type="xs:NCName"
      use="required" />
    <xs:attribute name="recordMetadata" type="xs:boolean" 
      use="optional" default="false" />
    <xs:attribute name="matchAny" type="xs:boolean"
      use="optional" default="false" />
  </xs:complexType>

  <!-- property value operators -->
  <xs:complexType name="ComparisonOperatorType">
    <xs:simpleContent>
      <xs:extension base="xs:anySimpleType">
        <xs:attribute name="negate" type="xs:boolean"
          use="optional" default="false" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="StringOperatorType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="caseSensitive" type="xs:boolean"
          use="optional" default="true" />
        <xs:attribute name="negate" type="xs:boolean"
          use="optional" default="false" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="EqualOperatorType">
    <xs:simpleContent>
      <xs:extension base="xs:anySimpleType">
        <xs:attribute name="caseSensitive" type="xs:boolean"
          use="optional" default="true" />
        <xs:attribute name="negate" type="xs:boolean"
          use="optional" default="false" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="NullOperatorType">
    <xs:attribute name="negate" type="xs:boolean" use="optional"
      default="false" />
  </xs:complexType>

  <xs:complexType name="XPathExpressionType">
    <xs:sequence>
      <xs:element name="prefixMapping" type="cmdbf:PrefixMappingType"
                  minOccurs="1" maxOccurs="unbounded" />
      <xs:element name="expression" type="xs:string" />
    </xs:sequence>
    <xs:attribute name="dialect" type="xs:anyURI" use="required" />
  </xs:complexType> 

  <xs:complexType name="PrefixMappingType">
    <xs:attribute name="prefix" type="xs:NCName" use="required" />
    <xs:attribute name="namespace" type="xs:anyURI"
      use="required" />
  </xs:complexType>

  <!-- Query Response definition -->
  <xs:complexType name="QueryResultType">
    <xs:sequence>
      <xs:element name="nodes" type="cmdbf:NodesType"
        minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="edges" type="cmdbf:EdgesType"
        minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="NodesType">
    <xs:sequence>
      <xs:element ref="cmdbf:item" minOccurs="1"
        maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="templateId" type="xs:ID" use="required" />
  </xs:complexType>

  <xs:complexType name="EdgesType">
    <xs:sequence>
      <xs:element ref="cmdbf:relationship" minOccurs="1"
        maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="templateId" type="xs:ID" use="required" />
  </xs:complexType>

  <!-- Registration Service -->
  <xs:complexType name="RegisterRequestType">
    <xs:sequence>
      <xs:element name="mdrId" type="xs:anyURI" />
      <xs:element name="itemList" type="cmdbf:ItemListType"
        minOccurs="0" maxOccurs="1" />
      <xs:element name="relationshipList"
        type="cmdbf:RelationshipListType" minOccurs="0"
        maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ItemListType">
    <xs:sequence>
      <xs:element ref="cmdbf:item" minOccurs="1"
        maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="RelationshipListType">
    <xs:sequence>
      <xs:element ref="cmdbf:relationship" minOccurs="1"
        maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DeregisterRequestType">
    <xs:sequence>
      <xs:element name="mdrId" type="xs:anyURI" />
      <xs:element name="itemIdList"
        type="cmdbf:MdrScopedIdListType" minOccurs="0"
        maxOccurs="1" />
      <xs:element name="relationshipIdList"
        type="cmdbf:MdrScopedIdListType" minOccurs="0"
        maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MdrScopedIdListType">
    <xs:sequence>
      <xs:element ref="cmdbf:instanceId" minOccurs="1"
        maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="RegistrationServiceResponseType">
    <xs:sequence>
      <xs:element name="instanceResponse"
        type="cmdbf:InstanceResponseType" minOccurs="0"
        maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="InstanceResponseType">
    <xs:sequence>
      <xs:element name="instanceId" type="cmdbf:MdrScopedIdType"
        minOccurs="1" maxOccurs="1" />
      <xs:element name="accepted" type="cmdbf:AcceptedType"
        maxOccurs="1" minOccurs="0" />
      <xs:element name="declined" type="cmdbf:DeclinedType"
        maxOccurs="1" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AcceptedType">
    <xs:sequence>
      <xs:element name="alternateInstanceId"
        type="cmdbf:MdrScopedIdType" maxOccurs="unbounded"
        minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DeclinedType">
    <xs:sequence>
      <xs:element name="reason" type="xs:string"
        maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <!-- Shared elements definition -->
  <xs:element name="item" type="cmdbf:ItemType" />
  <xs:complexType name="ItemType">
    <xs:sequence>
      <xs:element ref="cmdbf:record" minOccurs="0"
        maxOccurs="unbounded" />
      <xs:element ref="cmdbf:instanceId" minOccurs="1"
        maxOccurs="unbounded" />
      <xs:element name="additionalRecordType"
        type="cmdbf:QNameType" minOccurs="0"
        maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="relationship" type="cmdbf:RelationshipType" />
  <xs:complexType name="RelationshipType">
    <xs:sequence>
      <xs:element name="source" type="cmdbf:MdrScopedIdType"
        minOccurs="1" maxOccurs="1" />
      <xs:element name="target" type="cmdbf:MdrScopedIdType"
        minOccurs="1" maxOccurs="1" />
      <xs:element ref="cmdbf:record" minOccurs="0"
        maxOccurs="unbounded" />
      <xs:element ref="cmdbf:instanceId" minOccurs="1"
        maxOccurs="unbounded" />
      <xs:element name="additionalRecordType"
        type="cmdbf:QNameType" maxOccurs="unbounded"
        minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="record" type="cmdbf:RecordType" />
  <xs:complexType name="RecordType">
    <xs:sequence>
      <xs:any namespace="##other" processContents="skip" />
      <xs:element name="recordMetadata" >
         <xs:complexType>
           <xs:sequence>
           <xs:element name="recordId" type="xs:anyURI" />
           <xs:element name="lastModified" type="xs:dateTime"
                       minOccurs="0" />
           <xs:element name="baselineId" type="xs:string"
                       minOccurs="0" />
           <xs:element name="snapshotId" type="xs:string"
                       minOccurs="0" />
           <xs:any namespace="##other" processContents="lax"
                   minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="instanceId" type="cmdbf:MdrScopedIdType" />
  <xs:complexType name="MdrScopedIdType">
    <xs:sequence>
      <xs:element name="mdrId" type="xs:anyURI" minOccurs="1"
        maxOccurs="1" />
      <xs:element name="localId" type="xs:anyURI" minOccurs="1"
        maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="QNameType">
    <xs:attribute name="namespace" type="xs:anyURI"
      use="required" />
    <xs:attribute name="localName" type="xs:NCName"
      use="required" />
  </xs:complexType>

</xs:schema>