<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Copyright 2005 UGS Corp.  All Rights Reserved.
This software and related documentation are proprietary to UGS Corp.
-->
<xsd:schema targetNamespace="http://www.plmxml.org/Schemas/PLMXMLClassificationSchema" xmlns:plm="http://www.plmxml.org/Schemas/PLMXMLSchema" xmlns:cl="http://www.plmxml.org/Schemas/PLMXMLClassificationSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xsd:import namespace="http://www.plmxml.org/Schemas/PLMXMLSchema" schemaLocation="PLMXMLSchema.xsd"/>
  <xsd:annotation>
    <xsd:documentation>
    
                        PLMXML Classification Schema
                        
    </xsd:documentation>
    <xsd:appinfo source="http://www.plmxml.org/Schemas/PLMXMLClassificationSchema">
      <plm:SchemaInfo name="PLMXMLClassificationSchema.xsd" date="2005-01-20" version="6.0" status="release"/>
    </xsd:appinfo>
  </xsd:annotation>
  <!--  -->
  <xsd:simpleType name="AttributeIdType">
    <xsd:annotation>
      <xsd:documentation/>
    </xsd:annotation>
    <xsd:restriction base="xsd:integer"/>
  </xsd:simpleType>
  <!--  -->
  <xsd:simpleType name="ICSIdType">
    <xsd:annotation>
      <xsd:documentation>
      Type used for string based unique id's like class id
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!--  -->
  <xsd:complexType name="LanguageStringType">
    <xsd:annotation>
      <xsd:documentation>
      This is the base type for all Types which are used for String values which might appear 
      in different Languages    
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="language" type="xsd:language" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!--  -->
  <xsd:complexType name="ValueType">
    <xsd:simpleContent>
      <xsd:restriction base="cl:LanguageStringType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="NameType">
    <xsd:simpleContent>
      <xsd:restriction base="cl:LanguageStringType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="ShortNameType">
    <xsd:simpleContent>
      <xsd:restriction base="cl:LanguageStringType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="UserDataType">
    <xsd:simpleContent>
      <xsd:restriction base="cl:LanguageStringType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="DescriptionType">
    <xsd:simpleContent>
      <xsd:restriction base="cl:LanguageStringType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="CommentType">
    <xsd:simpleContent>
      <xsd:restriction base="cl:LanguageStringType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="AnnotationType">
    <xsd:simpleContent>
      <xsd:restriction base="cl:LanguageStringType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:simpleType name="UnitBaseType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="metric"/>
      <xsd:enumeration value="english"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="ReferenceSpecificationType">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!--  -->
  <xsd:complexType name="FileType">
    <xsd:annotation>
      <xsd:documentation>
      This extension of the ExternalFileType allows to define which role the document 
      will have like icon, image, etc.   
      
      Attributes:
      
      usage:             The attribute specified what the file is used for e.g. Icon, Image or 
                         PartFamilyTemplate. Which values are possible depends on the context 
                         where this type is used.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ExternalFileType">
        <xsd:attribute name="usage" type="xsd:string" use="required"/>
        <xsd:attribute name="language" type="xsd:language" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--  -->
  <xsd:attributeGroup name="HistoryAttributes">
    <xsd:attribute name="creationDate" type="xsd:date" use="optional"/>
    <xsd:attribute name="creationUser" type="xsd:string" use="optional"/>
    <xsd:attribute name="modifiedDate" type="xsd:date" use="optional"/>
    <xsd:attribute name="modifiedUser" type="xsd:string" use="optional"/>
  </xsd:attributeGroup>
  <!--  -->
  <xsd:attributeGroup name="CommonClassAttributes">
    <xsd:attribute name="classId" type="cl:ICSIdType" use="required"/>
    <xsd:attribute name="isAbstract" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="isAssembly" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="allowsMultiInst" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="instanceCount" type="xsd:unsignedLong" use="optional"/>
    <xsd:attribute name="childCount" type="xsd:unsignedLong" use="optional"/>
    <xsd:attribute name="templateRefs" type="xsd:IDREFS" use="optional"/>
  </xsd:attributeGroup>
  <!--  -->
  <xsd:attributeGroup name="CommonClassAttrAttributes">
    <xsd:attribute name="attributeId" type="cl:AttributeIdType" use="required"/>
    <xsd:attribute name="isMandatory" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="isProtected" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="isUnique" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="isLocalValue" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="isPropagated" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="arraySize" type="xsd:unsignedLong" use="optional" default="1"/>
    <xsd:attribute name="isExternalArray" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="isReference" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="reference" type="cl:ReferenceSpecificationType" use="optional"/>
  </xsd:attributeGroup>
  <!--  -->
  <xsd:complexType name="KeyLOVValueType">
    <xsd:annotation>
      <xsd:documentation>
      Elements:
      
      Key:               If a Key starts with a '#' it is used as configuration information 
                         ( e.g '#-' separator )
      Value:
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="Key" type="cl:ICSIdType"/>
      <xsd:element name="Value" type="cl:ValueType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="KeyLOVOptionsEnumType">
    <xsd:restriction base="xsd:NMTOKENS">
      <xsd:enumeration value="Exclusive"/>
      <xsd:enumeration value="Optional"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="KeyLOVType">
    <xsd:annotation>
      <xsd:documentation>
      Global element for admin type usage of KeyLOVs
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="Name" type="cl:NameType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Comment" type="cl:CommentType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Values" type="cl:KeyLOVValueType" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="keyLOVId" type="cl:ICSIdType" use="required"/>
        <xsd:attribute name="options" type="cl:KeyLOVOptionsEnumType" use="optional" default="Exclusive"/>
        <xsd:attributeGroup ref="cl:HistoryAttributes"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="KeyLOV" type="cl:KeyLOVType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:complexType name="FormatStringType">
    <xsd:attribute name="scale" type="xsd:positiveInteger" use="required"/>
    <xsd:attribute name="case" use="optional" default="mixed">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="mixed"/>
          <xsd:enumeration value="upper"/>
          <xsd:enumeration value="lower"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="align" use="optional" default="left">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="right"/>
          <xsd:enumeration value="left"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:complexType>
  <xsd:element name="FormatString" type="cl:FormatStringType"/>
  <!--  -->
  <xsd:complexType name="FormatIntegerType">
    <xsd:attribute name="scale" type="xsd:positiveInteger" use="required"/>
    <xsd:attribute name="sign" type="xsd:nonNegativeInteger" use="optional" default="0"/>
  </xsd:complexType>
  <xsd:element name="FormatInteger" type="cl:FormatIntegerType"/>
  <!--  -->
  <xsd:complexType name="FormatFloatType">
    <xsd:attribute name="scale" type="xsd:positiveInteger" use="required"/>
    <xsd:attribute name="precision" type="xsd:nonNegativeInteger" use="required"/>
    <xsd:attribute name="sign" type="xsd:nonNegativeInteger" use="optional" default="0"/>
  </xsd:complexType>
  <xsd:element name="FormatFloat" type="cl:FormatFloatType"/>
  <!--  -->
  <xsd:simpleType name="FormatDateType">
    <xsd:annotation>
      <xsd:documentation>
      Date format string. Defined values are:
      
      CCYYMMDDhhmmss
      YYMMDDhhmmss
      DDMMCCYYhhmmss
      DDMMYYhhmmss
      CCYYMMDD
      DD.MM.CCYY hh:mm:ss
      DD.MM.YY hh:mm:ss
      DD.MM.CCYY
      DD.MM.YY
      MM-DD-CCYY hh:mm:ss
      MM-DD-YY hh:mm:ss
      MM-DD-CCYY
      MM-DD-YY
      DD-MMM-CCYY hh:mm:ss
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <xsd:element name="FormatDate" type="cl:FormatDateType"/>
  <!--  -->
  <xsd:complexType name="FormatKeyLOVType">
    <xsd:annotation>
      <xsd:documentation>
      Attributes:
      
      keyLOVId:
      ref2keyLOVRef:      Reference to the keyLOV definition
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="keyLOVId" type="xsd:negativeInteger" use="required"/>
    <xsd:attribute name="ref2keyLOVRef" type="xsd:IDREF" use="optional"/>
  </xsd:complexType>
  <xsd:element name="FormatKeyLov" type="cl:FormatKeyLOVType"/>
  <!--  -->
  <xsd:simpleType name="UnitType">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <xsd:element name="Unit" type="cl:UnitType"/>
  <!--  -->
  <xsd:complexType name="FormatAdminType">
    <xsd:sequence>
      <xsd:choice>
        <xsd:element ref="cl:FormatString"/>
        <xsd:element ref="cl:FormatInteger"/>
        <xsd:element ref="cl:FormatFloat"/>
        <xsd:element ref="cl:FormatDate"/>
        <xsd:element ref="cl:FormatKeyLov"/>
      </xsd:choice>
      <xsd:element ref="cl:Unit" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="FormatUserType">
    <xsd:choice>
      <xsd:element ref="cl:FormatString"/>
      <xsd:element ref="cl:FormatInteger"/>
      <xsd:element ref="cl:FormatFloat"/>
      <xsd:element ref="cl:FormatDate"/>
      <xsd:element ref="cl:KeyLOV"/>
    </xsd:choice>
  </xsd:complexType>
  <!--  -->
  <!-- ******************************** DictionaryAttribute ********************************* -->
  <!--  -->
  <xsd:complexType name="DictionaryAttributeType">
    <xsd:annotation>
      <xsd:documentation>
      Represents the global attribute definition referenced from the class attribute definition
      
      Attributes:
      
      attributeId:
      reference:          This attribute describes how the value for this attributes is acquired 
                          if used as reference attribute
      
      Elements:
      
      Name:               Display name of the Attribute
      ShortName:          Short version of the display name
      Annotation:         The annotation is used as a reference in a graphical representation
                          of the class where this attribute is used
      Format:             Defines the type of values for this attribute if used in metric unit base classes
      AltFormat:          Defines the type of values for this attribute if used in english unit base classes
      MinValue:           Defines the minimum Value for this attribute. This is only suitable for 
                          attributes of type integer or float
      MaxValue:           Defines the maximum Value for this attribute. This is only suitable for 
                          attributes of type integer or float
      DefaultValue:       The default value for instances of classes using this attribute. 
                          This value can be overwritten in the class attribute definition
      UserData1:
      UserData2:
      Description:        Provides a display description for this Attribute
      Comment:
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="Name" type="cl:NameType" maxOccurs="unbounded"/>
          <xsd:element name="ShortName" type="cl:ShortNameType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Annotation" type="cl:AnnotationType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Format" type="cl:FormatAdminType"/>
          <xsd:element name="AltFormat" type="cl:FormatAdminType" minOccurs="0"/>
          <xsd:element name="MinValue" type="cl:ValueType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="MaxValue" type="cl:ValueType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="DefaultValue" type="cl:ValueType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="UserData1" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="UserData2" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Description" type="cl:DescriptionType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Comment" type="cl:CommentType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="attributeId" type="cl:AttributeIdType" use="required"/>
        <xsd:attribute name="reference" type="cl:ReferenceSpecificationType" use="optional"/>
        <xsd:attributeGroup ref="cl:HistoryAttributes"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DictionaryAttribute" type="cl:DictionaryAttributeType" substitutionGroup="plm:AttribOwner"/>
  <!--  -->
  <xsd:complexType name="ParentType">
    <xsd:simpleContent>
      <xsd:extension base="cl:ICSIdType">
        <xsd:attribute name="parentRef" type="xsd:IDREF" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!--  -->
  <xsd:complexType name="ClassAttributeOptionType">
    <xsd:attribute name="optionType" type="xsd:string" use="optional"/>
    <xsd:attribute name="name" type="xsd:string" use="required"/>
    <xsd:attribute name="value" type="xsd:string" use="optional"/>
  </xsd:complexType>
  <!--  -->
  <xsd:complexType name="AbstractClassAttributeType">
    <xsd:annotation>
      <xsd:documentation>
      Attributes:
      
      CommonClassAttrAttributes:
      
      Elements:
      
      Annotation:         The Annotation is used to identify a attribute within one class and act 
                          as a reference into a related class image which visualises the attribute. 
                          If no value is given a default value is taken from the Annotation definition 
                          in the dictionary attribute definition
                          
      MinValue:           Defines  the minimum allowed value for values of this attribute. This 
                          definition overwrites the definition in the dictionary attribute definition and 
                          must be greater than or equal to the definition there
      MaxValue:           Defines  the minimum allowed value for values of this attribute. This 
                          definition overwrites the definition in the dictionary attribute definition and 
                          must be less than or equal to the definition there
                          
      DefaultValue:       Defines a default value for new instances of this class. This definition 
                          overwrites the definition in the dictionary attribute definition.
                          
      Option:
      UserData1:          Allows the user to add his own information to the class
      UserData2:          Allows the user to add his own information to the class
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="Annotation" type="cl:AnnotationType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="MinValue" type="cl:ValueType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="MaxValue" type="cl:ValueType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="DefaultValue" type="cl:ValueType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="Option" type="cl:ClassAttributeOptionType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="UserData1" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="UserData2" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="cl:CommonClassAttrAttributes"/>
  </xsd:complexType>
  <!--  -->
  <xsd:complexType name="AbstractClassType">
    <xsd:annotation>
      <xsd:documentation>
      Attributes:
      
      CommonClassAttributes
      HistoryAttributes
      
      Elements:
      
      Name:               Display name for the class
      ShortName:          Short version of the display name for the class
      UserData1:
      UserData2:
      Description:        A description of the class which might be displayed to the user
      Comment:            General comment intended for the maintainer of the class
      File:               Special supported values for format are Image, Icon and Template
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="Name" type="cl:NameType" maxOccurs="unbounded"/>
          <xsd:element name="ShortName" type="cl:ShortNameType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="UserData1" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="UserData2" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Description" type="cl:DescriptionType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Comment" type="cl:CommentType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="File" type="cl:FileType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attributeGroup ref="cl:CommonClassAttributes"/>
        <xsd:attributeGroup ref="cl:HistoryAttributes"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--  -->
  <!-- ******************************* AdminClass ****************************** -->
  <!--  -->
  <xsd:complexType name="AdminClassAttributeType">
    <xsd:complexContent>
      <xsd:extension base="cl:AbstractClassAttributeType">
        <xsd:attribute name="ref2AttributeRef" type="xsd:IDREF" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="AdminClassType">
    <xsd:annotation>
      <xsd:documentation>
      The class definition is the core element which is ued to build the classification hierarchy 
      and used to store the instances (ICOs)	
      
      Attributes:
      
      isGroup:
      
      Elements:
      
      Parent:             Id of the parent class
      Attribute:
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="cl:AbstractClassType">
        <xsd:sequence>
          <xsd:element name="Parent" type="cl:ParentType"/>
          <xsd:element name="Attribute" type="cl:AdminClassAttributeType" minOccurs="0" maxOccurs="unbounded">
			<xsd:annotation>
				<xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=AdminAttribute</xsd:appinfo>
			</xsd:annotation>
          </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="isGroup" type="xsd:boolean" use="optional" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AdminClass" type="cl:AdminClassType" substitutionGroup="plm:AttribOwner"/>
  <!--  -->
  <!-- **************************** AdminView ************************** -->
  <!--  -->
  <xsd:complexType name="AdminViewAttributeOptions">
    <xsd:attribute name="name" type="xsd:string" use="required"/>
    <xsd:attribute name="value" type="xsd:string" use="optional"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="AdminViewAttributeType">
    <xsd:annotation>
      <xsd:documentation>
      Attributes:
      
      attributeId:
      isMandatory:
      isProtected:
      
      Elements:
      
      PreOptions:         Options to configure the UI before the actual field for the attribute. 
                          E.g. start grouping in a titled frame
      Options:            Options to configure the UI appearence af the attribute field
      PostOptions:        Options to configure the UI after the actual field for the attribute.  
                          E.g. end grouping in a titled frame
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="PreOptions" type="cl:AdminViewAttributeOptions" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="Options" type="cl:AdminViewAttributeOptions" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="PostOptions" type="cl:AdminViewAttributeOptions" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="attributeId" type="cl:AttributeIdType" use="required"/>
    <xsd:attribute name="isMandatory" type="xsd:boolean" use="optional" default="false"/>
    <xsd:attribute name="isProtected" type="xsd:boolean" use="optional" default="false"/>
  </xsd:complexType>
  <xsd:element name="AdminViewAttribute" type="cl:AdminViewAttributeType"/>
  <!--  -->
  <xsd:complexType name="AdminViewType">
    <xsd:annotation>
      <xsd:documentation>
      The view definition is related to a class. It allows configuration of the appearance
      of a class for certain users and/or groups.
      
      Attributes:
      
      classId:
      viewId:
      ref2classRef:
      type:               
      HistoryAttributes:
      
      Elements:
      
      Name:               Display name of the view
      ShortName:          A short display name
      UserData1:
      UserData2:
      Description:
      Comment:
      File:               Special values for format are Image, Icon and Template
      AdminViewAttribute: 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="Name" type="cl:NameType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="ShortName" type="cl:ShortNameType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="UserData1" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="UserData2" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Description" type="cl:UserDataType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Comment" type="cl:CommentType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="File" type="cl:FileType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="cl:AdminViewAttribute" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="classId" type="cl:ICSIdType" use="required"/>
        <xsd:attribute name="viewId" type="cl:ICSIdType" use="required"/>
        <xsd:attribute name="ref2classRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="type" use="optional">
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
              <xsd:enumeration value="default"/>
              <xsd:enumeration value="user"/>
              <xsd:enumeration value="group"/>
              <xsd:enumeration value="subclass"/>
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:attribute>
        <xsd:attributeGroup ref="cl:HistoryAttributes"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AdminView" type="cl:AdminViewType" substitutionGroup="plm:AttribOwner">
    <xsd:unique name="sAttr2">
      <xsd:selector xpath="Attribute"/>
      <xsd:field xpath="@AttributeId"/>
    </xsd:unique>
  </xsd:element>
  <!-- -->
  <!-- ***************************** UserClass ********************************** -->
  <!-- -->
  <xsd:complexType name="UserClassAttributeType">
    <xsd:complexContent>
      <xsd:extension base="cl:AbstractClassAttributeType">
        <xsd:sequence>
          <xsd:element name="Name" type="cl:NameType" maxOccurs="unbounded"/>
          <xsd:element name="ShortName" type="cl:ShortNameType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Format" type="cl:FormatUserType"/>
          <xsd:element name="Unit" type="cl:UnitType" minOccurs="0"/>
          <xsd:element name="Description" type="cl:DescriptionType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="classid" type="cl:ReferenceSpecificationType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="UserClassType">
    <xsd:annotation>
      <xsd:documentation>
      Class definition as used by the end user. It combines the class, view, dictionary and keylov 
      definition into one. This definition can only be used for readonly purposes.
      
      Elements:
      
      Parent:
      Attribute:
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="cl:AbstractClassType">
        <xsd:sequence>
          <xsd:element name="Parent" type="cl:ParentType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Attribute" type="cl:AdminClassAttributeType" minOccurs="0" maxOccurs="unbounded">
			<xsd:annotation>
				<xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=UserAttribute</xsd:appinfo>
			</xsd:annotation>
          </xsd:element>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="UserClass" type="cl:UserClassType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ******************************** ICO ********************************** -->
  <!-- -->
  <xsd:complexType name="ICOPropertyType">
    <xsd:annotation>
      <xsd:documentation>
      Attributes:
      
      attributeId:
      language:
      icoRef:             Holds the reference to another ICO if the the property is of type 
                          reference to ICO.
      
      Elements:

      Value:              A property might have single or multiple values
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="Value" type="cl:ValueType" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="attributeId" type="cl:AttributeIdType" use="required"/>
    <xsd:attribute name="language" type="xsd:language" use="optional"/>
    <xsd:attribute name="icoRef" type="xsd:IDREF" use="optional"/>
  </xsd:complexType>
  <!--  -->
  <xsd:complexType name="ICOClassIdType">
    <xsd:simpleContent>
      <xsd:extension base="cl:ICSIdType">
        <xsd:attribute name="subclassId" type="cl:ICSIdType" use="optional"/>
        <xsd:attribute name="ref2classRef" type="xsd:IDREF" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!--  -->
  <xsd:complexType name="ICOType">
    <xsd:annotation>
      <xsd:documentation>
      The view definition is related to a class. It allows configuration of the appearance
      of a class for certain users and/or groups.
      
      Attributes:
      
      icoId:              The id of the ICO. In case there is no wsoRef specified the icoId is treated 
                          to be unique unless a corresponding workspace object exists in the target database
      relatedRefs:        References to other ICOs classifying the same WSO
      wsoRef:             Reference to the classified object if defined in the XML document
      HistoryAttributes:
      
      Elements:

      ClassId:            The ClassId defines to which class this ICO belongs. The ref2Class attribute 
                          is set if that class is defined within the same plmxml document. On import that 
                          class definition has to be successfully imported to allow the ICO to be imported.
      Parent:             This element lists ALL parents of the class the ICO is stored in. The primary 
                          use is to support a mapping into a different class hierarchy without the transfer 
                          of the class definition to get the isMemberOf information. On import this 
                          information will be ignored.
      Property:           The actual format of  property value is defined by the attribute definition 
                          referenced by attributeId
      File: 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="ClassId" type="cl:ICOClassIdType"/>
          <xsd:element name="Parent" type="cl:ICSIdType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="Property" type="cl:ICOPropertyType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="File" type="cl:FileType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="icoId" type="xsd:string" use="required"/>
        <xsd:attribute name="relatedRefs" type="xsd:IDREFS" use="optional"/>
        <xsd:attribute name="wsoRef" type="xsd:IDREF" use="optional"/>
        <xsd:attributeGroup ref="cl:HistoryAttributes"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ICO" type="cl:ICOType" substitutionGroup="plm:AttribOwner"/>
  <!--  -->
  <xsd:complexType name="ClassificationType">
    <xsd:annotation>
      <xsd:documentation>
      Elements of this type relate their parent element to its classification 
      information (ICO).
      
      Attributes:
      
      icoRefs:          Reference to ICO elements. 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:attribute name="icoRefs" type="plm:uriReferenceListType" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Classification" type="cl:ClassificationType" substitutionGroup="plm:Attribute"/>
  <!--  -->
</xsd:schema>
