<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Copyright 2008 Siemens Product Lifecycle Management Software Inc. All Rights Reserved.
This software and related documentation are proprietary to 
Siemens Product Lifecycle Management Software Inc.
-->
<xsd:schema targetNamespace="http://www.plmxml.org/Schemas/PLMXMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:plm="http://www.plmxml.org/Schemas/PLMXMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xml:lang="en">
  <xsd:annotation>
    <xsd:documentation source="http://www.plmxml.org/Schemas/PLMXMLSchema/History">
      <plm:SchemaChange author="davidj" date="2005-05-11" version="6.0.1.26">
        <plm:Description>
        Add CGM to RepresentationFormatType
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='RepresentationFormatType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-05-11" version="6.0.1.26">
        <plm:Description>
        Add Property and PropertyGroup. 
        Rename MassPropertyType to MassPropertiesType.
        Add LengthProperty, MassProperty, and Colour.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='PropertyBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='PropertyGroupType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='MassPropertiesType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LengthPropertyType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='MassPropertyType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ColourType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-05-11" version="6.0.1.26">
        <plm:Description>
        Add propertyRefs attribute and PropertyGroup sub-element to:
        Structure, StructureRevision, StructureRevisionView, GDE, StructureUsage, StructureView.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureRevisionBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureRevisionViewBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='GDEBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureUsageBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureViewType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-05-11" version="6.0.1.26">
        <plm:Description>
        Add occurrenceId attribute to OccurrenceType.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='OccurrenceType']/attribute[@name='occurrenceId']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="cherevac" date="2005-06-10" version="6.0.1.26">
        <plm:Description>
        Add support for ModelViews.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='SectionType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductViewType']"/>
        <plm:Reference locationRef="..//schema/simpleType[@name='ProductViewUsageType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-06-15" version="6.0.1.26">
        <plm:Description>
        Add Occurrence Filter elements.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='OccurrenceFilterBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='SetFilterType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='GroupFilterType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='PropertyFilterType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProximityZoneType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ZoneFilterType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-06-15" version="6.0.1.26">
        <plm:Description>
        Change sourceRef attribute to optional in ConfiguredOccurrenceGroup.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ConfiguredOccurrenceGroupType']/attribute[@name='sourceRef']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-06-15" version="6.0.1.26">
        <plm:Description>
        Add Material Properties, and allow Properties of CompoundRep.
        Rename VolumeType, DensityType, and CentreOfMassType to DeprecatedVolumeType,
        DeprecatedDensityType, and DeprecatedCentreOfMassType. Introduce new types for
        Volume, Density, and CentreOfMass.  
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ThermalExpansionCoefficientType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ThermalConductivityType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='SpecificHeatCapacityType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ModulusOfElasticityType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='PoissonsRatioType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='YieldStressType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UltimateStressType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UltimateElongationType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='SurfaceAreaType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='VolumeType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='CentreOfMassType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='InertiaType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DensityType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='CompoundRepType']/element[@ref='plm:PropertyGroup']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-06-21" version="6.0.1.26">
        <plm:Description>
        Derive Representation and CompoundRep from PropertiesBase instead of AttribOwnerBase
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='RepresentationType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='CompoundRepType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-06-21" version="6.0.1.26">
        <plm:Description>
        Add DisplayPreferences Property
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DisplayPreferencesType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="craigw" date="2005-06-21" version="6.0.1.26">
        <plm:Description>
        Add addition internal Code Generator app info data to DeprecatedVolumeType, DeprecatedDensityType and
        DeprecatedCentreOfMassType. 
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DeprecatedVolumeType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DeprecatedDensityType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DeprecatedCentreOfMassType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="craigw" date="2005-08-10" version="6.0.1.26">
        <plm:Description>
        Add 'default' and 'state' attributes to support default and active ProductViews.    
        </plm:Description>
        <plm:Reference locationRef="..//schema//complexType[@name='ProductViewType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="craigw" date="2005-08-10" version="6.0.1.26">
        <plm:Description>
        Add 'linkedGroupRef' attribute to to Occurrence support OccurrenceGroup in the context of a Composition.
        </plm:Description>
        <plm:Reference locationRef="..//schema//complexType[@name='OccurrenceType']/attribute[@name='linkedGroupRef']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="craigw" date="2005-08-10" version="6.0.1.26">
        <plm:Description>
        Supports consistent loading and visualisation of products across different applications through new 
        LoadOptions element referenced from DocumentHeaderType.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='LoadOptionModeType']"/>
        <plm:Reference locationRef="..//schema/simpleType[@name='LoadOptionErrorActionType']"/>
        <plm:Reference locationRef="..//schema/simpleType[@name='LoadOptionComponentSetType']"/>
        <plm:Reference locationRef="..//schema/simpleType[@name='LoadOptionRevisionType']"/>
        <plm:Reference locationRef="..//schema/simpleType[@name='LoadOptionLinkedComponentsType']"/>
        <plm:Reference locationRef="..//schema/simpleType[@name='LoadOptionPartFamilyComponentsType']"/>
        <plm:Reference locationRef="..//schema/simpleType[@name='LoadOptionPreferredRepresentationsScopeType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LoadOptionPreferredRepresentationType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LoadOptionPreferredRepresentationsType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LoadOptionSearchPathType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LoadOptionSearchPathsType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LoadOptionsType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DocumentHeaderType']/element[@name='LoadOptions']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="craigw" date="2005-10-20" version="6.0.1.26">
        <plm:Description>
        A new LogicalExpression has been added to the base schema - 'PathIs'. This 
        type allows an Instance path through a hierarchical structure to be defined that 
        must be matched in order to return 'true'.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='PathIsType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-10-17" version="6.0.1.26">
        <plm:Description>
        Add RepresentationEntity, EntityPropertyGroup, and Visibility Property. Allow EntityRef
        as subelement of Representation and CompoundRep. Allow RepresentationEntity and
        EntityPropertyGroup as subelement of StructureRevisionView. Allow EntityPropertyGroup
        as subelement of StructureUsage.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='RepresentationEntityType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='EntityPropertyGroupType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='VisibilityType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2005-11-01" version="6.0.1.26">
        <plm:Description>
        Allow Section and ConstructionGeometry as sub-elements of PLMXML by adding
        substitutionGroups.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='SectionType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ConstructionGeometryType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-01-03" version="6.0.1.32">
        <plm:Description>
        Add "software" and "processorGateway" to GDERelationshipType
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='GDERelationshipType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="cherevac" date="2006-02-22" version="6.0.1.039">
        <plm:Description>
        Add "type" and "baseRef" attributes to Representation and CompoundRep
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='RepresentationType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='CompoundRepType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-03-16" version="6.0.1.039">
        <plm:Description>
        Add "targetRef" and "pathRefs" to GDEReferenceType. Deprecate EntityRef sub-element.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='GDEReferenceType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2006-03-16" version="6.0.1.039">
        <plm:Description>
        Add "mass" to GDERelationshipType"
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='GDERelationshipType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2006-06-01" version="6.0.1.59">
        <plm:Description>
        Add ViewControl to PLMXML element
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ViewControlType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='PLMXMLType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-06-01" version="6.0.1.59">
        <plm:Description>
        Add CGR to RepresentationFormatType
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='RepresentationFormatType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-06-01" version="6.0.1.59">
        <plm:Description>
        Add unitRef to ProductType
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-06-22" version="6.0.1.59">
        <plm:Description>
        Add Discipline, DisciplineLevel and DisciplineRelation. Modify Organisation and User.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DisciplineType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DisciplineLevelType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DisciplineRelation']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='OrganisationType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UserType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-06-29" version="6.0.1.59">
        <plm:Description>
        Add CoordinateSystemDisplay, PointDisplay, LineDisplay and Translucency
        Properties. Allow PropertyGroup as sub-element of Geometry.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='CoordinateSystemDisplayType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='PointDisplayType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LineDisplayType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='TranslucenceType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='GeometryBase']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-07-26" version="6.0.1.59">
        <plm:Description>
        Add "ruleRefs" to StructureRevisionView
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureRevisionViewBase']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-09-01" version="6.0.1.78">
        <plm:Description>
        Add OccurrenceControl, OccurrenceControlRevision, and SymbolicOccurrence.
        Add attributes to Occurrence and ProductRevisionView. 
        Allow SymbolicOccurrences as sub-elements of ProductView and StructureRevisionView
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='OccurrenceControlType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='OccurrenceControlRevisionType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='SymbolicOccurrenceType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='OccurrenceType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureRevisionViewBase']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductViewType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-09-29" version="6.0.1.78">
        <plm:Description>
        Add Suppression Property.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='SuppressionType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-10-05" version="6.0.1.78">
        <plm:Description>
        Add Transform as sub-element of CompoundRep, and transformRef attribute.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='CompoundRepType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-11-01" version="6.0.1.85">
        <plm:Description>
        Add Layer Property.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='LayerType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-11-01" version="6.0.1.85">
        <plm:Description>
        Add values to PointStyle enum.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='PointStyleEnum']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-11-03" version="6.0.1.85">
        <plm:Description>
        Add TraceabilityRelation
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='TraceabilityRelationType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2007-01-11" version="6.0.1.105">
        <plm:Description>
        Add Design, DesignRevision, DesignRevisionView and RepresentedByRelation.
        Add "designRequired" and "source" attributes to Product. Add "primaryDesignRef"
        attribute to ProductRevision.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DesignType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DesignRevisionType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DesignRevisionViewType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='RepresentedByRelationType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="craigw" date="2007-01-11" version="6.0.1.105">
        <plm:Description>
        Clarify in-line documentation for UserData.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='UserDataElementType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="davidj" date="2006-01-19" version="6.0.1.108">
        <plm:Description>
        Add Requirement and RequirementRevision elements.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='RequirementType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='RequirementRevisionType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2007-02-28" version="6.0.1.108">
        <plm:Description>
        Add the value "pose" to the ProductViewUsageType enum for Robotics.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='ProductViewUsageType']/enumeration[@value='pose']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2007-02-28" version="6.0.1.108">
        <plm:Description>
        Add DefinitionRelation. Deprecate primaryDesignRef from ProductRevision.
        Add source and designRequired to ProductRevision. Add designRequired to
        ProductRevisionView and StructureUsage. Add primaryDesign to
        RepresentedByRelation.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductRevisionType']/attribute[@name='primaryDesignRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductRevisionType']/attribute[@name='source']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductRevisionType']/attribute[@name='designRequired']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductRevisionViewType']/attribute[@name='designRequired']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='StructureUsageBase']/attribute[@name='designRequired']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='RepresentedByRelationType']/attribute[@name='primaryDesign']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DefinitionRelationType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="cherevac" date="2006-03-01" version="6.0.1.x">
        <plm:Description>
        Add Derived element, allow Fix and Derived in VaruantRule.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DerivedType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='VariantRule']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2007-06-20" version="6.0.1.127">
        <plm:Description>
        Add displayAnnotations and displayGeometry to DisplayPreferences.
        Add propertyRefs to GDEInstanceGroup.
        Allow DisplayPreferences under PropertyGroup under GDEInstanceGroup.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DisplayPreferencesType']/attribute[@name='displayAnnotations']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DisplayPreferencesType']/attribute[@name='displayGeometry']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='GDEInstanceGroupType']/attribute[@name='propertyRefs']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='GDEInstanceGroupType']/element[@ref='plm:PropertyGroup']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2007-10-12" version="6.0.2.48">
        <plm:Description>
        Add tri-state boolean type.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='TriStateBooleanEnum']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2007-10-25" version="6.0.2.51">
        <plm:Description>
        Add propertyRefs to CompoundRep. Add propertyRefs and PropertyGroup to
        Representation. Add GeometrySet.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='CompoundRepType']/attribute[@name='propertyRefs']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='RepresentationType']/attribute[@name='propertyRefs']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='RepresentationType']/element[@ref='PropertyGroup']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='GeometrySetType']"/>
        <plm:Reference locationRef="..//schema/element[@name='GeometrySet']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2007-10-31" version="6.0.2.51">
        <plm:Description>
        Add viewOrientation attribute to ProductView.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='ViewOrientationEnum']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductViewType']/attribute[@name='viewOrientation']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-01-23" version="6.0.2.72">
        <plm:Description>
        Introduce compound bounds.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='BoundingType']/enumeration[@value='compound']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='BoundType']/element[@ref='Bound']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='BoundType']/attribute[@name='values']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-04-16" version="6.0.2.108">
        <plm:Description>
        Add vendorRef attribute to Product and web attribute to Address.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductType']/attribute[@name='vendorRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='AddressType']/attribute[@name='web']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2007-04-18" version="6.0.2.108">
        <plm:Description>
        Add calendarRef attribute to User.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='UserType']/attribute[@name='calendarRef']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-04-24" version="7.0.0.15">
        <plm:Description>
        Multiple language text added.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DescriptionBase']/attribute[@name='nameRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DescriptionBase']/attribute[@name='descriptionRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UserListElementType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UserListElementType']/attribute[@name='descriptionRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UserDataElementType']/attribute[@name='titleRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UserDataElementType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UserDataType']/attribute[@name='typeRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='UserEnumDataType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DocumentBase']/attribute[@name='languages']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LoadOptionsType']/attribute[@name='variantRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='PLMXMLType']/element[@name='Text']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='InstanceBase']/attribute[@name='instanceTypeRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='OptionValueType']/attribute[@name='vRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='OptionIsType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='SetType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='SetDefaultType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='FixType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DerivedType']/attribute[@name='valueRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='CheckMessageType']/attribute[@name='messageRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='GeneralUnitComponentType']/attribute[@name='nameRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DisciplineRelationType']/attribute[@name='levelRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DisciplineLevelType']/attribute[@name='nameRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='AssociatedDataSetType']/attribute[@name='roleRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DataSetType']/attribute[@name='typeRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DrawingType']/attribute[@name='titleRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ProductDependencyType']/attribute[@name='typeRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='AssociatedAttachmentType']/attribute[@name='roleRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='LengthPropertyType']/attribute[@name='typeRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='ColourType']/attribute[@name='typeRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='RequirementRevisionType']/attribute[@name='plainTextRef']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='MultipleLanguageItemType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='MultipleLanguageTextType']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-05-01" version="7.0.0.16">
        <plm:Description>
        Move VendorRoleEnum from the PDM schema to the base schema and rename to
        OrganisationRoleEnum.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='OrganisationRoleEnum']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-05-01" version="7.0.0.16">
        <plm:Description>
        Introduce GeneralExpression.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='GeneralExpressionBase']"/>
        <plm:Reference locationRef="..//schema/element[@name='GeneralExpression']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-05-07" version="7.0.0.21">
        <plm:Description>
        Allow user-definable properties on elements that represent
        relationships.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='DisciplineRelationType']/element[@ref='UserData']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='AssociatedDataSetType']/element[@ref='UserData']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-05-09" version="7.0.0.24">
        <plm:Description>
        Currency and Money moved from the Scheduling schema.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='CurrencyType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='MoneyType']"/>
        <plm:Reference locationRef="..//schema/element[@name='Money']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-05-16" version="7.0.0.25">
        <plm:Description>
        ValidationResults enhancements.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='ExpressionFormatEnum']/enumeration[@value='nx']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-06-25" version="7.0.0.42">
        <plm:Description>
        Enhancement for Workflow Dynamic Participants.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ResourcePoolType']/attribute[@name='allMembers']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2008-09-09" version="7.0.0.47">
        <plm:Description>
        Deprecate PointStyleEnum.point.
        </plm:Description>
        <plm:Reference locationRef="..//schema/simpleType[@name='PointStyleEnum']/enumeration[@value='point']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="howardmu" date="2009-03-11" version="7.0.1.15">
        <plm:Description>
        Indicate a preferred language for multiple language strings.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='MultipleLanguageTextType']/attribute[@name='primary']"/>
      </plm:SchemaChange>
      <plm:SchemaChange author="craigw" date="2009-03-30" version="7.0.1.26">
        <plm:Description>
          Introduce ApplicationType.
        </plm:Description>
        <plm:Reference locationRef="..//schema/complexType[@name='ApplicationType']"/>
        <plm:Reference locationRef="..//schema/complexType[@name='DocumentHeaderType']/attribute[@name='Application']"/>
      </plm:SchemaChange>
    </xsd:documentation>
    <xsd:documentation>
    
                        PLM XML Schema
                        
    </xsd:documentation>
    <xsd:appinfo source="http://www.plmxml.org/Schemas/PLMXMLSchema">
      <plm:SchemaInfo name="PLMXMLSchema.xsd" date="2008-05-02" version="6.0" status="release"/>
    </xsd:appinfo>
  </xsd:annotation>
  <xsd:attributeGroup name="idGroup">
    <xsd:annotation>
      <xsd:documentation>
      The 'id' attribute is used for references between elements. It 
      should not be use to encode other information.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="id" type="xsd:ID" use="optional"/>
  </xsd:attributeGroup>
  <!-- -->
  <xsd:complexType name="IdBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=IdObject</xsd:appinfo>
    </xsd:annotation>
    <xsd:attributeGroup ref="plm:idGroup"/>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="DescriptionType">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="anyURIType">
    <xsd:annotation>
      <xsd:documentation>
      plm:anyURIType is used in place of xsd:anyURI, since we want to allow
      filenames as well as genuine URIs.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="ApplicationRefType">
    <xsd:annotation>
      <xsd:documentation>
      The ApplicationRef element is meant to relate the parent element (Product, 
      Representation, etc) back to the owning entity in the sending  application.

      Attributes:

      application:  the context in which the contents of the label and version attributes 
                    make sense. Whether this field includes an application version number 
                    is up to the application, as long as it starts with something 
                    identifiable to the sending application.

      label:        the string which identifies the application entity - the value of
                    this field is only meaningful to the sending/authoring application.
                    The receiving application can compare the contents of the attribute
                    to test if two entities are the 'same' entity. But the actual value
                    is meaningless to the receiving application.

      version:      the optional string attribute which identifies the version of the
                    application entity. This attribute can only be used to test if the
                    versions of an entity are the same (i.e. the test is only meaningful
                    if the label attribute values are the same). No version ordering can
                    be deduced from the value. Similar to the label attribute, the 
                    version attribute contents are meaningless to the receiving 
                    application.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="application" type="xsd:string" use="optional"/>
    <xsd:attribute name="label" type="xsd:string" use="required"/>
    <xsd:attribute name="version" type="xsd:string" use="optional"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="DescriptionBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=DescriptionObject</xsd:appinfo>
      <xsd:documentation>
      The DescriptionBase type is an abstract base type for PLM XML types which
      have optional description and ApplicationRef.

      Attributes:

      name:             descriptive or display name
      nameRef:          References a multiple language version of name. If
                        multiple language support is required, nameRef should be
                        used in addition to name.
      descriptionTextRef: References a multiple language version of description.
                        If multiple language support is required,
                        descriptionTextRef should be used in addition to
                        description.

      Sub-elements:

      Description:     Readable textual description of the element.
      ApplicationRef:  A means of uniquely identifying the element in terms
                       understood by the sending system. More than one is
                       allowed (at most one per Application).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:sequence>
          <xsd:element name="Description" type="plm:DescriptionType" minOccurs="0"/>
          <xsd:element name="ApplicationRef" type="plm:ApplicationRefType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="nameRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
        <xsd:attribute name="descriptionTextRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="AttribOwnerBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements which have PLMXML Attributes, i.e. elements
      derived from plm:AttributeBase.
      
      Attributes:
        
      attributeRefs: reference to Attributes
               
      Elements:
      
      Attribute:     any element derived from AttributeBase.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DescriptionBase">
        <xsd:sequence>
          <xsd:element ref="plm:Attribute" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="attributeRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:Attribute"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AttribOwner" type="plm:AttribOwnerBase"/>
  <!-- -->
  <xsd:attributeGroup name="referenceGroup">
    <xsd:attribute name="location" type="plm:anyURIType" use="optional">
      <xsd:annotation>
        <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
      </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="load" type="xsd:boolean" default="false"/>
  </xsd:attributeGroup>
  <!-- -->
  <xsd:simpleType name="uriReferenceListType">
    <xsd:list itemType="plm:anyURIType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="IntegerListType">
    <xsd:list itemType="xsd:integer"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="BooleanListType">
    <xsd:list itemType="xsd:boolean"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="FloatListType">
    <xsd:list itemType="xsd:float"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="DoubleListType">
    <xsd:list itemType="xsd:double"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="VectorType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="DirectionType">
    <xsd:restriction base="plm:VectorType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="PositionType">
    <xsd:simpleContent>
      <xsd:extension base="plm:VectorType">
        <xsd:attributeGroup ref="plm:idGroup"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="NormalType">
    <xsd:simpleContent>
      <xsd:extension base="plm:VectorType">
        <xsd:attributeGroup ref="plm:idGroup"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="MatrixType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:minLength value="1"/>
      <xsd:maxLength value="16"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="TransformationType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="general"/>
      <xsd:enumeration value="general3"/>
      <xsd:enumeration value="rotate"/>
      <xsd:enumeration value="translate"/>
      <xsd:enumeration value="scale"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="TransformType">
    <xsd:simpleContent>
      <xsd:extension base="plm:MatrixType">
        <xsd:attributeGroup ref="plm:idGroup"/>
        <xsd:attribute name="type" type="plm:TransformationType" default="general"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:element name="Transform" type="plm:TransformType"/>
  <!-- -->
  <xsd:complexType name="BoxBoundType">
    <xsd:annotation>
      <xsd:documentation>
      This is a legacy box type. The 'Bound' element should be used.
      </xsd:documentation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="LowCorner" type="plm:VectorType"/>
      <xsd:element name="HighCorner" type="plm:VectorType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="SphereBoundType">
    <xsd:annotation>
      <xsd:documentation>
      This is a legacy sphere bound type. The 'Bound' element should be used.
      </xsd:documentation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="Radius" type="xsd:double"/>
      <xsd:element name="Centre" type="plm:VectorType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="BoundingType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="box"/>
      <xsd:enumeration value="sphere"/>
      <xsd:enumeration value="compound"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="ZoneBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      This is an abstract base type for elements representing a subset of
      3D space.
      
      Attributes:
      
      transformRef:  Optional transform, to apply to data in derived types.
                     For example, the data in a Bound can define an axis-
                     aligned box. By using a Transform, this can then 
                     represent a non-axis-aligned box.
      
      Elements:
      
      Transform:     Optional transform. Do not use both transformRef and
                     Transform sub-element.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element ref="plm:Transform" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="transformRef" type="xsd:IDREF" use="optional" plm:refType="plm:Transform"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Zone" type="plm:ZoneBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:complexType name="BoundType">
    <xsd:annotation>
      <xsd:documentation>
      A simple or compound bound or zone. Simple bounds are boxes or spheres.
      Compound bounds are the union of sub-bounds represented by Bound
      sub-elements. Any transform on a compound bound is applied after the
      union.

      Attributes:

      type:             box, sphere or compound.
      values:           If type is box, values is a list of 6 doubles giving the
                        coordinates of the centre, the x half width, the y half
                        width and the z half width.
                        If type is sphere, values is a list of 4 doubles giving
                        the centre and the radius.
                        If type is compound, values is ignored.

      Sub-elements:    

      Bound:            If type is compound, the Bound sub-elements represent
                        the sub-bounds, which may be simple or compound.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ZoneBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:Bound"/>
        </xsd:choice>
        <xsd:attribute name="type" type="plm:BoundingType" default="box"/>
        <xsd:attribute name="values" type="plm:DoubleListType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Bound" type="plm:BoundType" substitutionGroup="plm:Zone"/>
  <!-- -->
  <xsd:complexType name="PlanarZoneType">
    <xsd:annotation>
      <xsd:documentation>
      This is a Zone defined by the intersection of a number of halfspaces. Each
      Halfspace is defined as the area of space behind a Plane (i.e. away from the
      Plane normal). 
      
      If there is only one Plane, the Zone is a halfspace.
      
      Elements:
      
      Plane:         Plane defining a halfspace
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ZoneBase">
        <xsd:sequence>
          <xsd:element ref="plm:Plane" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PlanarZone" type="plm:PlanarZoneType" substitutionGroup="plm:Zone"/>
  <!-- -->
  <!--*** Attributes -->
  <!-- -->
  <xsd:simpleType name="IntegerFieldType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">createClass=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:integer"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="IntegerFieldListType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">createClass=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="plm:IntegerListType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RealFieldType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">createClass=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:double"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RealFieldListType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">createClass=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="plm:DoubleListType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="StringFieldType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">createClass=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LogicalFieldType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">createClass=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:boolean"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="VectorFieldType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">createClass=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="plm:VectorType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="CoordinateFieldType">
    <xsd:restriction base="plm:VectorType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="DirectionFieldType">
    <xsd:restriction base="plm:VectorType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="AxisFieldType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="6"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="AttributeOwnerType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="assembly"/>
      <xsd:enumeration value="instance"/>
      <xsd:enumeration value="body"/>
      <xsd:enumeration value="region"/>
      <xsd:enumeration value="shell"/>
      <xsd:enumeration value="face"/>
      <xsd:enumeration value="loop"/>
      <xsd:enumeration value="edge"/>
      <xsd:enumeration value="fin"/>
      <xsd:enumeration value="vertex"/>
      <xsd:enumeration value="group"/>
      <xsd:enumeration value="surface"/>
      <xsd:enumeration value="curve"/>
      <xsd:enumeration value="point"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="AttributeClassType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="class_01"/>
      <xsd:enumeration value="class_02"/>
      <xsd:enumeration value="class_03"/>
      <xsd:enumeration value="class_04"/>
      <xsd:enumeration value="class_05"/>
      <xsd:enumeration value="class_06"/>
      <xsd:enumeration value="class_07"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="AttributeLegalOwnerType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
    <xsd:attribute name="name" type="plm:AttributeOwnerType" use="required"/>
  </xsd:complexType>
  <xsd:element name="AttributeLegalOwner" type="plm:AttributeLegalOwnerType"/>
  <!-- -->
  <xsd:complexType name="AttributeClassBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
    <xsd:attribute name="name" type="plm:AttributeClassType" use="required"/>
  </xsd:complexType>
  <xsd:element name="AttributeClass" type="plm:AttributeClassBase"/>
  <!-- -->
  <xsd:complexType name="AttributeBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      The Attribute element is an abstract element. Useful attributes
      (ones that include fields) must be derived from the Attribute element
      defined within this schema. The derived attributes will define their 
      data elements to represent data fields.
    
      The derived attributes also need to be set as 'equivalent' to the 
      Attribute element. This enables the new derived attribute to be
      inserted into documents wherever the Attribute element is allowed.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DescriptionBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Attribute" type="plm:AttributeBase"/>
  <!-- -->
  <!--*** Base Classes -->
  <!-- -->
  <xsd:complexType name="PropertiesBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements which may contain 3D bounds.
      
      Elements:
      
      BoxBound:      legacy, use Bound in preference
      SphereBound:   legacy, use Bound in preference 
      Bound:         3D bound
      </xsd:documentation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=Entity3D</xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="BoxBound" type="plm:BoxBoundType" minOccurs="0">
            <xsd:annotation>
              <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
            </xsd:annotation>
          </xsd:element>
          <xsd:element name="SphereBound" type="plm:SphereBoundType" minOccurs="0">
            <xsd:annotation>
              <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
            </xsd:annotation>
          </xsd:element>
          <xsd:element name="Bound" type="plm:BoundType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Properties" type="plm:PropertiesBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:complexType name="ManagedBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      This is an abstract base class for elements which require information such as 
      access control, status and checkout information
      
      Attributes:
      
      accessRefs:      reference to one or more elements derived from AccessControlBase
      statusRef:       reference to element derived from StatusBase
      checkoutRefs:    reference to one or more elements derived from CheckoutStatusBase
      effectivityRefs  reference to Effectivity elements
      
      subType:         No specified semantics. This can be used where simple customised
                       sub-types have been defined and a PLMXML schema extension is not
                       appropriate.
                       
      releaseStatusRefs: Reference to one or more ReleaseStatus elements, which give
                       release dates and effectivities.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertiesBase">
        <xsd:attribute name="accessRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:AccessControl"/>
        <xsd:attribute name="statusRef" type="plm:anyURIType" use="optional" plm:refType="plm:Status"/>
        <xsd:attribute name="checkoutRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:CheckoutStatus"/>
        <xsd:attribute name="subType" type="xsd:string" use="optional"/>
        <xsd:attribute name="effectivityRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Effectivity"/>
        <xsd:attribute name="releaseStatusRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:ReleaseStatus"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Managed" type="plm:ManagedBase" substitutionGroup="plm:Properties"/>
  <!-- -->
  <xsd:complexType name="AccessControlBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      AccessControl - abstract base class for Access Control types.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AccessControl" type="plm:AccessControlBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:complexType name="StatusBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Status - abstract base class for status information types.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Status" type="plm:StatusBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:complexType name="CheckoutStatusBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      CheckoutStatus - abstract base class for Checkout types.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CheckoutStatus" type="plm:CheckoutStatusBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:complexType name="InternalRepBase" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InternalRep" type="plm:InternalRepBase"/>
  <!-- -->
  <xsd:complexType name="EntityBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements which reference an external entity such as a
      face in an XT file.
      
      Attributes:
      
      entityRef:     reference to external entity.
      </xsd:documentation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=EntityObject</xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="entityRef" type="plm:anyURIType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Entity" type="plm:EntityBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- Geometry -->
  <!-- -->
  <xsd:complexType name="GeometryBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements representing geometric objects.
      
      Attributes:
      
      propertyRefs:   reference to Properties of the element

      Elements:
      
      PropertyGroup:  a collection of Properties of the element.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <xsd:sequence>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Geometry" type="plm:GeometryBase" substitutionGroup="plm:Entity"/>
  <!-- -->
  <!-- Point -->
  <!-- -->
  <xsd:complexType name="PointBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements representing 3D points.
      
      Attributes:
      
      position:      coordinates of point
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GeometryBase">
        <xsd:attribute name="position" type="plm:VectorType"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Point" type="plm:PointBase" substitutionGroup="plm:Entity"/>
  <!-- -->
  <!-- ReferencePoint -->
  <!-- -->
  <xsd:complexType name="ReferencePointType">
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <xsd:attribute name="position" type="plm:VectorType"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="SamplePointsType">
    <xsd:simpleContent>
      <xsd:extension base="plm:DoubleListType">
        <xsd:attribute name="tolerance" type="xsd:double"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <!-- Curve -->
  <!-- -->
  <xsd:complexType name="CurveBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements representing parametrised curves in 3-space.
      
      Attributes:
      
      startT:        start parameter
      endT:          end parameter
      
      Elements:
      
      StartPoint:    optional coordinates of start point
      EndPoint:      optional coordinates of end point
      SamplePoints:  optional coordinates of a sequence of points along curve
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GeometryBase">
        <xsd:sequence>
          <xsd:element name="StartPoint" type="plm:ReferencePointType" minOccurs="0"/>
          <xsd:element name="EndPoint" type="plm:ReferencePointType" minOccurs="0"/>
          <xsd:element name="SamplePoints" type="plm:SamplePointsType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="startT" type="xsd:double" use="optional"/>
        <xsd:attribute name="endT" type="xsd:double" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Curve" type="plm:CurveBase" substitutionGroup="plm:Entity"/>
  <!-- -->
  <xsd:complexType name="PlaneCurveBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for 3D curves which lie in a plane.
      
      Attributes:
      
      origin:        centre of plane
      zAxis:         normal to plane
      xAxis:         x-direction in plane
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:attribute name="origin" type="plm:VectorType" default="0 0 0"/>
        <xsd:attribute name="zAxis" type="plm:DirectionType" default="0 0 1"/>
        <xsd:attribute name="xAxis" type="plm:DirectionType" default="1 0 0"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="SurfaceBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements representing a u-v-parametrised surface in 3-space. 
      
      Attributes:
      
      startU:        lowest U value
      endU:          highest U value
      startV:        lowest V value
      endV:          highest V value
      
      Elements:
      
      SamplePoints:  optional coordinates of a set of points on the surface
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GeometryBase">
        <xsd:sequence>
          <xsd:element name="SamplePoints" type="plm:SamplePointsType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="startU" type="xsd:double" use="optional"/>
        <xsd:attribute name="endU" type="xsd:double" use="optional"/>
        <xsd:attribute name="startV" type="xsd:double" use="optional"/>
        <xsd:attribute name="endV" type="xsd:double" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Surface" type="plm:SurfaceBase" substitutionGroup="plm:Entity"/>
  <!-- -->
  <xsd:complexType name="SurfacePositionBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements representing a surface which uses an
      X-Y-Z coordinate frame as part of its definition.
      
      Attributes:
      
      origin:        origin of coordinate frame
      zAxis:         Z Axis of coordinate frame
      xAxis:         X Axis of coordinate frame
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:SurfaceBase">
        <xsd:attribute name="origin" type="plm:VectorType" default="0 0 0"/>
        <xsd:attribute name="zAxis" type="plm:DirectionType" default="0 0 1"/>
        <xsd:attribute name="xAxis" type="plm:DirectionType" default="1 0 0"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="RGBFloatType">
    <xsd:restriction base="xsd:float">
      <xsd:minInclusive value="0.0"/>
      <xsd:maxInclusive value="1.0"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RGBFloatListType">
    <xsd:list itemType="plm:RGBFloatType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RGBType">
    <xsd:annotation>
      <xsd:documentation>
      Type representing a Red-Green-Blue colour.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="plm:RGBFloatListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RGBAType">
    <xsd:annotation>
      <xsd:documentation>
      Type representing a colour in Red-Green-Blue-Alpha format.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="plm:RGBFloatListType">
      <xsd:length value="4"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="ShininessType">
    <xsd:restriction base="xsd:float">
      <xsd:minInclusive value="0.0"/>
      <xsd:maxInclusive value="255.0"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="AlphaType">
    <xsd:restriction base="xsd:float">
      <xsd:minInclusive value="0.0"/>
      <xsd:maxInclusive value="1.0"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="MaterialType">
    <xsd:annotation>
      <xsd:documentation>
      Element representing a material type.
      
      Attributes:
      
      ambient:       ambient colour
      diffuse:       diffuse colour
      specular:      specular colour
      emissive:      emissive colour
      shininess:     shininess coefficient
      alpha:         alpha coefficient
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="ambient" type="plm:RGBType" use="required"/>
        <xsd:attribute name="diffuse" type="plm:RGBType" use="required"/>
        <xsd:attribute name="specular" type="plm:RGBType" default="0.0 0.0 0.0"/>
        <xsd:attribute name="emissive" type="plm:RGBType" default="0.0 0.0 0.0"/>
        <xsd:attribute name="shininess" type="plm:ShininessType" default="0.0"/>
        <xsd:attribute name="alpha" type="plm:AlphaType" default="1.0"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Material" type="plm:MaterialType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:complexType name="EntityMaterialType">
    <xsd:annotation>
      <xsd:documentation>
      Element used to associate an entity with a material (colour).
      
      Attributes:
      
      materialRef:   IDREF to the material element.
      
      Elements:
      
      EntityRef:     Element derived from EntityRef, used to specify which entity
                     is to be associated with the material.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice>
          <xsd:element ref="plm:EntityRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="materialRef" type="xsd:IDREF" use="required" plm:refType="plm:Material"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EntityMaterial" type="plm:EntityMaterialType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:simpleType name="AttenuationType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="IntensityExponentType">
    <xsd:restriction base="xsd:float">
      <xsd:minInclusive value="0.0"/>
      <xsd:maxInclusive value="255.0"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="CutoffAngleType">
    <xsd:restriction base="xsd:float">
      <xsd:minInclusive value="0.0"/>
      <xsd:maxInclusive value="90.0"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="LightSourceBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for elements representing Light Sources
      
      Attributes:
      
      ambient:       ambient light
      diffuse:       diffuse light
      specular:      specular light
      intensity:     intensity multiplier
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="ambient" type="plm:RGBType" default="0.0 0.0 0.0"/>
        <xsd:attribute name="diffuse" type="plm:RGBType" default="1.0 1.0 1.0"/>
        <xsd:attribute name="specular" type="plm:RGBType" default="1.0 1.0 1.0"/>
        <xsd:attribute name="intensity" type="plm:AlphaType" default="1.0"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="LightSource" type="plm:LightSourceBase"/>
  <!-- -->
  <xsd:complexType name="DirectionalLightType">
    <xsd:annotation>
      <xsd:documentation>
      Directional Light Source (from infinity)
      
      Attributes:
      
      direction:     direction TO the light source.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:LightSourceBase">
        <xsd:attribute name="direction" type="plm:VectorType" default="0.0 0.0 1.0"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DirectionalLight" type="plm:DirectionalLightType" substitutionGroup="plm:LightSource"/>
  <!-- -->
  <xsd:complexType name="PositionalLightType">
    <xsd:annotation>
      <xsd:documentation>
      Positional Light Source, i.e. point source.
      
      Attributes:
      
      position:      position of light
      direction:     direction in which the light is shining
      cutoffAngle:   semiAngle of cone of light. If absent, the source is not
                     a spotlight, but shines in all directions.
      intensityExponent:  the intensity exponent determines the intensity distribution
                     within the cone. Higher intensity exponent values result in a more
                     focused light source. 
      attenuation:   the attenuation of the light source within the scene. The three
                     attenuation values are the factors in a quadratic equation, giving
                     intensity as a function of distance from the source. The values
                     within the attribute are in order: quadratic, linear and constant.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:LightSourceBase">
        <xsd:attribute name="position" type="plm:VectorType" default="0.0 0.0 1.0"/>
        <xsd:attribute name="direction" type="plm:VectorType" default="0.0 0.0 -1.0"/>
        <xsd:attribute name="cutoffAngle" type="plm:CutoffAngleType" use="optional"/>
        <xsd:attribute name="intensityExponent" type="plm:IntensityExponentType" default="0.0"/>
        <xsd:attribute name="attenuation" type="plm:AttenuationType" default="0.0 0.0 1.0"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PositionalLight" type="plm:PositionalLightType" substitutionGroup="plm:LightSource"/>
  <!-- -->
  <xsd:simpleType name="ShadingStyleType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="flat"/>
      <xsd:enumeration value="smooth"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="DrawingStyleType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="wireframe"/>
      <xsd:enumeration value="hidden"/>
      <xsd:enumeration value="hiddenMarked"/>
      <xsd:enumeration value="shaded"/>
      <xsd:enumeration value="shadedWithEdges"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="DisplayControlType">
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="drawingStyle" type="plm:DrawingStyleType" default="shaded"/>
        <xsd:attribute name="shadingStyle" type="plm:ShadingStyleType" default="flat"/>
        <xsd:attribute name="backgroundColour" type="plm:RGBType" default="0.0 0.0 0.0"/>
        <xsd:attribute name="lightSourceRefs" type="xsd:IDREFS" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="SectionType">
    <xsd:annotation>
      <xsd:documentation>
      Section definition of a View, i.e. cutter geometry.
      
      Attributes:
      
      geometryRef:   a reference to an object defining section geometry, which is 
                     expected to be a surface or a solid, for example - construction geometry 
                     element derived from SurfaceBase or (an Occurrence of) geometry stored 
                     in a Representation stream.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="geometryRef" type="plm:anyURIType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Section" type="plm:SectionType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:simpleType name="RefSelectType">
    <xsd:annotation>
      <xsd:documentation>
      This type describes whether the PLMXML reference is
      specifying a single entity or a set of entities.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="single"/>
      <xsd:enumeration value="multiple"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="EntityRefBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Base class for defining a reference to an entity. All entity
      reference elements should be based on this type and defined
      as a substitution class for EntityRef.
  
      Attributes:
      
      select:     Type of the reference - single or multiple.  
      contextRef: Context for the reference
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DescriptionBase">
        <xsd:attribute name="contextRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="select" type="plm:RefSelectType" default="single"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EntityRef" type="plm:EntityRefBase"/>
  <!-- -->
  <xsd:simpleType name="LocatorRefFormatType">
    <xsd:annotation>
      <xsd:documentation>
    Locator reference format.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="PLMXMLPointer"/>
      <xsd:enumeration value="Unregistered"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="LocatorRefType">
    <xsd:annotation>
      <xsd:documentation>
      Locator reference element. The reference is a URI based reference and
      the syntax of the URI must be pre-defined. Hence the only predefined
      type is currently PLMXMLPointer.
      
      Attributes:
      
      locationRef:  The value of the URI reference.
      type:         Format of the locator reference.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityRefBase">
        <xsd:attribute name="locationRef" type="plm:anyURIType" use="required"/>
        <xsd:attribute name="type" type="plm:LocatorRefFormatType" default="PLMXMLPointer"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="LocatorRef" type="plm:LocatorRefType" substitutionGroup="plm:EntityRef"/>
  <!-- -->
  <xsd:complexType name="AttributeRefType">
    <xsd:annotation>
      <xsd:documentation>
      Attribute reference element. The reference is based on a user
      defined named attribute on the host representation. This type
      enables the author to note the attribute name, field name/index
      and the value of the attribute.

      Attributes:
      
      attribute:  The name of the attribute to query, e.g.
                  "COMPANYNAME/Tracking_attribute".
      field:      The name of the field within the attribute.
      index:      The index of the field within the attribute, if its
                  name is not given. (The first field is index 0).
      value:      The value of the attribute to match.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityRefBase">
        <xsd:attribute name="attribute" type="xsd:string" use="required"/>
        <xsd:attribute name="field" type="xsd:string" use="optional"/>
        <xsd:attribute name="index" type="xsd:integer" use="optional"/>
        <xsd:attribute name="value" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AttributeRef" type="plm:AttributeRefType" substitutionGroup="plm:EntityRef"/>
  <!-- -->
  <xsd:complexType name="GUIDRefType">
    <xsd:annotation>
      <xsd:documentation>
      GUID reference element. This simply specifies the GUID of the entity
      being referenced.
      
      Attribute:
    
      guid:       The GUID of the entity referenced, in the form of a string containing 
                  32 hex digits, with arbitrary non-hex spacing characters.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityRefBase">
        <xsd:attribute name="guid" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GUIDRef" type="plm:GUIDRefType" substitutionGroup="plm:EntityRef"/>
  <!-- -->
  <!-- RefPoint -->
  <!-- -->
  <xsd:complexType name="RefPointType">
    <xsd:annotation>
      <xsd:documentation>
      Reference Point element
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PointBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="RefPoint" type="plm:RefPointType" substitutionGroup="plm:Point"/>
  <!-- -->
  <!-- Line -->
  <!-- -->
  <xsd:complexType name="LineType">
    <xsd:annotation>
      <xsd:documentation>
      Straight line curve.
      
      Attributes:
      
      origin:        start (T=0).
      direction:     direction of increasing T.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:attribute name="origin" type="plm:VectorType" use="required"/>
        <xsd:attribute name="direction" type="plm:DirectionType" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Line" type="plm:LineType" substitutionGroup="plm:Curve"/>
  <!-- -->
  <!-- PolyLine -->
  <!-- -->
  <xsd:simpleType name="PolyLineDimensionType">
    <xsd:restriction base="xsd:positiveInteger">
      <xsd:minInclusive value="2"/>
      <xsd:maxInclusive value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="PolyLineType">
    <xsd:annotation>
      <xsd:documentation>
      Polyline, i.e. sequence of connected line-segments.
      
      Attributes:
      
      closed:        true if the end of the polyline equals its start.
      dimension:     dimension of the curve. This determines the length of each 
                     vector in 'Points'. Defaults to 3.
                     
      type:          an optional indication of the shape of the polyline, e.g. "arc".
                     
      Elements:
      
      Points:        coordinates of the ends of the line segments, in order.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:sequence>
          <xsd:element name="Points" type="plm:DoubleListType"/>
        </xsd:sequence>
        <xsd:attribute name="closed" type="xsd:boolean" default="false"/>
        <xsd:attribute name="dimension" type="plm:PolyLineDimensionType" default="3"/>
        <xsd:attribute name="type" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PolyLine" type="plm:PolyLineType" substitutionGroup="plm:Curve"/>
  <!-- -->
  <!-- Circle -->
  <!-- -->
  <xsd:complexType name="CircleType">
    <xsd:annotation>
      <xsd:documentation>
      Circular curve. The T=0 point is on the positive x-axis of the underlying plane. The
      T=pi/2 point is on the positive y-axis.
      
      Attributes:
      
      radius:        radius
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PlaneCurveBase">
        <xsd:attribute name="radius" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Circle" type="plm:CircleType" substitutionGroup="plm:Curve"/>
  <!-- -->
  <!-- Ellipse -->
  <!-- -->
  <xsd:complexType name="EllipseType">
    <xsd:annotation>
      <xsd:documentation>
      Elliptical curve. The T=0 point is on the positive x-axis of the underlying plane,
      at a distance 'majorRadius' from the origin. The T=pi/2 point is on the positive
      y-axis, at a distance 'minorRadius' from the origin.
      
      Attributes:
      
      majorRadius:   major radius.
      minorRadius:   minor radius.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PlaneCurveBase">
        <xsd:attribute name="majorRadius" type="xsd:double" use="required"/>
        <xsd:attribute name="minorRadius" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Ellipse" type="plm:EllipseType" substitutionGroup="plm:Curve"/>
  <!-- -->
  <!-- BSplineCurve -->
  <!-- -->
  <xsd:simpleType name="SplineDimensionType">
    <xsd:restriction base="xsd:positiveInteger">
      <xsd:minInclusive value="2"/>
      <xsd:maxInclusive value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="SplineCurveFormType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="planar"/>
      <xsd:enumeration value="general"/>
      <xsd:enumeration value="unknown"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <!-- BSplineCurve -->
  <!-- -->
  <xsd:complexType name="BSplineCurveType">
    <xsd:annotation>
      <xsd:documentation>
      B-Spline curve in 2- or 3-dimensional space.
      
      Attributes:
      
      degree:        degree of the curve.
      dimension:     dimension of the curve. This determines the length of each vector in 
                     'Vertices': if isRational is true, it is 'dimension+1', else it is
                     'dimension'. Defaults to 3.
      isRational:    true if the spline is rational.
      isPeriodic:    true if the spline is periodic.
      isClosed:      true if the start and end of the curve coincide.
      form:          form of the curve.

      Elements:
      
      Knots:         knot values, in increasing order, no repetitions.
      KnotMultiplicities: multiplicities of the knots.
      Vertices:      coordinates of the vertices.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:sequence>
          <xsd:element name="Knots" type="plm:DoubleListType"/>
          <xsd:element name="KnotMultiplicities" type="plm:IntegerListType"/>
          <xsd:element name="Vertices" type="plm:DoubleListType"/>
        </xsd:sequence>
        <xsd:attribute name="degree" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="dimension" type="plm:SplineDimensionType" default="3"/>
        <xsd:attribute name="isRational" type="xsd:boolean" use="required"/>
        <xsd:attribute name="isPeriodic" type="xsd:boolean" use="required"/>
        <xsd:attribute name="isClosed" type="xsd:boolean" use="required"/>
        <xsd:attribute name="form" type="plm:SplineCurveFormType" default="unknown"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="BSplineCurve" type="plm:BSplineCurveType" substitutionGroup="plm:Curve"/>
  <!-- -->
  <!-- CompositeCurve -->
  <!-- -->
  <xsd:complexType name="CompositeCurveType">
    <xsd:annotation>
      <xsd:documentation>
      Composite Curve, formed by joining curves together end-to-end.
             
      Attributes:
      
      curves:        sequence of curves. NB this attribute name is non-standard,
                     PLMXML conventions require that IDREFS attributes end in 'Refs'.
      isClosed:      true if the end of the last curve coincides with the start
                     of the first.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:attribute name="curves" type="xsd:IDREFS" use="required" plm:refType="plm:Curve">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="isClosed" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CompositeCurve" type="plm:CompositeCurveType" substitutionGroup="plm:Curve"/>
  <!-- -->
  <!-- SPCurve -->
  <!-- -->
  <xsd:complexType name="SPCurveType">
    <xsd:annotation>
      <xsd:documentation>
      A curve defined in the parameter-space of a surface. The x,y positions
      of the curve correspond to u,v parameters in the surface.
             
      Attributes:
      
      parameterCurve:  reference to a 2-dimensional BSpline curve.
      surface:         reference to a surface.
      
                       NB both these attributes have non-standard names, PLMXML
                       conventions require reference attributes to end in 'Ref'.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:attribute name="parameterCurve" type="xsd:IDREF" use="required" plm:refType="plm:Curve">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="surface" type="xsd:IDREF" use="required" plm:refType="plm:Surface">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SPCurve" type="plm:SPCurveType" substitutionGroup="plm:Curve"/>
  <!-- -->
  <!-- Plane -->
  <!-- -->
  <xsd:complexType name="PlaneType">
    <xsd:complexContent>
      <xsd:extension base="plm:SurfacePositionBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Plane" type="plm:PlaneType" substitutionGroup="plm:Surface"/>
  <!-- -->
  <!-- Cylinder -->
  <!-- -->
  <xsd:complexType name="CylinderType">
    <xsd:complexContent>
      <xsd:extension base="plm:SurfacePositionBase">
        <xsd:attribute name="radius" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Cylinder" type="plm:CylinderType" substitutionGroup="plm:Surface"/>
  <!-- -->
  <!-- Sphere -->
  <!-- -->
  <xsd:complexType name="SphereType">
    <xsd:complexContent>
      <xsd:extension base="plm:SurfacePositionBase">
        <xsd:attribute name="radius" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Sphere" type="plm:SphereType" substitutionGroup="plm:Surface"/>
  <!-- -->
  <!-- Cone -->
  <!-- -->
  <xsd:complexType name="ConeType">
    <xsd:annotation>
      <xsd:documentation>
      Conical surface. The cone axis is along the Z-Axis of the underlying 
      coordinate frame. The cone radius increases in the direction of the
      Z-Axis.
      
      Attributes:
      
      radius:          radius of the cone at the origin of the coordinate frame.
                       This is zero or positive.
      halfAngle:       the positive angle between the Z-Axis and a line in the
                       cone, in radians.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:SurfacePositionBase">
        <xsd:attribute name="radius" type="xsd:double" use="required"/>
        <xsd:attribute name="halfAngle" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Cone" type="plm:ConeType" substitutionGroup="plm:Surface"/>
  <!-- -->
  <!-- Torus -->
  <!-- -->
  <xsd:complexType name="TorusType">
    <xsd:annotation>
      <xsd:documentation>
      Toroidal surface. The axis of the torus is the Z-Axis of the underlying
      coordinate frame.
      
      Attributes:
      
      majorRadius:     major radius 
      minorRadius:     minor radius
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:SurfacePositionBase">
        <xsd:attribute name="majorRadius" type="xsd:double" use="required"/>
        <xsd:attribute name="minorRadius" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Torus" type="plm:TorusType" substitutionGroup="plm:Surface"/>
  <!-- -->
  <!-- BSplineSurface -->
  <!-- -->
  <xsd:complexType name="BSplineSurfaceType">
    <xsd:annotation>
      <xsd:documentation>
      B-Spline surface, normally in 3-dimensional space.
      
      Attributes:
      
      uDegree:       degree of the surface in U.
      vDegree:       degree of the surface in V.
      dimension:     dimension of the surface. This determines the length of each vector
                     in 'Vertices': if isRational is true, it is 'dimension+1', else it
                     is 'dimension'. Defaults to 3.
      isRational:    true if the surface is rational.
      isUPeriodic:   true if the surface is periodic in U.
      isUPeriodic:   true if the surface is periodic in U.
      isVClosed:     true if the surface is closed in V.
      isVClosed:     true if the surface is closed in V.
      numberOfUVertices: number of U vertices.
      numberOfVVertices: number of V vertices.

      Elements:
      
      UKnots:        U knot values, in increasing order, no repetitions.
      VKnots:        V knot values, in increasing order, no repetitions.
      UKnotMultiplicities: multiplicities of the U knots.
      VKnotMultiplicities: multiplicities of the V knots.
      Vertices:      coordinates of the vertices.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:SurfaceBase">
        <xsd:sequence>
          <xsd:element name="UKnots" type="plm:DoubleListType"/>
          <xsd:element name="VKnots" type="plm:DoubleListType"/>
          <xsd:element name="UKnotMultiplicities" type="plm:IntegerListType"/>
          <xsd:element name="VKnotMultiplicities" type="plm:IntegerListType"/>
          <xsd:element name="Vertices" type="plm:DoubleListType"/>
        </xsd:sequence>
        <xsd:attribute name="dimension" type="plm:SplineDimensionType" default="3"/>
        <xsd:attribute name="numberOfUVertices" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="numberOfVVertices" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="uDegree" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="vDegree" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="isRational" type="xsd:boolean" use="required"/>
        <xsd:attribute name="isUPeriodic" type="xsd:boolean" use="required"/>
        <xsd:attribute name="isVPeriodic" type="xsd:boolean" use="required"/>
        <xsd:attribute name="isUClosed" type="xsd:boolean" use="required"/>
        <xsd:attribute name="isVClosed" type="xsd:boolean" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="BSplineSurface" type="plm:BSplineSurfaceType" substitutionGroup="plm:Surface"/>
  <!-- -->
  <!-- CoordinateSystem -->
  <!-- -->
  <xsd:complexType name="CoordinateSystemType">
    <xsd:annotation>
      <xsd:documentation>
      Cartesian Coordinate system.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GeometryBase">
        <xsd:attribute name="origin" type="plm:VectorType" default="0 0 0"/>
        <xsd:attribute name="zAxis" type="plm:DirectionType" default="0 0 1"/>
        <xsd:attribute name="xAxis" type="plm:DirectionType" default="1 0 0"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CoordinateSystem" type="plm:CoordinateSystemType" substitutionGroup="plm:Geometry"/>
  <!-- -->
  <!-- Composition -->
  <!-- -->
  <xsd:complexType name="GeometryCompositionType">
    <xsd:annotation>
      <xsd:documentation>
      Geometry composition.
      
      Elements:
      
      Point:         any elements derived from Point.
      Curve:         any elements derived from Curve.
      Surface:       any elements derived from Surface.
      CoordinateSystem:  coordinate systems.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <xsd:sequence>
          <xsd:element name="LocalCoordinateSystem" type="plm:CoordinateSystemType"/>
          <xsd:choice maxOccurs="unbounded">
            <xsd:element ref="plm:Point"/>
            <xsd:element ref="plm:Curve"/>
            <xsd:element ref="plm:Surface"/>
            <xsd:element ref="plm:CoordinateSystem"/>
          </xsd:choice>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GeometryComposition" type="plm:GeometryCompositionType"/>
  <!-- -->
  <!-- ConstructionGeometry -->
  <!-- -->
  <xsd:complexType name="ConstructionGeometryType">
    <xsd:annotation>
      <xsd:documentation>
      Top level construction geometry element.
      
      Elements:
      
      Point:         any elements derived from Point.
      Curve:         any elements derived from Curve.
      Surface:       any elements derived from Surface.
      CoordinateSystem:     coordinate systems.
      GeometryComposition:  geometry compositions.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <xsd:choice maxOccurs="unbounded">
          <xsd:element ref="plm:Point"/>
          <xsd:element ref="plm:Curve"/>
          <xsd:element ref="plm:Surface"/>
          <xsd:element ref="plm:CoordinateSystem"/>
          <xsd:element ref="plm:GeometryComposition"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConstructionGeometry" type="plm:ConstructionGeometryType" substitutionGroup="plm:Entity"/>
  <!-- -->
  <!-- Perspective -->
  <!-- -->
  <xsd:complexType name="PerspectiveType">
    <xsd:annotation>
      <xsd:documentation>
      Defines a perspective view from a point.
      
      Elements:
      
      ViewFrom:        eye point
      ViewTo:          point towards which eye is looking
      ViewVertical:    vector which is vertical in the view. Should be
                       perpendicular to (ViewFrom - ViewTo).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="ViewFrom" type="plm:VectorType"/>
      <xsd:element name="ViewTo" type="plm:VectorType"/>
      <xsd:element name="ViewVertical" type="plm:VectorType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!-- -->
  <!-- Orthographic -->
  <!-- -->
  <xsd:complexType name="OrthographicType">
    <xsd:annotation>
      <xsd:documentation>
      Defines a view from infinity (no perspective).
      
      Elements:
      
      ViewDirection:   direction eye is looking in.
      ViewVertical:    vector which is vertical in the view. Should be
                       perpendicular to ViewDirection.
      ViewTo:          optional point at which eye is looking, only needed
                       if depth is significant in the view.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="ViewDirection" type="plm:VectorType"/>
      <xsd:element name="ViewVertical" type="plm:VectorType"/>
      <xsd:choice minOccurs="0">
        <xsd:element name="ViewTo" type="plm:VectorType"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="ViewPortCornerType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="2"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="ViewPortType">
    <xsd:sequence>
      <xsd:element name="ViewPortLow" type="plm:ViewPortCornerType"/>
      <xsd:element name="ViewPortHigh" type="plm:ViewPortCornerType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!-- -->
  <!-- ViewControl -->
  <!-- -->
  <xsd:complexType name="ViewControlType">
    <xsd:annotation>
      <xsd:documentation>
      Defines a view, i.e. a camera position and optional viewport.
      
      Elements:
      
      One of Perspective, Orthographic or ViewMatrix (4 by 4).
      
      ViewPort:        optional viewport definition.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DescriptionBase">
        <xsd:sequence>
          <xsd:choice>
            <xsd:element name="Perspective" type="plm:PerspectiveType"/>
            <xsd:element name="Orthographic" type="plm:OrthographicType"/>
            <xsd:element name="ViewMatrix" type="plm:MatrixType"/>
          </xsd:choice>
          <xsd:element name="ViewPort" type="plm:ViewPortType" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ViewControl" type="plm:ViewControlType"/>
  <!--*** Texture -->
  <!--*** PLMXML Schema to define textures to support entity display properties. -->
  <!-- -->
  <xsd:simpleType name="TextureDataFormatType">
    <xsd:annotation>
      <xsd:documentation>
      Basic texture data format definition
      
      Determines the length of each data element in the hexBinary data element.
    
      RGBA = 4 bytes of red, green, blue and alpha
      RGB  = 3 bytes of red, green and blue
      LA   = 2 bytes of luminance and alpha
      A    = 1 byte of alpha
      L    = 1 byte of luminance
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="RGBA"/>
      <xsd:enumeration value="RGB"/>
      <xsd:enumeration value="LA"/>
      <xsd:enumeration value="A"/>
      <xsd:enumeration value="L"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="Texture1DDataType">
    <xsd:annotation>
      <xsd:documentation>
      Basic 1D texture data definition 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:extension base="xsd:hexBinary">
        <xsd:attribute name="level" type="xsd:nonNegativeInteger" use="required"/>
        <xsd:attribute name="width" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="border" type="xsd:nonNegativeInteger" default="0"/>
        <xsd:attribute name="location" type="plm:anyURIType" use="optional">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="Texture1DType">
    <xsd:choice maxOccurs="unbounded">
      <xsd:element name="Data" type="plm:Texture1DDataType"/>
    </xsd:choice>
    <xsd:attribute name="format" type="plm:TextureDataFormatType" use="required"/>
    <xsd:attribute name="levels" type="xsd:positiveInteger" default="1"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="Texture2DDataType">
    <xsd:annotation>
      <xsd:documentation>
      Basic 2D texture data definition
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:extension base="xsd:hexBinary">
        <xsd:attribute name="level" type="xsd:nonNegativeInteger" use="required"/>
        <xsd:attribute name="width" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="height" type="xsd:positiveInteger" use="required"/>
        <xsd:attribute name="border" type="xsd:nonNegativeInteger" default="0"/>
        <xsd:attribute name="location" type="plm:anyURIType" use="optional">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="Texture2DType">
    <xsd:choice maxOccurs="unbounded">
      <xsd:element name="Data" type="plm:Texture2DDataType"/>
    </xsd:choice>
    <xsd:attribute name="format" type="plm:TextureDataFormatType" use="required"/>
    <xsd:attribute name="levels" type="xsd:positiveInteger" default="1"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="TextureDataType">
    <xsd:annotation>
      <xsd:documentation>
      Basic texture data definition 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice>
          <xsd:element name="Texture2D" type="plm:Texture2DType"/>
          <xsd:element name="Texture1D" type="plm:Texture1DType"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="TextureData" type="plm:TextureDataType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:simpleType name="TextureMapType">
    <xsd:annotation>
      <xsd:documentation>
      Texture control definition
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="decal"/>
      <xsd:enumeration value="modulate"/>
      <xsd:enumeration value="blend"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="TextureSampleType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="nearest"/>
      <xsd:enumeration value="linear"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="TextureWrapType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="clamp"/>
      <xsd:enumeration value="wrap"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="TextureType">
    <xsd:annotation>
      <xsd:documentation>
      Basic texture definition
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice minOccurs="0">
          <xsd:element name="TextureData" type="plm:TextureDataType"/>
        </xsd:choice>
        <xsd:attribute name="dataRef" type="xsd:IDREF" use="optional" plm:refType="plm:TextureData"/>
        <xsd:attribute name="mapping" type="plm:TextureMapType" use="required"/>
        <xsd:attribute name="subsamplingLow" type="plm:TextureSampleType" default="nearest"/>
        <xsd:attribute name="subsamplingHigh" type="plm:TextureSampleType" default="nearest"/>
        <xsd:attribute name="oversampling" type="plm:TextureSampleType" default="nearest"/>
        <xsd:attribute name="wrapping" type="plm:TextureWrapType" default="clamp"/>
        <xsd:attribute name="borderColour" type="plm:RGBAType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Texture" type="plm:TextureType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <xsd:simpleType name="TextureCoordDataType">
    <xsd:annotation>
      <xsd:documentation>
      Texture coordinates 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="plm:DoubleListType">
      <xsd:minLength value="1"/>
      <xsd:maxLength value="4"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="GeometryParamType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="2"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="TextureCoordType">
    <xsd:simpleContent>
      <xsd:extension base="plm:TextureCoordDataType">
        <xsd:attributeGroup ref="plm:idGroup"/>
        <xsd:attribute name="textureRef" type="xsd:IDREF" use="optional" plm:refType="plm:Texture"/>
        <xsd:attribute name="geometryCoord" type="plm:VectorType" use="optional"/>
        <xsd:attribute name="geometryParam" type="plm:GeometryParamType" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="EntityTextureType">
    <xsd:annotation>
      <xsd:documentation>
      Texture structures that can be associated with a remote entity.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="TextureCoord" type="plm:TextureCoordType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:EntityRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="textureRef" type="xsd:IDREF" use="required" plm:refType="plm:Texture"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EntityTexture" type="plm:EntityTextureType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- Representation -->
  <!-- -->
  <xsd:simpleType name="RepresentationFormatType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="XT"/>
      <xsd:enumeration value="eXT"/>
      <xsd:enumeration value="PLMXML"/>
      <xsd:enumeration value="jXT"/>
      <xsd:enumeration value="JT"/>
      <xsd:enumeration value="XPK"/>
      <xsd:enumeration value="XGL"/>
      <xsd:enumeration value="VRML"/>
      <xsd:enumeration value="STL"/>
      <xsd:enumeration value="SAT"/>
      <xsd:enumeration value="STEP"/>
      <xsd:enumeration value="IGES"/>
      <xsd:enumeration value="UGBkm"/>
      <xsd:enumeration value="UGPrt"/>
      <xsd:enumeration value="SEPrt"/>
      <xsd:enumeration value="SEAsm"/>
      <xsd:enumeration value="IdeasPrt"/>
      <xsd:enumeration value="IdeasAsm"/>
      <xsd:enumeration value="IdeasIDI"/>
      <xsd:enumeration value="Cat4Prt"/>
      <xsd:enumeration value="Cat5Prt"/>
      <xsd:enumeration value="Cat5Asm"/>
      <xsd:enumeration value="SWPrt"/>
      <xsd:enumeration value="SWAsm"/>
      <xsd:enumeration value="IDI"/>
      <xsd:enumeration value="TX"/>
      <xsd:enumeration value="DWG"/>
      <xsd:enumeration value="DWF"/>
      <xsd:enumeration value="DXF"/>
      <xsd:enumeration value="ProE"/>
      <xsd:enumeration value="CGM"/>
      <xsd:enumeration value="CGR"/>
      <xsd:enumeration value="Unregistered"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="CompoundRepTypeEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="default"/>
      <xsd:enumeration value="construction"/>
      <xsd:enumeration value="weld"/>
      <xsd:enumeration value="midsurface"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="CompoundRepType">
    <xsd:annotation>
      <xsd:documentation>
      The CompoundRep represents a component of a Representation. The Representation 
      then consists of the aggregate or union of the CompoundReps, which may have
      different formats.

      Attributes:

      location:       URI of data source
      load:           True if data is to be loaded at the same time as the PLMXML file.
      format:         Data format. If this is absent, the format is taken from the parent
                      Representation.

      equivalentRef:  an optional reference to a CompoundRep which is equivalent to
                      this one (for example, has the same shape). If this attribute is
                      used, then it should collect together equivalent CompoundReps
                      into a ring, with each CompoundRep using this attribute to point
                      to the next in the ring.

      type:           an optional attribute specifying type or purpose of the CompoundRep.
                      Supported values are:
                      "default" - design geometry.
                      "construction" - construction geometry associated with the 
                                       owning representation.
                      "weld" - the geometry of any weld beads.
                      "midsurface" - a special type of construction geometry used with sheet
                                     metal parts.

      baseRef:        an optional reference to a CompoundRep which is overridden by this 
                      CompoundRep.

      transformRef:   has the same purpose as the Transform sub-element. Do not use both.

      propertyRefs:   A list of references to Properties.

      Elements:

      PropertyGroup   a collection of Properties of the CompoundRep
      EntityRef:      references to entities in the Representation file. These EntityRef
                      elements can be referenced by RepresentationEntity elements.
      Transform:      optional Transform which positions the geometry in the
                      coordinate frame of the owning Representation.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertiesBase">
        <xsd:sequence>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
          <xsd:element ref="plm:EntityRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:Transform" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attributeGroup ref="plm:referenceGroup"/>
        <xsd:attribute name="format" type="plm:RepresentationFormatType" use="optional"/>
        <xsd:attribute name="equivalentRef" type="xsd:IDREF" use="optional" plm:refType="plm:CompoundRep"/>
        <xsd:attribute name="type" type="plm:CompoundRepTypeEnum" default="default"/>
        <xsd:attribute name="baseRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="transformRef" type="plm:anyURIType" use="optional" plm:refType="plm:Transform"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CompoundRep" type="plm:CompoundRepType" substitutionGroup="plm:Properties"/>
  <!-- -->
  <xsd:simpleType name="RepresentationTypeEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="default"/>
      <xsd:enumeration value="simplified"/>
      <xsd:enumeration value="flat"/>
      <xsd:enumeration value="user"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="RepresentationType">
    <xsd:annotation>
      <xsd:documentation>
      The Representation element in an PLMXML file refers to a model in some
      particular format, such as XT or jXT. It can refer to the model data in
      another file (an External Representation), or the data can be embedded within
      the Representation element in the XML file (an InternalRepresentation). It
      can also consist of a number of CompoundRep sub-elements.

      Attributes:

      format:         data format
      revision:       revision of data
      transformRef:   has the same purpose as the Transform sub-element. Do not use both.
      location:       URI of data source
      load:           true if data is to be loaded at the same time as the PLMXML file.

      equivalentRef:  an optional reference to a Representation which is equivalent to
                      this one (for example, has the same shape). If this attribute is
                      used, then it should collect together equivalent Representations
                      into a ring, with each Representation using this attribute to point
                      to the next in the ring.

      type:           an optional attribute specifying type or purpose of the Representation.
                      Supported values are:
                      "default" - primary or design geometry.
                      "simplified" - geometry of the simplified model.
                      "flat" - geometry of the unfolded model.
                      "user" - the inherited "name" attribute may be set to the name of an NX
                               ReferenceSet, which implies the purpose of the geometry.

                      Representation type can be used to distinguish between additional 
                      and alternative geometry at assembly level in the following way:

                      "default"/"user" - If CompoundReps are all of type "construction", "weld" 
                               or "midsurface", then geometry should be treated additional.
                               Otherwise - alternative.
                      "simplified" - alternative.
                      "flat" - Not expected at assembly level.

      baseRef:        an optional reference to a Representation which is overridden by this 
                      Representation.

      propertyRefs:   A list of references to Properties.

      Elements:

      PropertyGroup:  A collection of Properties.                
      Transform:      optional Transform which positions the geometry in the
                      coordinate frame of the owner.
      CompoundRep:    the Representation may not have a single location. Instead, it may
                      contain a number of CompoundRep sub-elements, each with its own 
                      location. The representation is the aggregate of these data sources.
      InternalRep:    the Representation may contain one element derived from InternalRep,
                      in which case it should not also have a location attribute.

      EntityRef:      references to entities in the Representation file. These EntityRef
                      elements can be referenced by RepresentationEntity elements.

      May also contain elements of type Material, EntityMaterial, TextureData, Texture, or
      EntityTexture.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertiesBase">
        <xsd:sequence>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
          <xsd:element ref="plm:Transform" minOccurs="0"/>
          <xsd:element ref="plm:InternalRep" minOccurs="0"/>
          <xsd:element ref="plm:CompoundRep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element ref="plm:Material"/>
            <xsd:element ref="plm:EntityMaterial"/>
            <xsd:element ref="plm:TextureData"/>
            <xsd:element ref="plm:Texture"/>
            <xsd:element ref="plm:EntityTexture"/>
            <xsd:element ref="plm:EntityRef"/>
          </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="transformRef" type="xsd:IDREF" use="optional" plm:refType="plm:Transform"/>
        <xsd:attribute name="format" type="plm:RepresentationFormatType" use="optional"/>
        <xsd:attribute name="revision" type="xsd:decimal" use="optional"/>
        <xsd:attributeGroup ref="plm:referenceGroup"/>
        <xsd:attribute name="equivalentRef" type="xsd:IDREF" use="optional" plm:refType="plm:Representation"/>
        <xsd:attribute name="type" type="plm:RepresentationTypeEnum" default="default"/>
        <xsd:attribute name="baseRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Representation" type="plm:RepresentationType" substitutionGroup="plm:Properties"/>
  <!-- -->
  <!-- ******************************** OccurrenceFilter ***************************** -->
  <!-- -->
  <xsd:complexType name="OccurrenceFilterBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Abstract base class for filters.
      
      Attributes:
      
      contextRef:     The owning StructureRevisionView, if appropriate
      outputRef:      The result of applying the Filter - a ConfiguredOccurrenceGroup
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="contextRef" type="plm:anyURIType" use="optional" plm:refType="plm:StructureRevisionView"/>
        <xsd:attribute name="outputRef" type="plm:anyURIType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="OccurrenceFilter" type="plm:OccurrenceFilterBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************** ConfiguredOccurrenceGroup ************************* -->
  <!-- -->
  <xsd:complexType name="ConfiguredOccurrenceGroupType">
    <xsd:annotation>
      <xsd:documentation>
      This is the configured form of the OccurrenceGroup element. 
      
      It is a group of Occurrences and other ConfiguredOccurrenceGroups. All the
      Occurrences included (recursively) in a ConfiguredOccurrenceGroup must have the
      same Structure and View as the parent of their top Instance.
    
      ConfiguredOccurrenceGroups can share Occurrences or other 
      ConfiguredOccurrenceGroups, but must not contain recursive loops.
    
      Attributes:
                      
      childRefs:      reference to contained Occurrences or ConfiguredOccurrenceGroups
      sourceRef:      A reference to the OccurrenceGroup to which this corresponds. 
      associatedAttachmentRefs: references to root AssociatedAttachments.
      
      Sub-elements:
      
      AssociatedAttachment
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element ref="plm:AssociatedAttachment" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="childRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="sourceRef" type="plm:anyURIType" use="optional" plm:refType="plm:OccurrenceGroup"/>
        <xsd:attribute name="associatedAttachmentRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:AssociatedAttachment"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConfiguredOccurrenceGroup" type="plm:ConfiguredOccurrenceGroupType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ConfigRule -->
  <!-- -->
  <xsd:complexType name="ConfigRuleBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Abstract base class for Configuration Rule elements
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConfigRule" type="plm:ConfigRuleBase" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ConfigurationView -->
  <!-- -->
  <xsd:complexType name="ConfigurationViewType">
    <xsd:annotation>
      <xsd:documentation>
      This represents a configured structure. 
 
      Attributes:
    
      ruleRefs:       references to configuration rules (derived from ConfigRuleBase) 
      attachmentRefs: references to root attachments.
      
      Elements:

      AssociatedAttachment: These elements specify the elements attached to the
                      ConfigurationView. 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:AssociatedAttachment"/>
        </xsd:choice>
        <xsd:attribute name="ruleRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:ConfigRule"/>
        <xsd:attribute name="attachmentRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:AssociatedAttachment"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConfigurationView" type="plm:ConfigurationViewType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ProductView -->
  <!-- -->
  <xsd:simpleType name="ViewOrientationEnum">
    <xsd:annotation>
      <xsd:documentation>
        The type of transform on a Model View in a set.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="front"/>
      <xsd:enumeration value="right"/>
      <xsd:enumeration value="left"/>
      <xsd:enumeration value="top"/>
      <xsd:enumeration value="bottom"/>
      <xsd:enumeration value="back"/>
      <xsd:enumeration value="isometric"/>
      <xsd:enumeration value="dimetric"/>
      <xsd:enumeration value="trimetric"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="ProductViewDefinitionType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="select"/>
      <xsd:enumeration value="overlay"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="ProductViewUsageType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="visual"/>
      <xsd:enumeration value="arrangement"/>
      <xsd:enumeration value="variant"/>
      <xsd:enumeration value="modelView"/>
      <xsd:enumeration value="pose"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="ProductViewStateEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="active"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="ProductViewType">
    <xsd:annotation>
      <xsd:documentation>
      ProductView. This is a collection of Occurrences and ConfiguredOccurrenceGroups
      with the same top Structure and View.
   
      Attributes:
     
      viewControlRef:    optional reference to a ViewControl
      displayControlRef: optional reference to a DisplayControl

      alternativeOfRef:  A ProductView may be defined by reference to another
                      ProductView, in which case it may include Occurrences which
                      override certain corresponding Occurrences in the other
                      ProductView. This attribute is used to specify other ProductView,
                      which must have the same 'top Structure' as this one.
                      
      definition:     how the ProductView is defined. 
                      
                      "select" means the ProductView is a selection of Occurrences from
                      the InstanceGraph. 
                      
                      "overlay" mean the ProductView modifies the view implied by the 
                      InstanceGraph by changing some of the Occurrences. (Occurrences can
                      also be masked by including an "invisible" Occurrence in the 
                      ProductView)
                      
      usage:          This optional attribute specifies the intent of the ProductView. 
                      Possible values are:
      
                      "visual". This means that the Occurrences in the ProductView are
                      simply for display, as in an exploded view. They do not necessarily
                      represent a physically realisable state.
                      
                      "arrangement". The Occurrences represent a realisable state or
                      position of (part of) the assembly.
                      
                      "variant". The Occurrences represent a configuration of the Product 
                      Structure, i.e. with certain Options chosen.
                      
                      "modelView". The ProductView represents a Model View, i.e. 
                      annotated view of (partial) geometry of the model.
                      
      rootRefs:       specifies the root Occurrences, i.e. those which are not children
                      of other Occurrences in this ProductView.
      
      primaryOccurrenceRef: (deprecated). Used when there is only one root Occurrence.
     
      sectionRef:     specifies the Section (i.e. cutter geometry) associated with this view.
      
      default:        "true" if this is a default ProductView.
      
      state:          state of the ProductView.
      
      viewOrientation: When the ProductView represents a Model View and the
                      Model View is a member of a View Set, viewOrientation is
                      the type of transform as a ViewOrientationEnum.

      Elements:
      
      Occurrence:           the Occurrences in the ProductView.
      ConfiguredOccurrenceGroup: ConfiguredOccurrenceGroups in the ProductView
      Transform:            Transforms which may be referenced by the Occurrences.
      SymbolicOccurrence:   SymbolicOccurrences in the ProductView
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ConfigurationViewType">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:Occurrence"/>
          <xsd:element ref="plm:ConfiguredOccurrenceGroup"/>
          <xsd:element ref="plm:Transform"/>
          <xsd:element ref="plm:SymbolicOccurrence"/>
        </xsd:choice>
        <xsd:attribute name="primaryOccurrenceRef" type="xsd:IDREF" use="optional" plm:refType="plm:Occurrence" plm:deprecated="true"/>
        <xsd:attribute name="rootRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="viewControlRef" type="xsd:IDREF" use="optional" plm:refType="plm:ViewControl"/>
        <xsd:attribute name="displayControlRef" type="xsd:IDREF" use="optional" plm:refType="plm:DisplayControl"/>
        <xsd:attribute name="alternativeOfRef" type="plm:anyURIType" use="optional" plm:refType="plm:ProductView"/>
        <xsd:attribute name="definition" type="plm:ProductViewDefinitionType" use="optional"/>
        <xsd:attribute name="usage" type="plm:ProductViewUsageType" use="optional"/>
        <xsd:attribute name="sectionRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="default" type="xsd:boolean" default="false"/>
        <xsd:attribute name="state" type="plm:ProductViewStateEnum" use="optional"/>
        <xsd:attribute name="viewOrientation" type="plm:ViewOrientationEnum" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductView" type="plm:ProductViewType" substitutionGroup="plm:ConfigurationView"/>
  <!-- -->
  <!-- ***************************** InstanceGraph ********************************** -->
  <!-- -->
  <xsd:simpleType name="PreferredPartUnitsType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="millimetres"/>
      <xsd:enumeration value="metres"/>
      <xsd:enumeration value="inches"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="PartTypesType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=PartType</xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="assembly"/>
      <xsd:enumeration value="minimal"/>
      <xsd:enumeration value="wire"/>
      <xsd:enumeration value="solid"/>
      <xsd:enumeration value="sheet"/>
      <xsd:enumeration value="general"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="InstanceGraphType">
    <xsd:annotation>
      <xsd:documentation>
      InstanceGraph. This is an element used as a container for elements which
      represent an assembly graph. 
      
      Attributes:

      rootInstanceRef: if the graph of Instances and StructureRevisionViews 
                       in the InstanceGraph has a single root, which is an Instance, 
                       this may be use to indicate it. 
      rootRefs:        however, in general there may be more than one root, and the 
                       roots may be Instances or StructureRevisionViews. The use of 
                       this attribute to specify the root(s) is preferred.
      
      viewControlRef:    optional reference to a ViewControl
      displayControlRef: optional reference to a DisplayControl
      
      Elements:
      
      May contain any element derived from Instance, GDEInstanceGroup, Structure
      StructureRevision or StructureRevisionView. May also contain Transforms which
      may be referenced by Instances.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertiesBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:Instance"/>
          <xsd:element ref="plm:GDEInstanceGroup"/>
          <xsd:element ref="plm:StructureRevisionView"/>
          <xsd:element ref="plm:Structure"/>
          <xsd:element ref="plm:StructureRevision"/>
          <xsd:element ref="plm:Transform"/>
        </xsd:choice>
        <xsd:attribute name="rootInstanceRef" type="xsd:IDREF" use="optional" plm:refType="plm:Instance" plm:deprecated="true"/>
        <xsd:attribute name="rootRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="viewControlRef" type="xsd:IDREF" use="optional" plm:refType="plm:ViewControl"/>
        <xsd:attribute name="displayControlRef" type="xsd:IDREF" use="optional" plm:refType="plm:DisplayControl"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InstanceGraph" type="plm:InstanceGraphType"/>
  <!-- -->
  <!-- ***************************** StructureDef ********************************* -->
  <!-- -->
  <xsd:complexType name="StructureDefBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      This element may contain one or more InstanceGraphs, representing
      all or part of one or more assembly graphs. It also contains elements relating
      to its display. 
   
      Attributes:

      revision:           revision.
      defaultProductViewRef: may be used to indicate a default from among the ProductViews.
      default:            may be used to indicate that this is the default from among the
                          StructureDefs in the document.
      
      revisionRuleRef:    reference to a RevisionRule which was used to generate this
                          assembly from an Unconfigured Product Structure.
                          NB: this elements is not defined in this schema.

      variantRuleRef:     reference to a VariantRule which was use to generate this
                          configured structure.
                          
      configured:         indicates whether the Structure is Configured or
                          Unconfigured.
                             
      Elements:

      This element may contain Representations, DisplayControls, ViewControls, Light
      Sources, ProductViews, Materials, ConstructionGeometry, StructureRevisionViews,
      GDEs, Sections or InstanceGraphs.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:InstanceGraph"/>
          <xsd:element ref="plm:StructureRevisionView"/>
          <xsd:element ref="plm:Representation"/>
          <xsd:element name="ProductView" type="plm:ProductViewType"/>
          <xsd:element name="DisplayControl" type="plm:DisplayControlType"/>
          <xsd:element name="ViewControl" type="plm:ViewControlType"/>
          <xsd:element ref="plm:LightSource"/>
          <xsd:element ref="plm:Material"/>
          <xsd:element name="ConstructionGeometry" type="plm:ConstructionGeometryType"/>
          <xsd:element ref="plm:GDE"/>
          <xsd:element name="Section" type="plm:SectionType"/>
        </xsd:choice>
        <xsd:attribute name="revision" type="xsd:decimal" use="optional"/>
        <xsd:attribute name="defaultProductViewRef" type="xsd:IDREF" use="optional" plm:refType="plm:ProductView"/>
        <xsd:attribute name="default" type="xsd:boolean" use="optional"/>
        <xsd:attribute name="variantRuleRef" type="plm:anyURIType" plm:refType="plm:VariantRule"/>
        <xsd:attribute name="revisionRuleRef" type="plm:anyURIType" plm:refType="plm:ConfigRule"/>
        <xsd:attribute name="configured" type="xsd:boolean" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="StructureDef" type="plm:StructureDefBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ***************************** ProductDef ********************************* -->
  <!-- -->
  <xsd:complexType name="ProductDefType">
    <xsd:annotation>
      <xsd:documentation>
      This element may contain one or more InstanceGraphs, containing ProductInstances
      and ProductRevisionViews, representing all or part of one or more assembly graphs. 
      It also contains elements relating to its display.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureDefBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductDef" type="plm:ProductDefType" substitutionGroup="plm:StructureDef"/>
  <!-- -->
  <!-- ***************************** UserData ********************************* -->
  <!-- -->
  <xsd:simpleType name="UserValueDataType">
    <xsd:annotation>
      <xsd:documentation>
      Basic types that can be represented by user value entries and tables.

      int       = Data entity is an integer 
      ints      = Data entity is a list of integers
      real      = Data entity is a real
      reals     = Data entity is a list of reals
      boolean   = Data entity is a boolean (true/false)
      booleans  = Data entity is a list of booleans
      reference = Data entity is a reference (anyURI)
      enum      = Data entity is an enumeration.
      list      = Data entity is a list item.
      dateTime  = Data entity is a dateTime
                     (as in xsd:dateTime, i.e. CCYY-MM-DDThh:mm:ss).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="int"/>
      <xsd:enumeration value="ints"/>
      <xsd:enumeration value="real"/>
      <xsd:enumeration value="reals"/>
      <xsd:enumeration value="boolean"/>
      <xsd:enumeration value="booleans"/>
      <xsd:enumeration value="string"/>
      <xsd:enumeration value="reference"/>
      <xsd:enumeration value="enum"/>
      <xsd:enumeration value="list"/>
      <xsd:enumeration value="dateTime"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="UserListElementType">
    <xsd:annotation>
      <xsd:documentation>
      This element defines a single entry in a UserList. The 'value' attribute
      must contain data of the type specified by the 'type' attribute in the
      owning list.

      Attributes:

      value:            data value (required).
      description:      textual description of the value.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.
      descriptionRef:   References a multiple language version of description.
                        If multiple language support is required, descriptionRef
                        should be used in addition to description.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="value" type="xsd:string" use="required"/>
    <xsd:attribute name="description" type="xsd:string" use="optional"/>
    <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
    <xsd:attribute name="descriptionRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="UserListDataType">
    <xsd:annotation>
      <xsd:documentation>
      This element defines a list of user specified data items. Each item in the 
      list is of the same type - as specified by the 'type' attribute'.

      Attributes:

      type:           type of data items, i.e. int, ints, etc. 

      Elements:

      Item:           One element per data item.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:choice>
          <xsd:element name="Item" type="plm:UserListElementType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="type" type="plm:UserValueDataType" default="string"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="UserList" type="plm:UserListDataType" substitutionGroup="plm:Attribute"/>
  <!-- -->
  <xsd:complexType name="UserDataElementType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=UserValue</xsd:appinfo>
      <xsd:documentation>
      This element defines a single title/value pair in a UserData table.

      Attributes:

      title:            name of this entry in the table.
      value:            value of the entry.
      type:             datatype of the value, i.e. int, ints, etc, from
                        UserValueDataType.
      format:           format string as used by printf.
      editable:         false if this value should not be modified by the
                        receiving application.
      dataRef:          If type is 'reference', dataRef specifies the referenced
                        element. The value attribute is ignored.
                        If type is 'enum' or 'list', then a UserList element
                        should be specified either by dataRef, or by being
                        included as a sub-element. In the 'enum' case, the
                        UserList gives the valid values of the enum; in the
                        'list' case, 'value' is ignored and the UserList IS the
                        value of this entry in the table.
      minInclusive:     Minimum value allowed (inclusive).
      minExclusive:     Minimum value allowed (exclusive).
      maxInclusive:     Maximum value allowed (inclusive).
      maxExclusive:     Maximum value allowed (exclusive).
      stepValue:        Allowed values go from min to max in steps of
                        'stepValue'.
      minLength:        Minimum list length allowed (only for type="list").
      maxLength:        Maximum list length allowed (ditto).
      titleRef:         References a multiple language version of title. If
                        multiple language support is required, titleRef should
                        be used in addition to title.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.

      Elements:

      UserList:         May contain a single UserList element (see dataRef
                        above).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="UserList" type="plm:UserListDataType" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="title" type="xsd:string" use="required"/>
    <xsd:attribute name="value" type="xsd:string" use="required"/>
    <xsd:attribute name="type" type="plm:UserValueDataType" default="string"/>
    <xsd:attribute name="format" type="xsd:string" use="optional"/>
    <xsd:attribute name="dataRef" type="plm:anyURIType" use="optional"/>
    <xsd:attribute name="editable" type="xsd:boolean" default="false"/>
    <xsd:attribute name="minInclusive" type="xsd:double" use="optional"/>
    <xsd:attribute name="minExclusive" type="xsd:double" use="optional"/>
    <xsd:attribute name="maxInclusive" type="xsd:double" use="optional"/>
    <xsd:attribute name="maxExclusive" type="xsd:double" use="optional"/>
    <xsd:attribute name="stepValue" type="xsd:double" use="optional"/>
    <xsd:attribute name="minLength" type="xsd:nonNegativeInteger" use="optional"/>
    <xsd:attribute name="maxLength" type="xsd:nonNegativeInteger" use="optional"/>
    <xsd:attribute name="titleRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
    <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="UserDataType">
    <xsd:annotation>
      <xsd:documentation>
      The UserData element is a PLMXML Attribute used to represent a table of
      title/value pairs. It is up to communicating applications to agree on the
      meaning of these tables.
      UserData is based on the plm:Attribute base class so that it may be
      substituted wherever PLMXML Attributes are permitted.

      Attributes:

      type:             A string giving the type of UserData. No specified
                        values.
      typeRef:          References a multiple language version of type. If
                        multiple language support is required, typeRef should be
                        used in addition to type.

      Elements:

      UserValue:      One element per entry in the table (at least one).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:choice>
          <xsd:element name="UserValue" type="plm:UserDataElementType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="type" type="xsd:string" use="optional"/>
        <xsd:attribute name="typeRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="UserData" type="plm:UserDataType" substitutionGroup="plm:Attribute"/>
  <!-- -->
  <xsd:complexType name="UserEnumDataType">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=UserEnum</xsd:appinfo>
      <xsd:documentation>
      This element represents a user defined enumeration value. 

      Attributes:

      value:            the enum value (required).
      listRef:          reference to a UserList element which gives the valid
                        values in the enum. 'value' must be one of these values.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="value" type="xsd:string" use="required"/>
    <xsd:attribute name="listRef" type="plm:anyURIType" use="optional" plm:refType="plm:UserList"/>
    <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="EntityUserDataType">
    <xsd:annotation>
      <xsd:documentation>
      This element is used to associate one or more entities with a set of UserData 
      elements. It is substitutable for Attribute.
      
      Attributes:
      
      userDataRefs:  IDREFS to the UserData element(s).
      
      Elements:
      
      EntityRef:     Element derived from EntityRef, used to specify which entity
                     is to be associated with the UserData.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:choice>
          <xsd:element ref="plm:EntityRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="userDataRefs" type="xsd:IDREFS" use="required" plm:refType="plm:UserData"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EntityUserData" type="plm:EntityUserDataType" substitutionGroup="plm:Attribute"/>
  <!-- -->
  <xsd:simpleType name="XTDataType">
    <xsd:annotation>
      <xsd:documentation>
      This class represents the &lt;XTData&gt; element in a PLMXML
      file, which is used to embed XT files in a Representation 
      element, for example: 

        &lt;Representation ...&gt;
          &lt;XTRep&gt;
            &lt;XTData&gt;T51 : TRANSMIT FILE 
    created by modeller version 130021217 SCH_1300212_130060 
    12 1 63 2 3 0 0 0 0 1e3 1e-8 0 0 0 1 0 1 1 4 5 6 7 8 9 10 
    81 1 2 63 11 1 0 0 0 0 1 ...
            &lt;/XTData&gt;
          &lt;/XTRep&gt;
        &lt;/Representation&gt;
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="XTRepType">
    <xsd:annotation>
      <xsd:documentation>
      XT Representation component of the PLMXML Schema
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:InternalRepBase">
        <xsd:sequence>
          <xsd:element name="XTData" type="plm:XTDataType"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="XTRep" type="plm:XTRepType" substitutionGroup="plm:InternalRep"/>
  <!-- -->
  <xsd:simpleType name="MassPropertyUnitType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="grams,millimetres">
        <xsd:annotation>
          <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=GramsMillimetres</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="grams,centimetres">
        <xsd:annotation>
          <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=GramsCentimetres</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="kilograms,metres">
        <xsd:annotation>
          <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=KilogramsMetres</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="pounds,feet">
        <xsd:annotation>
          <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=PoundsFeet</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="pounds,inches">
        <xsd:annotation>
          <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=PoundsInches</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:attributeGroup name="MassPropertyGroup">
    <xsd:attribute name="error" type="plm:RealFieldType" use="optional"/>
  </xsd:attributeGroup>
  <!-- -->
  <xsd:complexType name="MassPropertyRealType">
    <xsd:simpleContent>
      <xsd:extension base="plm:RealFieldType">
        <xsd:attributeGroup ref="plm:MassPropertyGroup"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="LengthType">
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyRealType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="AreaType">
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyRealType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="DeprecatedVolumeType" plm:deprecated="true">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">substituteType=Volume;suppressId=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyRealType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="DeprecatedDensityType" plm:deprecated="true">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">substituteType=Density;suppressId=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyRealType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="MassType">
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyRealType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="MassPropertyVectorType">
    <xsd:simpleContent>
      <xsd:extension base="plm:VectorType">
        <xsd:attributeGroup ref="plm:MassPropertyGroup"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="DeprecatedCentreOfMassType" plm:deprecated="true">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">substituteType=CentreOfMass;suppressId=true</xsd:appinfo>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyVectorType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="MassPropertyArrayFieldType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="MassPropertyArrayType">
    <xsd:simpleContent>
      <xsd:extension base="plm:MassPropertyArrayFieldType">
        <xsd:attributeGroup ref="plm:MassPropertyGroup"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="MomentsOfInertiaType">
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyArrayType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="ProductsOfInertiaType">
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyArrayType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="MassPropertiesType">
    <xsd:annotation>
      <xsd:documentation>
      PLMXML Attribute describing mass properties.
      </xsd:documentation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">ChildElementOccurrences=1</xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="Length" type="plm:LengthType"/>
          <xsd:element name="Area" type="plm:AreaType"/>
          <xsd:element name="Volume" type="plm:DeprecatedVolumeType"/>
          <xsd:element name="Density" type="plm:DeprecatedDensityType"/>
          <xsd:element name="Mass" type="plm:MassType"/>
          <xsd:element name="CentreOfMass" type="plm:DeprecatedCentreOfMassType"/>
          <xsd:element name="MomentsOfInertia" type="plm:MomentsOfInertiaType"/>
          <xsd:element name="ProductsOfInertia" type="plm:ProductsOfInertiaType"/>
        </xsd:choice>
        <xsd:attribute name="units" type="plm:MassPropertyUnitType" default="kilograms,metres"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="MassProperties" type="plm:MassPropertiesType" substitutionGroup="plm:Attribute"/>
  <!-- -->
  <xsd:complexType name="DocumentBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=DocumentBase</xsd:appinfo>
      <xsd:documentation>
      This class corresponds to a top-level (root) element in a PLMXML file. 

      Attributes:

      author:        Author.
      date:          Date modified.
      time:          Time modified.
      language:      Language used, e.g. in comments.
      schemaVersion: Version of the schema this file was written for, e.g. "3.0".
      
      referenceSearchPaths:   A space-separated sequence of URIs or other strings used
                              by the Application to specify base URIs or other contexts
                              to enable relative URIs in the document to be resolved. The
                              URIs should be processed in sequence.
      languages:        A list of the ISO 639-1 codes for the languages,
                        separated by spaces, that the document contains.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="schemaVersion" type="xsd:decimal" use="required"/>
        <xsd:attribute name="author" type="xsd:string" use="required"/>
        <xsd:attribute name="time" type="xsd:time" use="required"/>
        <xsd:attribute name="date" type="xsd:date" use="required"/>
        <xsd:attribute name="language" type="xsd:language" default="en"/>
        <xsd:attribute name="referenceSearchPaths" type="xsd:string" use="optional"/>
        <xsd:attribute name="languages" type="xsd:string" default="en"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="MarkupType">
    <xsd:annotation>
      <xsd:documentation>
      The redline markup element for PLMXML - is a simple annotation
      type that describes its textual data via the xhtml spec. Thus
      the text can include format and font information as per a 
      normal html document.
      The redline element(s) is defined via simple polyline geometric
      element and references to related entities can be made via the 
      'EntityRef' element.
      </xsd:documentation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:sequence>
          <xsd:element name="html">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:any namespace="http://www.w3.org/1999/xhtml" processContents="skip" maxOccurs="unbounded"/>
              </xsd:sequence>
              <xsd:anyAttribute namespace="http://www.w3.org/1999/xhtml"/>
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="Redline" type="plm:PolyLineType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:EntityRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="author" type="xsd:string" use="optional"/>
        <xsd:attribute name="time" type="xsd:time" use="optional"/>
        <xsd:attribute name="date" type="xsd:date" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Markup" type="plm:MarkupType" substitutionGroup="plm:Attribute"/>
  <!-- -->
  <xsd:complexType name="SchemaType">
    <xsd:annotation>
      <xsd:documentation>
      This element contains or references an XML Schema used by the document it occurs
      in. The schema may be a full schema, or a 'skeleton' schema only provided to convey
      type hierarchy information.
      
      Attributes:
      
      schemaRef:         URI Reference to schema file
      
      Elements:
      
      The actual schema, in the xsd namespace.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:sequence>
          <xsd:any namespace="##any" processContents="strict" maxOccurs="unbounded"/>
          <!-- have to use ##any to allow for appinfo elements -->
        </xsd:sequence>
        <xsd:attribute name="schemaRef" type="plm:anyURIType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="SchemaInfoType">
    <xsd:annotation>
      <xsd:documentation>
      This element contains information about a PLMXML schema extension. It is embedded
      in the schema file inside an appinfo element.
      
      Attributes:
      
      version:       e.g. "4.1.1"
      status:        e.g. "development", "release".
      skeleton:      true if this is a schema skeleton, i.e. it just defines the type
                     hierarchy but does not specify any attributes or sub-elements.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="author" type="xsd:string"/>
    <xsd:attribute name="name" type="xsd:string"/>
    <xsd:attribute name="date" type="xsd:date"/>
    <xsd:attribute name="version" type="xsd:string"/>
    <xsd:attribute name="status" type="xsd:string"/>
    <xsd:attribute name="skeleton" type="xsd:boolean" default="false"/>
  </xsd:complexType>
  <xsd:element name="SchemaInfo" type="plm:SchemaInfoType"/>
  <!-- -->
  <xsd:simpleType name="LoadOptionModeType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration to define how fully components are to be loaded:

      full:    Components are to be fully loaded (heavyweight)
      partial: Components are to be partially loaded (lightweight)
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="full"/>
      <xsd:enumeration value="partial"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LoadOptionErrorActionType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration to determine the action when a load operation fails: 
      
      abort:    The load operation will be aborted
      continue: The load operation will continue despite errors
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="abort"/>
      <xsd:enumeration value="continue"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LoadOptionComponentSetType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration for defining how the subcomponents of a structure should be loaded:

      top:     Do not load any of the sub-components of a loaded component, Only load specified 
               top-level assemblies and their assembly-level geometry
      last:    Load the subcomponents specified in each component's file
      all:     Load all the sub-components, recursively
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="top"/>
      <xsd:enumeration value="last"/>
      <xsd:enumeration value="all"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LoadOptionRevisionType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration to determine which version of a component is loaded:
    
      specified: Load the version of the component as specified by the hierarchy
      latest:    Load the latest version of the subcomponent
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="specified"/>
      <xsd:enumeration value="latest"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LoadOptionLinkedComponentsType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration to determine how components related by interpart relations
      are to be loaded

      none:      Do not load related components
      immediate: Only load directly related components
      all:       Load directly and indirectly related components
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="none"/>
      <xsd:enumeration value="immediate"/>
      <xsd:enumeration value="all"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LoadOptionPartFamilyComponentsType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration to determine the action if missing part family members are encountered:
      
      ignore:   Ignore the missing part family members
      generate: Create missing part family members
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="generate"/>
      <xsd:enumeration value="ignore"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LoadOptionPreferredRepresentationsScopeType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration to determine to what extent the named representations are applied:
      
      top:  Apply geometric configurations to single structure level only
      all:  Apply geometric configurations to all levels
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="top"/>
      <xsd:enumeration value="all"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="LoadOptionPreferredRepresentationType">
    <xsd:annotation>
      <xsd:documentation>
      This element defines an entry in the ordered list of representation names that should be 
      selected.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="LoadOptionPreferredRepresentationsType">
    <xsd:annotation>
      <xsd:documentation>
      This element defines an ordered list of representation names that should be 
      selected. The order of appearance in the element defines the order 
      of usage. Only the first valid geometric configuration, encountered in the list,
      is applied to any one item.
      
      Also known as 'ReferenceSets' in NX.

      Elements:
       
      PreferredRepresentation: One element per configuration. (At least one).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:choice>
          <xsd:element name="PreferredRepresentation" type="plm:LoadOptionPreferredRepresentationType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="scope" type="plm:LoadOptionPreferredRepresentationsScopeType"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="LoadOptionSearchPathType">
    <xsd:annotation>
      <xsd:documentation>
      This element defines a single search path.

      Attributes:
      
      path:       The search path
      recursive:  True if the subdirectories of the search directory must also be searched
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="path" type="xsd:string" use="required"/>
    <xsd:attribute name="recursive" type="xsd:boolean" default="false"/>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="LoadOptionSearchPathsLocationType">
    <xsd:annotation>
      <xsd:documentation>
      Enumeration to determine where where to find the files to load.
      
      local:       From the directory of the parent assembly.
      specified:   By using the explicit filenames stored in the loaded files  
                   (for example a CAD file for an assembly may contain 
                   explicit filenames for the CAD files of the sub-assemblies).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="local"/>
      <xsd:enumeration value="specified"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="LoadOptionSearchPathsType">
    <xsd:annotation>
      <xsd:documentation>
      This element defines an ordered list of search.

      Elements:
       
      SearchPath:    One element per search path. (At least one).

      Attributes:      
      
      location:      This is an enum with values:
        local:       From the directory of the parent assembly.
        specified:   By using the explicit filenames stored in the loaded files  
                     (for example a CAD file for an assembly may contain 
                     explicit filenames for the CAD files of the sub-assemblies).
      
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:choice>
          <xsd:element name="SearchPath" type="plm:LoadOptionSearchPathType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="location" type="plm:LoadOptionSearchPathsLocationType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="LoadOptionsType">
    <xsd:annotation>
      <xsd:documentation>
      The purpose of this element is to specify global options or parameters
      which control the precise way in which an application loads a Product 
      Structure. 
      This is to ensure that different applications can load, and visualise, the
      same Product Structure in exactly the same way.
      There is at most one LoadOptions element in a PLM XML file.

      Elements:

      PreferredRepresentations: The list of named representations to be
                        selected.
      SearchPaths:      Optional list of search paths for data

      Attributes:

      mode:             Load items fully or partially.
      errorAction:      Action to take when a component fails to load.
      componentSet:     Load none, all or last-used of the subcomponents
      revision:         Load the specified or latest revision of the components
      componentSubstitution: Determines whether component substitution is permitted
      linkedComponents: Determines how related components are loaded.
      partFamilyComponents: Determines the action to take if a part family member is missing.
      variantRef:       References a multiple language version of variant. If
                        multiple language support is required, variantRef should
                        be used in addition to variant.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="PreferredRepresentations" type="plm:LoadOptionPreferredRepresentationsType" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="SearchPaths" type="plm:LoadOptionSearchPathsType" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="mode" type="plm:LoadOptionModeType" default="full"/>
    <xsd:attribute name="errorAction" type="plm:LoadOptionErrorActionType" default="continue"/>
    <xsd:attribute name="componentSet" type="plm:LoadOptionComponentSetType" default="all"/>
    <xsd:attribute name="revision" type="plm:LoadOptionRevisionType" use="optional"/>
    <xsd:attribute name="componentSubstitution" type="xsd:boolean" default="true"/>
    <xsd:attribute name="linkedComponents" type="plm:LoadOptionLinkedComponentsType" default="none"/>
    <xsd:attribute name="variant" type="xsd:string" use="optional"/>
    <xsd:attribute name="partFamilyComponents" type="plm:LoadOptionPartFamilyComponentsType" default="generate"/>
    <xsd:attribute name="variantRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="ApplicationType">
    <xsd:annotation>
      <xsd:documentation>
      This element contains information to identify a particular application. 
      
      Attributes:
    
      name:       Name of the application. 
                          
      version:    The version of the application. No specific format is defined for this 
                  and in general it will depend on the value of the 'name' attribute.      
      </xsd:documentation>
    </xsd:annotation>   
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:attribute name="name" type="xsd:string" use="required"/>
        <xsd:attribute name="version" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="DocumentHeaderType">
    <xsd:annotation>
      <xsd:documentation>
      This element contains header information for the PLMXML document. 
      
      Attributes:
    
      traverseRootRefs:   a collection of elements to start from, if traversing
                          the PLM XML elements according to some rule.
      transferContext:    a string which can be used to indicate the context in
                          which this PLMXML file is being transferred.
      
      Elements:
      
      Schema:             a collection of schema elements.
      LoadOptions:        Global options for the loading of the associated document.
      Application:        Defines the set of applications (or components) that were used to 
                          author this document.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:sequence>
          <xsd:element name="Schema" type="plm:SchemaType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element name="LoadOptions" type="plm:LoadOptionsType" minOccurs="0" maxOccurs="1"/>
          <xsd:element name="Application" type="plm:ApplicationType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="traverseRootRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="transferContext" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="PLMXMLType">
    <xsd:annotation>
      <xsd:documentation>
      This defines the type of the outermost element in a PLMXML file.
      
      Elements:
      
      Header:         Document header
      AttribOwner:    Any elements derived from AttribOwner are allowed under
                      this element, except as described below.
      ViewControl:    Represents a camera or view point in the Motion schema,
                      where a ViewControl does not already exist under a ProductDef.
      Text:           Represents text in multiple languages.
      </xsd:documentation>
      <!-- The elements inside the appinfos are not part of the actual schema, but are
      processed by the CodeGenerator, and so appear in the PLM XML SDK run-time
      model and API. -->
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">sdkname=Document</xsd:appinfo>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">AdditionalElements=
              http://www.plmxml.org/Schemas/PLMXMLSchema:ProductDefType ProductDef
              http://www.plmxml.org/Schemas/PLMXMLSchema:StructureDef StructureDef
              http://www.plmxml.org/Schemas/PLMXMLSchema:Representation Representation
              http://www.plmxml.org/Schemas/PLMXMLSchema:ConstructionGeometryType ConstructionGeometry
              http://www.plmxml.org/Schemas/PLMXMLSchema:Structure Structure
              http://www.plmxml.org/Schemas/PLMXMLSchema:StructureRevision StructureRevision</xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DocumentBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="Header" type="plm:DocumentHeaderType"/>
          <xsd:element ref="plm:AttribOwner"/>
          <xsd:element ref="plm:ViewControl"/>
          <xsd:element name="Text" type="plm:MultipleLanguageTextType"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PLMXML" type="plm:PLMXMLType"/>
  <!-- -->
  <!-- ************************* Structure *********************************** -->
  <!-- -->
  <xsd:complexType name="StructureBase">
    <xsd:annotation>
      <xsd:documentation>
      This is a base type for objects which can be revisioned and support hierarchical, 
      configurable structure.
      
      Attributes:
      
      catalogueId: The identifier of the Structure, unique in some context, e.g. an 
                   Organisation.
      
      optionRefs:  Options. Each Option gives the full set of allowed values for this
                   product. ProductRevisions may specify an Option with a sub-set of
                   allowed values.
      propertyRefs: reference to Properties
      
      Elements:

      PropertyGroup
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="catalogueId" type="xsd:string" use="optional"/>
        <xsd:attribute name="optionRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Option"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Structure" type="plm:StructureBase" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ************************* StructureRevision *********************** -->
  <!-- -->
  <xsd:complexType name="StructureRevisionBase">
    <xsd:annotation>
      <xsd:documentation>
      This is a revision of a Structure.
      
      Attributes:
    
      revision:      Identifies the revision. Could be numeric, alphabetic, or a mixture.
      version:       Gives the current 'version' of this revision. The version captures
                     changes en route to the next revision of this Product. 
      masterRef:     Reference to the Structure of which this is a version.
      optionRefs:    Options. Each Option gives the set of allowed values for this
                     StructureRevision. 
      instanceRefs:  Reference to elements derived from Instance, which define the
                     hierarchical structure. Both StructureRevision and
                     StructureRevisionView can have instanceRefs. In the case of
                     StructureRevision, the element is then representing a 'default' or
                     'unspecified' view. These Instances should not be GDEInstances.
                     
      gdeInstanceRefs: Referenced GDEInstance or GDEInstanceGroup elements.

     
      simplifiedRepRefs: If an assembly has replacement representations (that is, in case
                     the assembly structure is not important in some context, then the
                     replacement representations can be used).
      propertyRefs:  reference to Properties  

      Elements:
                     
      VariantDefault    
      VariantRuleCheck
      PropertyGroup
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:VariantDefault"/>
          <xsd:element ref="plm:VariantRuleCheck"/>
          <xsd:element ref="plm:PropertyGroup"/>
        </xsd:choice>
        <xsd:attribute name="revision" type="xsd:string" use="required"/>
        <xsd:attribute name="version" type="xsd:nonNegativeInteger" use="optional"/>
        <xsd:attribute name="masterRef" type="plm:anyURIType" use="required" plm:refType="plm:Structure"/>
        <xsd:attribute name="optionRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Option"/>
        <xsd:attribute name="instanceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Instance"/>
        <xsd:attribute name="gdeInstanceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="simplifiedRepRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="StructureRevision" type="plm:StructureRevisionBase" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ************************* StructureRevisionView ****************************** -->
  <!-- -->
  <xsd:simpleType name="OccurrenceControlEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="explicit"/>
      <xsd:enumeration value="implicit"/>
      <xsd:enumeration value="mixed"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="StructureRevisionViewBase">
    <xsd:annotation>
      <xsd:documentation>
      This is a base type for elements representing a 'view' (design, 
      manufacturing, etc) of a StructureRevision.

      Attributes:

      revisionRef:      Specifies the StructureRevision of which this is a view.
      viewRef:          A reference to a view element (e.g. 'design')
      structureViewRef: A reference to the corresponding element derived from
                        StructureView (e.g. ProductStructureView), of which this
                        is a revision.
      
      instanceRefs:     Referenced Instances which define the hierarchical structure.
                      
      gdeInstanceRefs:  Referenced GDEInstance or GDEInstanceGroup elements. 
      
      connectionInstanceRefs: Referenced ConnectionInstance elements.
      
      signalInstanceRefs: Reference to Instance elements which reference SignalRevision 
                        elements.
                        
      routeInstanceRefs: Reference to Instance elements which reference Route 
                        elements.
                      
      occurrenceRefs:   if an assembly, this element may have certain Occurrences singled
                        out, so that, for example, they can have different Materials
                        associated, or can be repositioned.
                        
      locationInstanceRefs: Reference to LocationInstance elements.
      propertyRefs:     reference to properties
      ruleRefs:         reference to configuration rules (derived from ConfigRuleBase), which
                        specify how this structure was configured.
                        
      occurrenceControlState: "explicit", "implicit", or "mixed"

      Elements:

      Occurrence:       These Occurrences play the same role as occurrenceRefs, above.
      PropertyGroup     a group of Properties of the StructureRevisionView
      RepresentationEntity: 'logical entities' in the StructureRevisionView, which 
                        correspond to a number of equivalent objects in Representation files
      EntityPropertyGroup:  used to specify Properties of logical entities in the
                        StructureRevisionView
      SymbolicOccurrence: SymbolicOccurrences in the context of this StructureRevisionView
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element ref="plm:Occurrence" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
          <xsd:element ref="plm:RepresentationEntity" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:EntityPropertyGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:SymbolicOccurrence" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="revisionRef" type="plm:anyURIType" use="optional" plm:refType="plm:StructureRevision"/>
        <xsd:attribute name="viewRef" type="plm:anyURIType" use="optional" plm:refType="plm:View"/>
        <xsd:attribute name="structureViewRef" type="plm:anyURIType" use="optional" plm:refType="plm:StructureView"/>
        <xsd:attribute name="instanceRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:Instance"/>
        <xsd:attribute name="gdeInstanceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="connectionInstanceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:ConnectionInstance"/>
        <xsd:attribute name="signalInstanceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Instance"/>
        <xsd:attribute name="routeInstanceRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="occurrenceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Occurrence"/>
        <xsd:attribute name="locationInstanceRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
        <xsd:attribute name="ruleRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:ConfigRule"/>
        <xsd:attribute name="occurrenceControlState" type="plm:OccurrenceControlEnum" default="implicit"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="StructureRevisionView" type="plm:StructureRevisionViewBase" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ************************* Product ****************************** -->
  <!-- -->
  <xsd:simpleType name="ProductSourceEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="make"/>
      <xsd:enumeration value="buy"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="ProductType">
    <xsd:annotation>
      <xsd:documentation>
      This is the revision-independent Product, derived from Structure.
      It corresponds to the STEP 'product'.
      
      Attributes:
      
      productId:        The identifier of the Product, unique in some context, e.g. an 
                        Organisation.
      alternateForRef:  An 'alternate' Product is one which is substitutable, in all 
                        contexts, for a particular Product. If this is an 'alternate'
                        Product, then this attribute references the Product for which
                        this is an alternate.
      unitRef:          The default Unit for the 'quantity' attribute of any referencing
                        ProductInstance elements.
      designRequired:   true if all the revisions of this Product must have
                        at least one associated DesignRevision
      source:           whether the Product is manufactured or bought-in
      vendorRef:        References the Vendor when the Product represents a
                        vendor part.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureBase">
        <xsd:attribute name="productId" type="xsd:string" use="optional"/>
        <xsd:attribute name="alternateForRef" type="plm:anyURIType" use="optional" plm:refType="plm:Product"/>
        <xsd:attribute name="unitRef" type="plm:anyURIType" use="optional" plm:refType="plm:Unit"/>
        <xsd:attribute name="designRequired" type="xsd:boolean" default="true"/>
        <xsd:attribute name="source" type="plm:ProductSourceEnum" use="optional"/>
        <xsd:attribute name="vendorRef" type="plm:anyURIType" use="optional" plm:refType="plm:Vendor"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Product" type="plm:ProductType" substitutionGroup="plm:Structure"/>
  <!-- -->
  <!-- ************************* ProductRevision *********************** -->
  <!-- -->
  <xsd:complexType name="ProductRevisionType">
    <xsd:annotation>
      <xsd:documentation>
      This is a revision of a Product. It corresponds to STEP 'product_definition_formation'.
      
      Attributes:
      
      primaryDesignRef: The primary DesignRevision, if any. This attribute is
                        deprecated. Use primaryDesign on RepresentedByRelation
                        instead.
      source:           Whether the Product is manufactured or bought-in.
      designRequired:   true if the ProductRevision must have at least one
                        associated DesignRevision.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionBase">
        <xsd:attribute name="primaryDesignRef" type="plm:anyURIType" use="optional" plm:refType="plm:DesignRevision" plm:deprecated="true"/>
        <xsd:attribute name="source" type="plm:ProductSourceEnum" use="optional"/>
        <xsd:attribute name="designRequired" type="xsd:boolean" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductRevision" type="plm:ProductRevisionType" substitutionGroup="plm:StructureRevision"/>
  <!-- -->
  <!-- ************************* ProductRevisionView ******************************** -->
  <!-- -->
  <xsd:complexType name="ProductRevisionViewType">
    <xsd:annotation>
      <xsd:documentation>
      This is a 'view' (e.g. 'design', 'manufacturing', 'maintenance') of a revision of a 
      Product.
      
      Attributes:
      
      representationRefs: Representations of the ProductRevisionView.
      materialRef:        an optional Material for use when displaying the
                          ProductRevisionView.
      preferredUnits:     (deprecated) The units preferred when presenting this element to the user.
                          Note that this does NOT affect any numerical values
                          representing lengths in the PLMXML file - these are always in
                          metres. This attribute is deprecated - use a DisplayPreferences
                          Property instead.
      geometryRefs:       geometry elements referenced by the ProductRevisionView.
      type:               assembly, minimal, wire, solid, sheet or general.
      
      annotation3DGroupRefs: (deprecated) reference to any 3D Annotation groups
                          associated with the ProductRevisionView.
                          (note: these are not defined within this schema).
                          
      partRefs:           (deprecated). If an assembly, it is also possible to 'instance' 
                          other Parts directly without the need for an actual Instance 
                          element. However this is limited to cases where information 
                          stored on the Instance (such as Transform) is not required.
      designRequired:     true if the ProductRevisionView must have at least one
                          associated DesignRevisionView.
      
      Elements:

      Representation:     see representationRefs.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionViewBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:Representation"/>
        </xsd:choice>
        <xsd:attribute name="representationRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:Representation"/>
        <xsd:attribute name="materialRef" type="xsd:IDREF" use="optional" plm:refType="plm:Material"/>
        <xsd:attribute name="preferredUnits" type="plm:PreferredPartUnitsType" default="millimetres" plm:deprecated="true"/>
        <xsd:attribute name="geometryRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Entity"/>
        <xsd:attribute name="type" type="plm:PartTypesType" use="optional"/>
        <xsd:attribute name="annotation3DGroupRefs" type="plm:uriReferenceListType" use="optional" plm:deprecated="true"/>
        <xsd:attribute name="partRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:ProductRevisionView" plm:deprecated="true"/>
        <xsd:attribute name="designRequired" type="xsd:boolean" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductRevisionView" type="plm:ProductRevisionViewType" substitutionGroup="plm:StructureRevisionView"/>
  <!-- -->
  <xsd:element name="Part" type="plm:ProductRevisionViewType" substitutionGroup="plm:StructureRevisionView" plm:deprecated="true">
    <xsd:annotation>
      <xsd:documentation>
      The Part element is only provided for legacy compatibility. Use the
      ProductRevisionView element in its place.
      </xsd:documentation>
      <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">output=ignore</xsd:appinfo>
    </xsd:annotation>
  </xsd:element>
  <!-- -->
  <!-- ****************************** View ****************************** -->
  <!-- -->
  <xsd:complexType name="ViewType">
    <xsd:annotation>
      <xsd:documentation>
      This is a 'view' (e.g. 'design', 'manufacturing', 'maintenance'). Referenced by a 
      ProductRevisionView.
      
      Attributes:
      
      (the 'name' attribute of the View is inherited from AttribOwnerBase)
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="View" type="plm:ViewType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- *********************** GDERelationshipType *********************** -->
  <!-- -->
  <xsd:simpleType name="GDERelationshipType">
    <xsd:annotation>
      <xsd:documentation>
      This is the type of a relationship between two Occurrences or Instances.
      
      associated:
      attached:
      related:
      connection:      An Occurrence of a Connection, related to an Occurrence
                       of a GDE to which it connects.
      implementation:  An 'implemented by' relation, for example between an
                       Occurrence of a Connection and an Occurrence of a
                       ProductRevisionView; or between an Occurrence of a
                       functional PRV and a physical PRV.
      implements:      The inverse of 'implemented by'. For example, an Occurrence
                       of a PRV may implement a RouteSection.
      realisation:
      misc:
      
      signalSource:    from Instance of a Signal to Occurrence of a Signal,
                       Connection, GDE or Product.
      signalTarget:    from Instance of a Signal to Occurrence of a Signal,
                       Connection, GDE or Product.
      signalTransmitter: from Instance of a Signal to Occurrence of a Signal,
                       Connection, GDE or Product.
                       
      processVariable: from Instance of a Signal to the corresponding
                       Occurrence of a ProcessVariable.
      redundancy:      from Instance of Signal to Occurrence of a Signal
                       which is replicated by the first one.
                       
      signalValue:     from Instance of a Signal to a SignalValue.
      processVariableValue: from Instance of a ProcessVariable to a
                       ValueWithUnit.
      
      route:           from an Occurrence or Instance to a Route.
      software:        from an Occurrence or Instance of a Processor
                       or Software to an Occurrence or Instance of a
                       Software which uses or depends on it.
      processorGateway: from an Occurrence or Instance of a Processor
                       to an Occurrence or Instance of another Processor 
                       for which the first Processor acts as a Gateway.

      mass:            Relates a MechanismOccurrence or MechanismInstance to an
                       Occurrence or Instance in the ProductStructure that
                       determines its mass.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="associated"/>
      <xsd:enumeration value="attached"/>
      <xsd:enumeration value="related"/>
      <xsd:enumeration value="connection"/>
      <xsd:enumeration value="implementation"/>
      <xsd:enumeration value="implements"/>
      <xsd:enumeration value="realisation"/>
      <xsd:enumeration value="misc"/>
      <xsd:enumeration value="signalSource"/>
      <xsd:enumeration value="signalTarget"/>
      <xsd:enumeration value="signalTransmitter"/>
      <xsd:enumeration value="processVariable"/>
      <xsd:enumeration value="redundancy"/>
      <xsd:enumeration value="signalValue"/>
      <xsd:enumeration value="processVariableValue"/>
      <xsd:enumeration value="route"/>
      <xsd:enumeration value="software"/>
      <xsd:enumeration value="processorGateway"/>
      <xsd:enumeration value="mass"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <!-- ******************** GDEReferenceType ********************* -->
  <!-- -->
  <xsd:complexType name="GDEReferenceType">
    <xsd:annotation>
      <xsd:documentation>
      A reference from a GDEInstance to an Occurrence or InstancePath.
       
      An entity in a Representation can also be specified.
      
      Attributes:
     
      type:           type of the Reference.
      occurrenceRef:  reference to an Occurrence or InstancePath.
      pathRefs:       a list of Instance elements defining a path through the
                      Structure. pathRefs and occurrenceRef should not both be
                      present.
      targetRef:      reference to a RepresentationEntity.
      
      Sub-elements:
     
      EntityRef:      (deprecated) reference to an Entity in a Representation. This must 
                      be a Representation of the 'bottom Structure' of the Occurrence
                      or InstancePath.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element ref="plm:EntityRef" minOccurs="0" plm:deprecated="true"/>
        </xsd:sequence>
        <xsd:attribute name="type" type="plm:GDERelationshipType" use="optional"/>
        <xsd:attribute name="occurrenceRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="targetRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="pathRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Instance"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <!-- ************************* GDEBase ************************* -->
  <!-- -->
  <xsd:complexType name="GDEBase">
    <xsd:annotation>
      <xsd:documentation>
      The GDE element represents an internal constituent of a Structure
      object, such as a Design Feature, Port, Annotation, etc. The Structure
      instances the GDE by means of a GDEInstance.

      Attributes:

      gdeInstanceRefs: a list of references to associated GDEInstances or
                       GDEInstanceGroups. This is to allow the GDE to have
                       internal structure.
      propertyRefs:    reference to properties

      Elements:
      
      PropertyGroup
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="gdeInstanceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GDE" type="plm:GDEBase" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ****************************** LinkBase ****************************** -->
  <!-- -->
  <xsd:complexType name="LinkBase">
    <xsd:annotation>
      <xsd:documentation>
      A type of GDE which represents a non-revisionable connection between 
      InstancePaths in an assembly.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GDEBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Link" type="plm:LinkBase" substitutionGroup="plm:GDE"/>
  <!-- -->
  <!-- ************************** ConnectionBase ************************** -->
  <!-- -->
  <xsd:complexType name="ConnectionBase">
    <xsd:annotation>
      <xsd:documentation>
      A Connection is a structured object which represents a connection between a
      number of InstancePaths in an assembly.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Connection" type="plm:ConnectionBase" substitutionGroup="plm:Structure"/>
  <!-- -->
  <!-- ************************* ConnectionRevisionType ************************* -->
  <!-- -->
  <xsd:complexType name="ConnectionRevisionType">
    <xsd:annotation>
      <xsd:documentation>
      This is a revision of a Connection. 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConnectionRevision" type="plm:ConnectionRevisionType" substitutionGroup="plm:StructureRevision"/>
  <!-- -->
  <!-- ************************ ConnectionRevisionViewType *********************** -->
  <!-- -->
  <xsd:complexType name="ConnectionRevisionViewType">
    <xsd:annotation>
      <xsd:documentation>
      This is a 'view' (e.g. 'design', 'manufacturing', 'maintenance') of a 
      revision of a Connection.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionViewBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConnectionRevisionView" type="plm:ConnectionRevisionViewType" substitutionGroup="plm:StructureRevisionView"/>
  <!-- -->
  <!-- ******************************* Feature ************************************ -->
  <!-- -->
  <xsd:complexType name="FeatureBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      This abstract datatype describes a single feature within the feature
      tree hierarchy. The feature description contains basic information
      such as name and type, as well as information to link the feature
      to the originating application. Parameter descriptions can also
      be included in the feature description.

      Attributes:

      nextFeature       - (optional) the XML id of the next feature in the 
                          feature hierarchy.
      targetFeature     - (optional) the XML id of the target feature that this
                          feature relies on. The target feature defines which
                          feature forms the resultant entity.
      toolFeature       - (optional) the XML id of the tool feature that this
                          feature relies on.  
      suppressed        - (default=false) TRUE if the feature is suppressed in 
                          the feature tree.
      editable          - (default=false)) TRUE if any parameters of the feature may 
                          be edited.

      Elements:

      Type              - (1) element describing the type of feature. This is an 
                          application specific type. The receiving application is not 
                          meant to deduce or interpret the type but could use it to 
                          classify or group the feature.

      Parameter         - (0 or many) elements to describe the parameters associated 
                          with the  feature. It is up to the application to decide 
                          what parameters to exchange or describe within the feature 
                          description.
      EntityRef         - (0 or many) references to entities on another representation
                          (e.g. a BRep) expressed as PLMXML references.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GDEBase">
        <xsd:sequence>
          <xsd:element name="Type" type="plm:UserEnumDataType"/>
          <xsd:element name="Parameter" type="plm:UserDataElementType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element ref="plm:EntityRef"/>
          </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="nextFeature" type="xsd:IDREF" use="optional" plm:refType="plm:Feature">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="targetFeature" type="xsd:IDREF" use="optional" plm:refType="plm:Feature">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="toolFeature" type="xsd:IDREF" use="optional" plm:refType="plm:Feature">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="suppressed" type="xsd:boolean" default="false"/>
        <xsd:attribute name="editable" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Feature" type="plm:FeatureBase" substitutionGroup="plm:GDE"/>
  <!-- -->
  <xsd:complexType name="EnumFeatureType">
    <xsd:annotation>
      <xsd:documentation>
      Generic feature element which can be used to enumerate
      'any' parameterised feature. No semantic or specialised 
      information is exchanged via this schema.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:FeatureBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EnumFeature" type="plm:EnumFeatureType" substitutionGroup="plm:Feature"/>
  <!-- -->
  <!-- ******************************** FeatureTree ************************** -->
  <!-- -->
  <xsd:complexType name="FeatureTreeType">
    <xsd:annotation>
      <xsd:documentation>
      This datatype describes a feature hierarchy for feature based
      modelling system.
  
      The feature hierarchy is represented via a single linked list of
      set of feature elements that reference the next feature in the 
      hieratchy. The linked list hierachy must describe the features
      in 'replay' order (ie. first operation first in the hierachy).
      There is scope to describe 'tree-like' dependencies via additional
      'dependentFeatures' reference attributes. 
  
      The feature tree is represented within PLMXML as an 'Internal Representation'
      - the FeatureTreeType is based on InternalRepBase and the 
      element FeatureTree is a substitution class for InternalRep.

      Attributes:

      firstFeature   - (optional) the XML id of the first feature in the 
                       feature hierarchy.
      editable       - (optional) TRUE if any features of the feature tree 
                       may be edited.

      Elements:

      Type           - (1) element describing the type of feature tree. This is an 
                       application specific type. The receiving application is not 
                       meant to deduce or interpret the type but could use it to 
                       classify feature tree.

      Feature        - (0 or many) the list of features thaat make up the feature tree.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:InternalRepBase">
        <xsd:sequence>
          <xsd:element name="Type" type="plm:UserEnumDataType"/>
          <xsd:element ref="plm:Feature" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="firstFeature" type="xsd:IDREF" use="optional" plm:refType="plm:Feature">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="editable" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="FeatureTree" type="plm:FeatureTreeType" substitutionGroup="plm:InternalRep"/>
  <!-- -->
  <!-- ****************************** StructureUsage ****************************** -->
  <!-- -->
  <xsd:complexType name="StructureUsageBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      A base type for a usage relation between Structure, StructureRevision and
      StructureRevisionView elements.

      Attributes:

      instancedRef     Reference to the 'used' element. This should be derived from 
                       StructureRevisionView, StructureRevision, StructureView, or
                       Structure, or GDE. In the latter cases some other context must determine
                       which view or revision is intended.

      partRef:         This attribute is retained for compatibility reasons and should
                       only be used for Product Structure, not general Structures.

      transformRef:    optional Transform which positions the 'used' element in the 
                       coordinates of the using one.

      materialRef:     reference to a Material element to use when displaying the 'used' 
                       element.
      propertyRefs:    reference to properties

      representationRefs: an optional collection of Representations of the 'used' element.
      designRequired:  true if the 'used' element must have at least one
                       corresponding element in the Design Structure.
      
      Elements:

      Transform:       see transformRef. (This should not be used in conjunction with
                       transformRef).
      Representation:  see representationRefs
      VariantCondition:An optional VariantCondition

      Reference        Elements referenced by the StructureUsage. This enables the
                       representation of such relationships as "connected to", and
                       "implemented by".
      PropertyGroup    a group of Properties of the StructureUsage

      EntityPropertyGroup:  used to specify Properties of logical entities in the 
                       referenced StructureRevisionView, in the context of the StructureUsage.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element ref="plm:Transform" minOccurs="0"/>
          <xsd:element ref="plm:Representation" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:VariantCondition" minOccurs="0"/>
          <xsd:element name="Reference" type="plm:GDEReferenceType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
          <xsd:element ref="plm:EntityPropertyGroup" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="instancedRef" type="plm:anyURIType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="transformRef" type="xsd:IDREF" use="optional" plm:refType="plm:Transform"/>
        <xsd:attribute name="materialRef" type="xsd:IDREF" use="optional" plm:refType="plm:Material"/>
        <xsd:attribute name="partRef" type="plm:anyURIType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="representationRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Representation"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
        <xsd:attribute name="designRequired" type="xsd:boolean" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="StructureUsage" type="plm:StructureUsageBase" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ****************************** AttributeContext ****************************** -->
  <!-- -->
  <xsd:complexType name="AttributeContextType">
    <xsd:annotation>
      <xsd:documentation>
      An AttributeContext element specifies the source for an overridden Occurrence 
      attribute or property (e.g. quantity, Transform). An Occurrence attribute or 
      property can be overridden in various ways, for example in the context of a 
      higher-level Occurrence. The AttributeContext is not intended to describe the 
      override mechanism - it simply indicates the context object which was responsible 
      for the override.
      
      Attributes:
      
      attributeName:   The name of the (xml) attribute being overridden, if appropriate.
      targetRef:       The element which carries the attribute being overridden.
      contextRef:      The context element, for example a higher-level Occurrence.
      changeRef:       A reference to an element representing a Change which caused this
                       attribute to be overridden.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:attribute name="attributeName" type="xsd:string" use="optional"/>
        <xsd:attribute name="targetRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="contextRef" type="plm:anyURIType" use="optional"/>
        <xsd:attribute name="changeRef" type="plm:anyURIType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AttributeContext" type="plm:AttributeContextType"/>
  <!-- -->
  <!-- ****************************** Occurrence ****************************** -->
  <!-- -->
  <xsd:complexType name="OccurrenceType">
    <xsd:annotation>
      <xsd:documentation>
      Occurrence. An Occurrence specifies a usage of a Structure, StructureRevision, or
      StructureRevisionView in an Assembly. The usage is defined by specifying a chain of 
      Instances which lead from the Assembly down to the Structure, or by a chain of 
      Instances and other Occurrences, which when joined together define an Instance
      chain. It is also possible for an Occurrence to reference a ProductView at the end
      of its Instance chain, rather than a Structure.

      The Assembly, which is the parent of the first Instance in the Instance chain, is
      called the 'top Structure' of the Occurrence. The Structure, which is instanced by
      the last Instance in the Instance chain, is called the 'bottom Structure' of the
      Occurrence.

      Note that the following inherited attributes on an Occurrence override the
      attributes of the same name on the last Instance of the Instance chain:

        materialRef
        instancedRef
        partRef
        representationRefs

      In addition, the 'transformRef' attribute overrides the transform
      obtained by accumulating the transforms in the Instance chain. 

      Attributes:

      instanceRefs:   chain of Instances which define the Occurrence. (May end in a
                      GDEInstanceGroup).
      pathRefs:       chain of Instances and Occurrences which, when joined together,
                      define an Instance chain. Only one of instanceRefs and pathRefs
                      should be present.

      geometryRefs:   optional geometry associated with this Occurrence.

      occurrenceRefs: an Occurrence may have a number of 'child' Occurrences, which this 
                      attribute specifies. A child Occurrence must have an Instance chain
                      which is the same as that of its parent, but with one more Instance
                      added at the bottom end. An Occurrence is normally only rendered in
                      a view if it has no child Occurrences.

      alternativeOfRef: It is possible for one ProductView to be defined by reference to
                      another ProductView. In this case the first ProductView will
                      contain some Occurrences which override Occurrences in the
                      referenced ProductView. The 'alternativeOfRef' attribute is used to
                      indicate the Occurrence which this Occurrence is overriding. If an
                      Occurrence has an alternativeOfRef attribute, it should not also
                      have an instanceRefs attribute, nor should it have an 
                      occurrenceRefs attribute.

      productViewRef: If an Occurrence has a productViewRef, then it is regarded as an
                      Occurrence of that ProductView, not of its 'bottom Structure'. In
                      this case, the 'top Structure' of the ProductView must be the same
                      as the 'bottom Structure' of the Occurrence. 

      visible:        Flag to indicate the Occurrence is visible. If absent, visible is
                      implied. An Occurrence which references another Occurrence via the
                      alternativeOfRef attribute may override its visibility, i.e. make
                      it visible if invisible or vice-versa. NB This is deprecated -
                      use a Visibility Property instead. 

      lastInstanceParentRef: This is the StructureRevisionView which is the parent of the
                      last Instance in the chain. Although this is implied by the last
                      Instance in the chain, it can be specified explicitly with this
                      attribute, either for convenience, or in the case where
                      instanceRefs is absent.

      sourceRef:      A reference to the InstancePath to which this corresponds (which 
                      will have the same instance path as this Occurrence). 
                      
      linkedOccurrenceRef:  In a Composition ProductView, this attribute references an 
                      Occurrence or ConfiguredOccurrenceGroup in a referenced ProductView. 
                      It indicates that this Occurrence should be treated as an Occurrence
                      not of an entire ProductRevisionView, but only of the specified
                      Occurrence(s).
                       
      linkedGroupRef: A reference to a ConfiguredOccurrenceGroup. This corresponds to the
                      group referenced by 'linkedOccurrenceRef', but contains Occurrences
                      in the Composition ProductView.


      associatedAttachmentRefs: reference to any associated attachments. These are the
                      direct attachments of this Occurrence - any sub-attachments will be
                      referenced by those attachments.

      parentRef:      This is an optional back-pointer reference to a parent Occurrence,
                      which references this Occurrence through its 'occurrenceRefs'
                      attribute.

      instanceNumber  A number, or index. This is only relevant when the last Instance
                      in the path is a GDEInstance.
                      
      occurrenceId:   ID for the Occurrence, unique in the context of the top-level 
                      Structure of the Occurrence.
                      
      controlRefs:    The OccurrenceControlRevision objects controlling this occurrence, if any
      symbolicRefs:   the child SymbolicOccurrences

      Elements: 

      Material:
      EntityMaterial: Allows the association of a Material with an entity; for example
                      the Occurrence could specify the colour of a face of a body. The
                      entity should be in a Representation specified by this Occurrence,
                      or by the last Instance in the Instance chain, or by the 'bottom
                      Structure' of the Occurrence.

      AssociatedAttachment
      
      AttributeContext: Used to specify the source of any overridden attributes or
                      properties of this Occurrence.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureUsageBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:Material"/>
          <xsd:element ref="plm:EntityMaterial"/>
          <xsd:element ref="plm:AssociatedAttachment"/>
          <xsd:element ref="plm:AttributeContext"/>
        </xsd:choice>
        <xsd:attribute name="occurrenceRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:Occurrence"/>
        <xsd:attribute name="instanceRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="pathRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="geometryRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Geometry"/>
        <xsd:attribute name="alternativeOfRef" type="plm:anyURIType" use="optional" plm:refType="plm:Occurrence"/>
        <xsd:attribute name="productViewRef" type="plm:anyURIType" use="optional" plm:refType="plm:ProductView"/>
        <xsd:attribute name="visible" type="xsd:boolean" use="optional" plm:deprecated="true"/>
        <xsd:attribute name="lastInstanceParentRef" type="plm:anyURIType" use="optional" plm:refType="plm:StructureRevisionView"/>
        <xsd:attribute name="sourceRef" type="plm:anyURIType" use="optional" plm:refType="plm:InstancePath"/>
        <xsd:attribute name="linkedOccurrenceRef" type="plm:anyURIType" use="optional" plm:refType="plm:Managed"/>
        <xsd:attribute name="linkedGroupRef" type="plm:anyURIType" use="optional" plm:refType="plm:ConfiguredOccurrenceGroup"/>
        <xsd:attribute name="associatedAttachmentRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:AssociatedAttachment"/>
        <xsd:attribute name="parentRef" type="plm:anyURIType" use="optional" plm:refType="plm:Occurrence"/>
        <xsd:attribute name="instanceNumber" type="xsd:integer" use="optional"/>
        <xsd:attribute name="occurrenceId" type="xsd:string" use="optional"/>
        <xsd:attribute name="controlRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:OccurrenceControlRevision"/>
        <xsd:attribute name="symbolicRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:SymbolicOccurrence"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Occurrence" type="plm:OccurrenceType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ****************************** Instance ****************************** -->
  <!-- -->
  <xsd:complexType name="InstanceBase">
    <xsd:annotation>
      <xsd:documentation>
      A base type for instancing relations between Structure, StructureRevision,
      StructureView and StructureRevisionView elements. (This is not an abstract
      type because the Instance element is retained for compatibility reasons).

      Attributes:

      quantity:         Quantity of the element referenced. If absent, 1 is
                        implied. If present, any contained or referenced
                        Transform is ignored.
      unitRef:          Units for the quantity attribute. If absent, 'each' is
                        implied. An IDREF to a 'Unit' element.
      instanceType:     A 'subtype' string for the instance. No specified
                        semantics.
      sequenceNumber:   Serves to identify the instance within its parent. If
                        present, should be unique within the parent.
      instanceThreadRef: A reference to the InstanceThread which this Instance
                        is included in, if any.
      instanceTypeRef:  References a multiple language version of instanceType.
                        If multiple language support is required,
                        instanceTypeRef should be used in addition to
                        instanceTypeRef.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureUsageBase">
        <xsd:attribute name="quantity" type="xsd:double" use="optional"/>
        <xsd:attribute name="unitRef" type="xsd:IDREF" use="optional" plm:refType="plm:Unit"/>
        <xsd:attribute name="instanceType" type="xsd:string" use="optional"/>
        <xsd:attribute name="sequenceNumber" type="xsd:nonNegativeInteger" use="optional"/>
        <xsd:attribute name="instanceThreadRef" type="plm:anyURIType" use="optional" plm:refType="plm:InstanceThread"/>
        <xsd:attribute name="instanceTypeRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Instance" type="plm:InstanceBase" substitutionGroup="plm:StructureUsage"/>
  <!-- -->
  <!-- ********************* ProductInstance ****************************** -->
  <!-- -->
  <xsd:complexType name="ProductInstanceType">
    <xsd:annotation>
      <xsd:documentation>
      An Instance between Product, ProductRevision, or ProductRevisionView elements.
      
      Attributes:
      
      substituteForRef:  A ProductInstance may be a 'substitute' for another, which means
                       that it may be used instead, but only in the context of their
                       common parent assembly. If this is a substitute for another
                       ProductInstance, then this attribute references it.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:InstanceBase">
        <xsd:attribute name="substituteForRef" type="plm:anyURIType" use="optional" plm:refType="plm:ProductInstance"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductInstance" type="plm:ProductInstanceType" substitutionGroup="plm:Instance"/>
  <!-- -->
  <!-- ********************* CompositionInstance ****************************** -->
  <!-- -->
  <xsd:complexType name="CompositionInstanceType" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      This is a base type for sub-types of Instance which need to reference 
      an Occurrence.
      
      Attributes:
      
      occurrenceRef:   the referenced Occurrence. No specific semantics at this level.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:InstanceBase">
        <xsd:attribute name="occurrenceRef" type="plm:anyURIType" use="optional" plm:refType="plm:Occurrence"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CompositionInstance" type="plm:CompositionInstanceType" substitutionGroup="plm:Instance"/>
  <!-- -->
  <!-- ********************* GDEInstance ****************************** -->
  <!-- -->
  <xsd:complexType name="GDEInstanceType">
    <xsd:annotation>
      <xsd:documentation>
      An Instance of a GDE.
      
      Attributes:
      
      instanceNumber   A number, or index, which identifies the GDEInstance
                       within its parent.
      
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:InstanceBase">
        <xsd:attribute name="instanceNumber" type="xsd:integer" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GDEInstance" type="plm:GDEInstanceType" substitutionGroup="plm:Instance"/>
  <!-- -->
  <!-- ************************ GDEInstanceGroupType ************************* -->
  <!-- -->
  <xsd:complexType name="GDEInstanceGroupType">
    <xsd:annotation>
      <xsd:documentation>
      GDEInstanceGroup: derived from Managed.

      This global element is used to collect together a number of
      GDEInstance elements to simplify referencing.

      Attributes:

      propertyRefs     Reference to Properties.

      Elements:
      
      GDEInstance      Any number of GDEInstances.
      PropertyGroup    A group of Properties applicable to all GDEInstances
                       in the GDEInstanceGroup.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element ref="plm:GDEInstance" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GDEInstanceGroup" type="plm:GDEInstanceGroupType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ********************* ConnectionInstance ****************************** -->
  <!-- -->
  <xsd:complexType name="ConnectionInstanceType">
    <xsd:annotation>
      <xsd:documentation>
      An Instance of a Connection, ConnectionRevision, or ConnectionRevisionView.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:InstanceBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConnectionInstance" type="plm:ConnectionInstanceType" substitutionGroup="plm:Instance"/>
  <!-- -->
  <!-- ************************* ConfigurationContext ******************* -->
  <!-- -->
  <xsd:complexType name="ConfigurationContextType">
    <xsd:annotation>
      <xsd:documentation>
      This element acts as a context for effectivities. An Effectivity can reference a
      ConfigurationContext element to indicate that the Effectivity is only applicable
      to that ConfigurationContext. 
      
      Attributes:
       
      configId:   Unique identifier.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:attribute name="configId" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ConfigurationContext" type="plm:ConfigurationContextType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ********************* Effectivity ****************************** -->
  <!-- -->
  <xsd:complexType name="EffectivityType" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Effectivity Base class.
      
      contextRef: the Structure, StructureRevision, or ConfigurationContext in which this 
                  Effectivity applies. If absent, then the Effectivity is relevant for
                  all Products and ProductRevisions which use the element to which the 
                  Effectivity is attached.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="contextRef" type="plm:anyURIType" use="optional" plm:refType="plm:Managed"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Effectivity" type="plm:EffectivityType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- *********************** Date Effectivity ****************************** -->
  <!-- -->
  <xsd:simpleType name="EffectivityEndConditionType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="stockOut"/>
      <xsd:enumeration value="openEnded"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="DateEffectivityType">
    <xsd:annotation>
      <xsd:documentation>
      Date Effectivity. Indicates that an element is effective between two specified
      dates. If the start is omitted, the effectivity is openEnded in that direction.
      If the end is omitted, the effectivity is openEnded, or stockOut, in that
      direction.

      Attributes:
     
      start:         Start date and time.
      end:           End date and time.
      endCondition:  If the end dateTime is omitted, this attribute specifies
                     whether the effectivity is stockOut or openEnded. OpenEnded means
                     effective indefinitely after the start date; stockOut means only
                     effective 'while stocks last'. 
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EffectivityType">
        <xsd:attribute name="start" type="xsd:dateTime" use="optional"/>
        <xsd:attribute name="end" type="xsd:dateTime" use="optional"/>
        <xsd:attribute name="endCondition" type="plm:EffectivityEndConditionType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DateEffectivity" type="plm:DateEffectivityType" substitutionGroup="plm:Effectivity"/>
  <!-- -->
  <!-- *********************** Lot Effectivity ******************************* -->
  <!-- -->
  <xsd:complexType name="LotEffectivityType">
    <xsd:annotation>
      <xsd:documentation>
      Lot Effectivity. Indicates that an element is effective only for a certain 'lot' or
      batch.

      Attributes:
     
      lot:        Lot identifier.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EffectivityType">
        <xsd:attribute name="lot" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="LotEffectivity" type="plm:LotEffectivityType" substitutionGroup="plm:Effectivity"/>
  <!-- -->
  <!-- *********************** SerialNumber Effectivity ********************** -->
  <!-- -->
  <xsd:complexType name="SerialNumberEffectivityType">
    <xsd:annotation>
      <xsd:documentation>
      Serial Number Effectivity. Indicates that an element is effective for a range of
      serial numbers. If the start is omitted, the effectivity is openEnded in that 
      direction. If the end is omitted, the effectivity is openEnded, or stockOut, 
      in that direction.

      Attributes:
     
      start:         Start serial number.
      end:           End serial number.
      endCondition:  If the end serial number is omitted, this attribute specifies
                     whether the effectivity is stockOut or openEnded. OpenEnded means
                     effective indefinitely after the start serialNumber; stockOut means
                     only effective 'while stocks last'.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EffectivityType">
        <xsd:attribute name="start" type="xsd:string" use="optional"/>
        <xsd:attribute name="end" type="xsd:string" use="optional"/>
        <xsd:attribute name="endCondition" type="plm:EffectivityEndConditionType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SerialNumberEffectivity" type="plm:SerialNumberEffectivityType" substitutionGroup="plm:Effectivity"/>
  <!-- -->
  <!-- ********************* Option ************************************************ -->
  <!-- -->
  <xsd:simpleType name="OptionScopeType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="public"/>
      <xsd:enumeration value="private"/>
      <xsd:enumeration value="legacy"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="OptionTypesType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="enum"/>
      <xsd:enumeration value="string"/>
      <xsd:enumeration value="int"/>
      <xsd:enumeration value="real"/>
      <xsd:enumeration value="logical"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="OptionValueType">
    <xsd:annotation>
      <xsd:documentation>
      Attributes:

      vRef:             References a multiple language version of v. If multiple
                        language support is required, vRef should be used in addition to v.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="v" type="xsd:string"/>
    <xsd:attribute name="vRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="OptionType">
    <xsd:annotation>
      <xsd:documentation>
      Option. This element specifies the valid values for an Option, either as a set of
      allowed values (i.e. an enum), or as a range of values of a particular type.

      Attributes:

      scope:         Option scope.
      type:          Option type - enum, string, int, real or logical.

      Elements:

      Value:         If the Option is of type enum, it should contain a sequence of Value
                     sub-elements giving the allowed values.

      GreaterThan:        ) If the Option type is not enum, then its allowed values are                   
      GreaterThanOrEqual: ) given by a range, which is specified by a GreaterThan or 
      LessThan:           ) GreaterThanOrEqual element, followed by a LessThan or
      LessThanOrEqual:    ) LessThanOrEqual element. These are all of type 
                            OptionValueType.

      Default:       Following these elements there may be a Default element giving a
                     default value for the Option.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:choice>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element name="Value" type="plm:OptionValueType"/>
            </xsd:choice>
            <xsd:sequence>
              <xsd:choice>
                <xsd:element name="GreaterThan" type="plm:OptionValueType"/>
                <xsd:element name="GreaterThanOrEqual" type="plm:OptionValueType"/>
              </xsd:choice>
              <xsd:choice>
                <xsd:element name="LessThan" type="plm:OptionValueType"/>
                <xsd:element name="LessThanOrEqual" type="plm:OptionValueType"/>
              </xsd:choice>
            </xsd:sequence>
          </xsd:choice>
          <xsd:element name="Default" type="plm:OptionValueType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="scope" type="plm:OptionScopeType" use="optional"/>
        <xsd:attribute name="type" type="plm:OptionTypesType" default="enum"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Option" type="plm:OptionType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ********************* Operand *************************************** -->
  <!-- -->
  <xsd:complexType name="OperandBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Operand - abstract base class for Operands (arguments of operators).
      </xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  <xsd:element name="Operand" type="plm:OperandBase"/>
  <!-- -->
  <!-- ********************* Statement ************************************* -->
  <!-- -->
  <xsd:complexType name="StatementBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Statement - abstract base class for statements.
      </xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  <xsd:element name="Statement" type="plm:StatementBase"/>
  <!-- -->
  <!-- ********************* StatementListType ****************************** -->
  <!-- -->
  <xsd:complexType name="StatementListType">
    <xsd:annotation>
      <xsd:documentation>
      StatementList - a list of statements.

      Elements:

      Contains a non-empty sequence of elements derived from Statement.      
      </xsd:documentation>
    </xsd:annotation>
    <xsd:choice maxOccurs="unbounded">
      <xsd:element ref="plm:Statement"/>
    </xsd:choice>
  </xsd:complexType>
  <!-- -->
  <!-- ********************* Expression ************************************ -->
  <!-- -->
  <xsd:complexType name="ExpressionBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Expression - abstract base class for Expressions.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OperandBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Expression" type="plm:ExpressionBase" substitutionGroup="plm:Operand"/>
  <!-- -->
  <!-- ********************* LogicalExpression ****************************** -->
  <!-- -->
  <xsd:complexType name="LogicalExpressionBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      LogicalExpression - abstract base class for expressions returning a logical result.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ExpressionBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="LogicalExpression" type="plm:LogicalExpressionBase" substitutionGroup="plm:Expression"/>
  <!-- -->
  <!-- ********************* And ********************************************* -->
  <!-- -->
  <xsd:complexType name="AndType">
    <xsd:annotation>
      <xsd:documentation>
      And - a type of logical expression.

      Elements:

      At least two sub-elements, derived from LogicalExpression. The And expression
      returns true if all its sub-elements return true.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:LogicalExpressionBase">
        <xsd:choice minOccurs="2" maxOccurs="unbounded">
          <xsd:element ref="plm:LogicalExpression"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="And" type="plm:AndType" substitutionGroup="plm:LogicalExpression"/>
  <!-- -->
  <!-- ********************* Or ********************************************** -->
  <!-- -->
  <xsd:complexType name="OrType">
    <xsd:annotation>
      <xsd:documentation>
      Or - a type of logical expression.

      Elements:

      At least two sub-elements, derived from LogicalExpression. The Or expression
      returns true if any of its sub-elements return true.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:LogicalExpressionBase">
        <xsd:choice minOccurs="2" maxOccurs="unbounded">
          <xsd:element ref="plm:LogicalExpression"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Or" type="plm:OrType" substitutionGroup="plm:LogicalExpression"/>
  <!-- -->
  <!-- ********************* Not ******************************************** -->
  <!-- -->
  <xsd:complexType name="NotType">
    <xsd:annotation>
      <xsd:documentation>
      Not - a type of logical expression.

      Elements:

      One sub-element, derived from LogicalExpression. The Not expression returns 
      true if its sub-element returns false.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:LogicalExpressionBase">
        <xsd:choice>
          <xsd:element ref="plm:LogicalExpression"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Not" type="plm:NotType" substitutionGroup="plm:LogicalExpression"/>
  <!-- -->
  <!-- ********************* OptionIs **************************************** -->
  <!-- -->
  <xsd:simpleType name="LogicalOperationType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="eq"/>
      <xsd:enumeration value="ne"/>
      <xsd:enumeration value="gt"/>
      <xsd:enumeration value="ge"/>
      <xsd:enumeration value="lt"/>
      <xsd:enumeration value="le"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="OptionIsType">
    <xsd:annotation>
      <xsd:documentation>
      OptionIs - a logical expression which returns true if a given Option has a
      particular relation to a given value (default equality relation).

      Attributes:

      optionRef:        Reference to the Option.
      value:            Specified value for the Option.
      operation:        The operation. For example if operation is "gt", then
                        OptionIs returns true if the option is greater than
                        'value'.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:LogicalExpressionBase">
        <xsd:attribute name="optionRef" type="plm:anyURIType" use="required" plm:refType="plm:Option"/>
        <xsd:attribute name="value" type="xsd:string" use="required"/>
        <xsd:attribute name="operation" type="plm:LogicalOperationType" default="eq"/>
        <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="OptionIs" type="plm:OptionIsType" substitutionGroup="plm:LogicalExpression"/>
  <!-- -->
  <!-- ************************ PathIs **************************************** -->
  <!-- -->
  <!-- -->
  <xsd:complexType name="PathIsType">
    <xsd:annotation>
      <xsd:documentation>
      PathIs - a logical expression that returns true if the path matches that of the 
      'instanceRefs' attribute. The path is defined as that of the chain of Instances 
      through an Assembly that end on and include the owning Instance.
      
      Attributes:

      instanceRefs:   chain of Instances that define a path through a hierarchical
                      assembly structure.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:LogicalExpressionBase">
        <xsd:attribute name="instanceRefs" type="plm:uriReferenceListType" use="required" plm:refType="plm:Instance"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PathIs" type="plm:PathIsType" substitutionGroup="plm:LogicalExpression"/>
  <!-- ************************ Set **************************************** -->
  <!-- -->
  <xsd:complexType name="SetType">
    <xsd:annotation>
      <xsd:documentation>
      Set. A Statement which sets an Option to a particular value.

      Attributes:

      optionRef:        Reference to the Option.
      value:            Specified value for the Option.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StatementBase">
        <xsd:attribute name="optionRef" type="plm:anyURIType" use="required" plm:refType="plm:Option"/>
        <xsd:attribute name="value" type="xsd:string" use="required"/>
        <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Set" type="plm:SetType" substitutionGroup="plm:Statement"/>
  <!-- -->
  <!-- ************************ SetDefault *********************************** -->
  <!-- -->
  <xsd:complexType name="SetDefaultType">
    <xsd:annotation>
      <xsd:documentation>
      SetDefault. A Statement which sets an Option to a particular value, if it
      is unset. Unlike the Set Statement, it will not override an existing
      value.

      Attributes:

      optionRef:        Reference to the Option.
      value:            Specified value for the Option.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StatementBase">
        <xsd:attribute name="optionRef" type="plm:anyURIType" use="required" plm:refType="plm:Option"/>
        <xsd:attribute name="value" type="xsd:string" use="required"/>
        <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SetDefault" type="plm:SetDefaultType" substitutionGroup="plm:Statement"/>
  <!-- -->
  <!-- ************************ Fix ****************************************** -->
  <!-- -->
  <xsd:complexType name="FixType">
    <xsd:annotation>
      <xsd:documentation>
      Fix. A Statement which sets an Option to a particular value, and fixes it.
      Subsequent Set, SetDefault, or Fix Statements are not allowed to modify
      it.

      Attributes:

      optionRef:        Reference to the Option.
      value:            Specified value for the Option.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StatementBase">
        <xsd:attribute name="optionRef" type="plm:anyURIType" use="required" plm:refType="plm:Option"/>
        <xsd:attribute name="value" type="xsd:string" use="required"/>
        <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Fix" type="plm:FixType" substitutionGroup="plm:Statement"/>
  <!-- -->
  <!-- ************************ Derived ****************************************** -->
  <!-- -->
  <xsd:complexType name="DerivedType">
    <xsd:annotation>
      <xsd:documentation>
      Derived. A Statement which shows that the particular Option value has
      been derived from other options and given for information only.

      Attributes:

      optionRef:        Reference to the Option.
      value:            Value for the Option.
      valueRef:         References a multiple language version of value. If
                        multiple language support is required, valueRef should
                        be used in addition to value.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StatementBase">
        <xsd:attribute name="optionRef" type="plm:anyURIType" use="required" plm:refType="plm:Option"/>
        <xsd:attribute name="value" type="xsd:string" use="required"/>
        <xsd:attribute name="valueRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Derived" type="plm:DerivedType" substitutionGroup="plm:Statement"/>
  <!-- -->
  <!-- ********************* Message **************************************** -->
  <!-- -->
  <xsd:complexType name="MessageBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      Message - abstract base class for Message Statements.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StatementBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Message" type="plm:MessageBase" substitutionGroup="plm:Statement"/>
  <!-- -->
  <!-- ********************* CheckMessage ************************************* -->
  <!-- -->
  <xsd:complexType name="CheckMessageType">
    <xsd:annotation>
      <xsd:documentation>
      Check Message. This is used in VariantRuleChecks.

      Attributes:

      message:          String message to output.
      messageRef:       References a multiple language version of message. If
                        multiple language support is required, messageRef should
                        be used in addition to message.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:MessageBase">
        <xsd:attribute name="message" type="xsd:string" use="required"/>
        <xsd:attribute name="messageRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CheckMessage" type="plm:CheckMessageType" substitutionGroup="plm:Message"/>
  <!-- -->
  <!-- ********************* InformMessage **************************************** -->
  <!-- -->
  <xsd:complexType name="InformMessageType">
    <xsd:annotation>
      <xsd:documentation>
      Inform Message. Outputs an informative message.

      Attributes:

      message:     String message to output.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:MessageBase">
        <xsd:attribute name="message" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InformMessage" type="plm:InformMessageType" substitutionGroup="plm:Message"/>
  <!-- -->
  <!-- ********************* WarnMessage ******************************************* -->
  <!-- -->
  <xsd:complexType name="WarnMessageType">
    <xsd:annotation>
      <xsd:documentation>
      Warn Message. Outputs a warning message.

      Attributes:

      message:     String message to output.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:MessageBase">
        <xsd:attribute name="message" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="WarnMessage" type="plm:WarnMessageType" substitutionGroup="plm:Message"/>
  <!-- -->
  <!-- ********************* ErrorMessage ******************************************* -->
  <!-- -->
  <xsd:complexType name="ErrorMessageType">
    <xsd:annotation>
      <xsd:documentation>
      Error Message. Outputs an error message.

      Attributes:

      message:     String message to output.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:MessageBase">
        <xsd:attribute name="message" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ErrorMessage" type="plm:ErrorMessageType" substitutionGroup="plm:Message"/>
  <!-- -->
  <!-- ********************* ConditionalStatement ****************************** -->
  <!-- -->
  <xsd:complexType name="ConditionalStatementType">
    <xsd:annotation>
      <xsd:documentation>
      ConditionalStatement. This is an If ... Then ... Else ... Statement.

      Elements:

      First, an element derived from LogicalExpression.

      Then:         StatementList element, executed if the LogicalExpression returns
                    true.
      Else:         Optional StatementList element, executed if the LogicalExpression
                    returns false.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StatementBase">
        <xsd:sequence>
          <xsd:element ref="plm:LogicalExpression"/>
          <xsd:element name="Then" type="plm:StatementListType"/>
          <xsd:element name="Else" type="plm:StatementListType" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="If" type="plm:ConditionalStatementType" substitutionGroup="plm:Statement"/>
  <!-- -->
  <!-- ********************* VariantRule ****************************** -->
  <!-- -->
  <xsd:complexType name="VariantRuleType">
    <xsd:annotation>
      <xsd:documentation>
      VariantRule. This specifies a configuration by giving specified values for
      a set of Options.
      
      Attributes:
      
      configuredRef: The StructureRevision this VariantRule is associated with, if any.
      
      Elements:

      A non-empty sequence of Set, Fix and Derived Statements, which specify values for a set of
      Options.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ConfigRuleBase">
        <xsd:sequence>
          <xsd:element ref="plm:Set" maxOccurs="unbounded"/>
          <xsd:element ref="plm:Fix" maxOccurs="unbounded"/>
          <xsd:element ref="plm:Derived" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="configuredRef" type="plm:anyURIType" use="optional" plm:refType="plm:StructureRevision"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="VariantRule" type="plm:VariantRuleType" substitutionGroup="plm:ConfigRule"/>
  <!-- -->
  <!-- ********************* VariantRuleCheck ****************************** -->
  <!-- -->
  <xsd:complexType name="VariantRuleCheckType">
    <xsd:annotation>
      <xsd:documentation>
      VariantRuleCheck. This outputs a Check Message if a condition is true.
      
      Elements:

      An element derived from LogicalExpression.
      A Check element.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element ref="plm:LogicalExpression"/>
          <xsd:element ref="plm:CheckMessage"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="VariantRuleCheck" type="plm:VariantRuleCheckType"/>
  <!-- -->
  <!-- ********************* VariantDefault ****************************** -->
  <!-- -->
  <xsd:complexType name="VariantDefaultBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      VariantDefault. An abstract base class for Variant Defaults.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="VariantDefault" type="plm:VariantDefaultBase"/>
  <!-- -->
  <!-- ********************* VariantDefaultFixed ****************************** -->
  <!-- -->
  <xsd:complexType name="VariantDefaultFixedType">
    <xsd:annotation>
      <xsd:documentation>
      VariantDefaultFixed. This is a collection of 'SetDefault' Statements.

      Elements:
 
      A non-empty sequence of SetDefault Statements, which set the values of some
      Options, if they are not already set.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:VariantDefaultBase">
        <xsd:choice maxOccurs="unbounded">
          <xsd:element ref="plm:SetDefault"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="VariantDefaultFixed" type="plm:VariantDefaultFixedType" substitutionGroup="plm:VariantDefault"/>
  <!-- -->
  <!-- ********************* VariantDefaultDerived ****************************** -->
  <!-- -->
  <xsd:complexType name="VariantDefaultDerivedType">
    <xsd:annotation>
      <xsd:documentation>
      VariantDefaultDerived. A set of SetDefault Statements which depend on a 
      LogicalExpression.

      Elements:

      An element derived from LogicalExpression.
      A non-empty sequence of SetDefault Statements, which are executed if the
          expression returns true.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:VariantDefaultBase">
        <xsd:sequence>
          <xsd:element ref="plm:LogicalExpression"/>
          <xsd:element ref="plm:SetDefault" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="VariantDefaultDerived" type="plm:VariantDefaultDerivedType" substitutionGroup="plm:VariantDefault"/>
  <!-- -->
  <!-- ********************* VariantCondition ****************************** -->
  <!-- -->
  <xsd:complexType name="VariantConditionType">
    <xsd:annotation>
      <xsd:documentation>
      VariantCondition. This contains a logical expression which determines whether
      the Instance it is attached to is 'loaded', i.e. appears in the configuration.

      Elements:

      A single element derived from LogicalExpression.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element ref="plm:LogicalExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="VariantCondition" type="plm:VariantConditionType"/>
  <!-- -->
  <!-- ***************************** Unit ****************************** -->
  <!-- -->
  <xsd:simpleType name="UnitPrefixType">
    <xsd:annotation>
      <xsd:documentation>
      Enum for SI unit prefixes, ranging from yotta (10**24) to yocto (10**-24)
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="yotta"/>
      <xsd:enumeration value="zetta"/>
      <xsd:enumeration value="exa"/>
      <xsd:enumeration value="peta"/>
      <xsd:enumeration value="tera"/>
      <xsd:enumeration value="giga"/>
      <xsd:enumeration value="mega"/>
      <xsd:enumeration value="kilo"/>
      <xsd:enumeration value="hecto"/>
      <xsd:enumeration value="deka"/>
      <xsd:enumeration value="deci"/>
      <xsd:enumeration value="centi"/>
      <xsd:enumeration value="milli"/>
      <xsd:enumeration value="micro"/>
      <xsd:enumeration value="nano"/>
      <xsd:enumeration value="pico"/>
      <xsd:enumeration value="femto"/>
      <xsd:enumeration value="atto"/>
      <xsd:enumeration value="zepto"/>
      <xsd:enumeration value="yocto"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="UnitComponentType">
    <xsd:annotation>
      <xsd:documentation>
      Component of a standard SI unit of measurement

      Attributes:
      
      prefix:      multiplier prefix, e.g. "kilo", "micro"
      exponent:    power to which unit is raised, e.g. seconds**-2
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="exponent" type="xsd:double" default="1"/>
    <xsd:attribute name="prefix" type="plm:UnitPrefixType" use="optional"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="GeneralUnitComponentType">
    <xsd:annotation>
      <xsd:documentation>
      Component of a unit of measurement, other than a standard SI unit.
      The name of the unit can be any string, to allow for the numerous units
      in use. However the following strings should be used for the corresponding
      common units:
      
      SI units (other than those given explicitly in the Unit element):
      
      "gram", "hertz", "newton", "pascal", "joule", "watt", "coulomb", "volt",
      "farad", "ohm", "siemens", "weber", "tesla", "henry", "degreeCelsius",
      "lumen", "lux", "becquerel", "gray", "sievert".
      "are", "hectare", "litre" (note European spelling).

      Common non-SI units:

      "minute", "hour", "day".
      "inch", "foot", "yard", "mile", "nautical mile".
      "acre".
      "pint", "quart", "gallon", "imperial pint", "imperial quart",
      "imperial gallon".
      "ounce", "pound".

      Attributes:

      name:             name of unit, e.g. "inch"
      prefix:           multiplier prefix, e.g. "kilo", "micro"
      exponent:         power to which unit is raised, e.g. cm**-2
      nameRef:          References a multiple language version of name. If
                        multiple language support is required, nameRef should be
                        used in addition to name.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" use="required"/>
    <xsd:attribute name="exponent" type="xsd:double" default="1"/>
    <xsd:attribute name="prefix" type="plm:UnitPrefixType" use="optional"/>
    <xsd:attribute name="nameRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="UnitType">
    <xsd:annotation>
      <xsd:documentation>
      Unit - a unit of measurement, e.g. gallons, or kilogram/metre**2.

      This defines the unit as a combination of powers of other units.
      The standard SI units are represented explicitly, other units are 
      given by a named element.

      Elements:

      Metre:         a UnitComponent element giving the length exponent.
      ...etc...
      
      GeneralUnit:   powers of specified units.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="Metre" type="plm:UnitComponentType"/>
          <xsd:element name="Kilogram" type="plm:UnitComponentType"/>
          <xsd:element name="Second" type="plm:UnitComponentType"/>
          <xsd:element name="Ampere" type="plm:UnitComponentType"/>
          <xsd:element name="Mole" type="plm:UnitComponentType"/>
          <xsd:element name="Candela" type="plm:UnitComponentType"/>
          <xsd:element name="Kelvin" type="plm:UnitComponentType"/>
          <xsd:element name="GeneralUnit" type="plm:GeneralUnitComponentType"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Unit" type="plm:UnitType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- *************************** Owner ****************************** -->
  <!-- -->
  <xsd:complexType name="OwnerBase">
    <xsd:annotation>
      <xsd:documentation>
      Base class for entities which can 'own' objects (people, organisations, users, 
      sites, etc).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Owner" type="plm:OwnerBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************ Person ***************************************** -->
  <!-- -->
  <xsd:complexType name="PersonType">
    <xsd:annotation>
      <xsd:documentation>
      An individual Person.

      Attributes:

      firstName:    first name.
      middleNames:  middle names and/or initials.
      lastName:     last (family) name.
      userId:       user Id.
      addressRef:   optional reference to an Address element.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OwnerBase">
        <xsd:attribute name="firstName" type="xsd:string" use="optional"/>
        <xsd:attribute name="middleNames" type="xsd:string" use="optional"/>
        <xsd:attribute name="lastName" type="xsd:string" use="optional"/>
        <xsd:attribute name="userId" type="xsd:string" use="optional"/>
        <xsd:attribute name="addressRef" type="plm:anyURIType" use="optional" plm:refType="plm:Address"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Person" type="plm:PersonType" substitutionGroup="plm:Owner"/>
  <!-- -->
  <!-- ************************ DisciplineRelation  **************************** -->
  <!-- -->
  <xsd:complexType name="DisciplineRelationType">
    <xsd:annotation>
      <xsd:documentation>
      Enables a User to be associated with a Discipline, at a particular level

      Attributes:

      disciplineRef:    reference to a Discipline
      level:            name of the relevant Level
      levelRef:         References a multiple language version of level. If
                        multiple language support is required, levelRef should
                        be used in addition to level.

      Sub-elements:

      UserData:         Represents user-definable properties on the
                        relationship.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:UserData"/>
        </xsd:choice>
        <xsd:attribute name="disciplineRef" type="plm:anyURIType" use="optional" plm:refType="plm:Discipline"/>
        <xsd:attribute name="level" type="xsd:string" use="optional"/>
        <xsd:attribute name="levelRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DisciplineRelation" type="plm:DisciplineRelationType"/>
  <!-- -->
  <!-- ************************ User ***************************************** -->
  <!-- -->
  <xsd:complexType name="UserType">
    <xsd:annotation>
      <xsd:documentation>
      A User, i.e. a user account on a computer system.

      Attributes:

      userId:        User Id.
      personRef:     optional reference to a Person element.
      calendarRef:   A reference to the Calendar of the User.

      Elements:

      DisciplineRelation: used to associate a User with a Discipline.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OwnerBase">
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="DisciplineRelation" type="plm:DisciplineRelationType"/>
        </xsd:choice>
        <xsd:attribute name="userId" type="xsd:string" use="required"/>
        <xsd:attribute name="personRef" type="plm:anyURIType" use="optional" plm:refType="plm:Person"/>
        <xsd:attribute name="calendarRef" type="plm:anyURIType" use="optional" plm:refType="plm:Calendar"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="User" type="plm:UserType" substitutionGroup="plm:Owner"/>
  <!-- -->
  <!-- ************************ Organisation  *********************************** -->
  <!-- -->
  <xsd:complexType name="OrganisationType">
    <xsd:annotation>
      <xsd:documentation>
      An organisation, i.e. a group of people or users. Organisations are hierarchical.
      People/Users are associated with organisations by means of an OrganisationMember 
      element, which also specifies a Role.

      Attributes:

      (name:            Name, inherited from DescriptionBase)
      address:          Optional reference to Address.
      organisationRefs: Reference to sub-organisations.
      cageCode:         CAGE code (5 characters). This is a US government company code.
      disciplineRefs:   Disciplines associated with this Organisation. There is no
                        implication that Users in this Organisation belong to these
                        Disciplines.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OwnerBase">
        <xsd:attribute name="organisationRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Organisation"/>
        <xsd:attribute name="addressRef" type="plm:anyURIType" use="optional" plm:refType="plm:Person"/>
        <xsd:attribute name="cageCode" type="xsd:string" use="optional"/>
        <xsd:attribute name="disciplineRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Discipline"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Organisation" type="plm:OrganisationType" substitutionGroup="plm:Owner"/>
  <!-- -->
  <!-- ************************ Role ************************************ -->
  <!-- -->
  <xsd:complexType name="RoleType">
    <xsd:annotation>
      <xsd:documentation>
      A Role, e.g. "Designer", "Test Engineer", "Chairman", which a Person 
      plays in an organisation.

      Attributes:

      (name:         The name of the role, i.e. "Designer". Inherited from DescriptionBase)
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Role" type="plm:RoleType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************ OrganisationMember *********************** -->
  <!-- -->
  <xsd:complexType name="OrganisationMemberType">
    <xsd:annotation>
      <xsd:documentation>
      This element is used to associate a Person/User with an Organisation, and to 
      assign an optional Role to that Person/User within that Organisation. A person
      may have more than one Role in an Organisation.
      
      Attributes:

      memberRef:        Reference to a Person or User.
      organisationRef:  The Organisation.
      roleRef:          The Role.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OwnerBase">
        <xsd:attribute name="memberRef" type="plm:anyURIType" use="required" plm:refType="plm:Owner"/>
        <xsd:attribute name="organisationRef" type="plm:anyURIType" use="required" plm:refType="plm:Organisation"/>
        <xsd:attribute name="roleRef" type="plm:anyURIType" use="optional" plm:refType="plm:Role"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="OrganisationMember" type="plm:OrganisationMemberType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************ ResourcePool **************************** -->
  <!-- -->
  <xsd:complexType name="ResourcePoolType">
    <xsd:annotation>
      <xsd:documentation>
      This is a class of people/users within an organisation, e.g. all people in
      Company A with role 'programmer'. As such it references an organisation and
      a role. It can be used as a resource without specifying a particular person.

      Attributes:

      organisationRef:  The Organisation.
      roleRef:          The Role.
      allMembers:       Whether all the members of the ResourcePool are
                        applicable to the referencing element. The default value
                        is false meaning only one of the members is applicable.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="organisationRef" type="plm:anyURIType" use="optional" plm:refType="plm:Organisation"/>
        <xsd:attribute name="roleRef" type="plm:anyURIType" use="optional" plm:refType="plm:Role"/>
        <xsd:attribute name="allMembers" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ResourcePool" type="plm:ResourcePoolType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************ Address *********************** -->
  <!-- -->
  <xsd:complexType name="AddressType">
    <xsd:annotation>
      <xsd:documentation>
      An address for a Person or Organisation.

      Attributes:

      internalLocation:   Room, mailbox, etc.
      streetNumber:
      street:             Name of street, road, lane, etc.
      town:               Village, Town, City, etc.
      region:             Region, County, State, etc.
      country:            Country.
      postalCode:         PostCode, ZIP, etc.
      emailAddress:
      telephone:
      web:                Web site address.
     </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="internalLocation" type="xsd:string" use="optional"/>
        <xsd:attribute name="streetNumber" type="xsd:string" use="optional"/>
        <xsd:attribute name="street" type="xsd:string" use="optional"/>
        <xsd:attribute name="town" type="xsd:string" use="optional"/>
        <xsd:attribute name="region" type="xsd:string" use="optional"/>
        <xsd:attribute name="postalCode" type="xsd:string" use="optional"/>
        <xsd:attribute name="country" type="xsd:string" use="optional"/>
        <xsd:attribute name="emailAddress" type="xsd:string" use="optional"/>
        <xsd:attribute name="telephone" type="xsd:string" use="optional"/>
        <xsd:attribute name="web" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Address" type="plm:AddressType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************ Site  *********************************** -->
  <!-- -->
  <xsd:complexType name="SiteType">
    <xsd:annotation>
      <xsd:documentation>
      A Site in the sense of a particular software installation, database,
      or location.
      
      Attributes:
      
      (name:          Name of the Site, inherited from DescriptionBase)
      siteId:         Identifying Id of the Site
      addressRef:     Reference to Address element.
      ownerRef:       Reference to owning Organisation.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OwnerBase">
        <xsd:attribute name="siteId" type="xsd:string" use="optional"/>
        <xsd:attribute name="addressRef" type="plm:anyURIType" use="optional" plm:refType="plm:Address"/>
        <xsd:attribute name="ownerRef" type="plm:anyURIType" use="optional" plm:refType="plm:Organisation"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Site" type="plm:SiteType" substitutionGroup="plm:Owner"/>
  <!-- -->
  <!-- ************************ DisciplineLevel  ******************************* -->
  <!-- -->
  <xsd:complexType name="DisciplineLevelType">
    <xsd:annotation>
      <xsd:documentation>
      A level of expertise in a Discipline
      
      Attributes:
      
      name:             The name of the Level, e.g. "expert" 
      number:           A number associated with the Level. Higher numbers imply
                        greater expertise.
      nameRef:          References a multiple language version of name. If
                        multiple language support is required, nameRef should be
                        used in addition to name.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="number" type="xsd:double" use="optional"/>
        <xsd:attribute name="nameRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DisciplineLevel" type="plm:DisciplineLevelType"/>
  <!-- -->
  <!-- ************************ Discipline  *********************************** -->
  <!-- -->
  <xsd:complexType name="DisciplineType">
    <xsd:annotation>
      <xsd:documentation>
      A Discipline which Users may belong to.
      
      Attributes:

      rate:             The default pay rate for this Discipline. The units are
                        unspecified.
                        
      Elements:
      
      Level:            Levels of expertise of the Discipline
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="Level" type="plm:DisciplineLevelType"/>
        </xsd:choice>
        <xsd:attribute name="rate" type="xsd:double" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Discipline" type="plm:DisciplineType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- *********************** Access Control **************************** -->
  <!-- -->
  <xsd:simpleType name="AccessIntentEnum">
    <xsd:annotation>
      <xsd:documentation>
      Simple Access Control enum.

      reference:  read-only
      modifiable: read-write
      noAccess:   may not be accessed at all.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="reference"/>
      <xsd:enumeration value="modifiable"/>
      <xsd:enumeration value="noAccess"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="AccessIntentType">
    <xsd:annotation>
      <xsd:documentation>
      Simple access control element. Specifies a set of owners, and read/write access.
      
      Attributes:
 
      intent:      reference, modifiable or noAccess.
      ownerRefs    Reference to one or more owners. These should be elements 
                   derived from plm:OwnerBase, e.g. Person, Organisation, Site, etc.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AccessControlBase">
        <xsd:attribute name="ownerRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Owner"/>
        <xsd:attribute name="intent" type="plm:AccessIntentEnum" default="modifiable"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AccessIntent" type="plm:AccessIntentType" substitutionGroup="plm:AccessControl"/>
  <!-- -->
  <!-- *********************** StatusInfo ******************************** -->
  <!-- -->
  <xsd:complexType name="StatusInfoType">
    <xsd:annotation>
      <xsd:documentation>
      Simple status information.
      
      Attributes:
      
      dateCreated:       Date and time created.  
      dateModified:      Date and time last modified.
      lastModifiedBy:    Person or User who last modified this element.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StatusBase">
        <xsd:attribute name="dateCreated" type="xsd:dateTime" use="optional"/>
        <xsd:attribute name="dateModified" type="xsd:dateTime" use="optional"/>
        <xsd:attribute name="lastModifiedBy" type="plm:anyURIType" use="optional" plm:refType="plm:Owner">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="StatusInfo" type="plm:StatusInfoType" substitutionGroup="plm:Status"/>
  <!-- -->
  <!-- *********************** Checkout ******************************** -->
  <!-- -->
  <xsd:complexType name="CheckoutType">
    <xsd:annotation>
      <xsd:documentation>
      Checkout information.
      
      Attributes:
      
      by:           Person etc. holding the checkout. Derived from OwnerBase.
      date:         Date and time checked out.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:CheckoutStatusBase">
        <xsd:attribute name="date" type="xsd:dateTime" use="optional"/>
        <xsd:attribute name="by" type="plm:anyURIType" use="optional">
          <xsd:annotation>
            <xsd:appinfo source="http://www.plmxml.org/tools/CodeGenerator">validate=skipName</xsd:appinfo>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Checkout" type="plm:CheckoutType" substitutionGroup="plm:CheckoutStatus"/>
  <!-- -->
  <!-- ************************* Associated Files/Datasets ********************** -->
  <!-- -->
  <xsd:complexType name="AssociatedDataSetType">
    <xsd:annotation>
      <xsd:documentation>
      Attribute used to associate a DataSet with a PLM XML element.

      Attributes:

      dataSetRef:       uri reference to DataSet
      role:             role/purpose of DataSet. No specified values.
      roleRef:          References a multiple language version of role. If
                        multiple language support is required, roleRef should be
                        used in addition to role.

      Sub-elements:

      UserData:         Represents user-definable properties on the
                        relationship.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:UserData"/>
        </xsd:choice>
        <xsd:attribute name="dataSetRef" type="plm:anyURIType" use="required" plm:refType="plm:DataSet"/>
        <xsd:attribute name="role" type="xsd:string" use="required"/>
        <xsd:attribute name="roleRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AssociatedDataSet" type="plm:AssociatedDataSetType" substitutionGroup="plm:Attribute"/>
  <!-- -->
  <xsd:complexType name="ExternalFileType">
    <xsd:annotation>
      <xsd:documentation>
      Represents an external file.

      Attributes:
      
      locationRef: uri of the file
      format:      format of the file. This should determine which applications
                   can read the file. There is no fixed set of values for this, but
                   will often correspond to the file extension, e.g. "doc", "txt".
                   If the format is the same as a Representation format, e.g. "JT",
                   then the same format string should be used.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:attribute name="locationRef" type="plm:anyURIType" use="required"/>
        <xsd:attribute name="format" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ExternalFile" type="plm:ExternalFileType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <xsd:complexType name="DataSetType">
    <xsd:annotation>
      <xsd:documentation>
      Represents a DataSet (collection of files).

      Attributes:

      (name:            name of the DataSet; inherited from AttribOwnerBase)
      version:          version number.
      type:             type of DataSet. No specified values.
      memberRefs:       uri references to the members of the DataSet. These
                        should be plm:ExternalFile elements.
      typeRef:          References a multiple language version of type. If
                        multiple language support is required, typeRef should be
                        used in addition to type.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:attribute name="version" type="xsd:nonNegativeInteger" use="optional"/>
        <xsd:attribute name="type" type="xsd:string" use="optional"/>
        <xsd:attribute name="memberRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:ExternalFile"/>
        <xsd:attribute name="typeRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataSet" type="plm:DataSetType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ********************* ReleaseStatus ******************************* -->
  <!-- -->
  <xsd:complexType name="ReleaseStatusType">
    <xsd:annotation>
      <xsd:documentation>
      ReleaseStatus. Specifies date of release, and effectivities.

      Attributes:
      
      dateReleased:    Date and time released.
      effectivityRefs: Reference to Effectivity elements.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="dateReleased" type="xsd:dateTime" use="optional"/>
        <xsd:attribute name="effectivityRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Effectivity"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ReleaseStatus" type="plm:ReleaseStatusType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* Drawing ****************************** -->
  <!-- -->
  <xsd:complexType name="DrawingType">
    <xsd:annotation>
      <xsd:documentation>
      This is the revision-independent Drawing element. A Drawing is a 2D
      representation of one or more ProductRevisions/ProductRevisionViews.
      
      Use the 'catalogueId' attribute on the Structure class as a persistent Id
      for the Drawing.
      
      Attributes:
      
      title:            Title of the Drawing.
      titleRef:         References a multiple language version of title. If
                        multiple language support is required, titleRef should
                        be used in addition to title.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureBase">
        <xsd:attribute name="title" type="xsd:string" use="optional"/>
        <xsd:attribute name="titleRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Drawing" type="plm:DrawingType" substitutionGroup="plm:Structure"/>
  <!-- -->
  <!-- ************************* DrawingRevision *********************** -->
  <!-- -->
  <xsd:complexType name="DrawingRevisionType">
    <xsd:annotation>
      <xsd:documentation>
      This is a revision of a Drawing.
      
      Attributes:
      
      externalFileRefs:  URI references to the Drawing files. These should be
                         ExternalFile elements.
      drawnRefs:         URI references to ProductRevisions or ProductRevisionViews
                         drawn in this Drawing revision.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionBase">
        <xsd:attribute name="externalFileRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:ExternalFile"/>
        <xsd:attribute name="drawnRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Managed"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DrawingRevision" type="plm:DrawingRevisionType" substitutionGroup="plm:StructureRevision"/>
  <!-- -->
  <!-- ************************* DrawingRevisionView *********************** -->
  <!-- -->
  <xsd:complexType name="DrawingRevisionViewType">
    <xsd:annotation>
      <xsd:documentation>
      This is a View (design, manufacturing, etc) of a Revision of a Drawing.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionViewBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DrawingRevisionView" type="plm:DrawingRevisionViewType" substitutionGroup="plm:StructureRevisionView"/>
  <!-- -->
  <!-- ************************* ProductFamily ***************************** -->
  <!-- -->
  <xsd:complexType name="ProductFamilyType">
    <xsd:annotation>
      <xsd:documentation>
      This element connects a ProductRevision or ProductRevisionView to a 'template'
      ProductRevision/ProductRevisionView which represents a Product Family of which 
      it is a member. For example a template ProductRevision might represent the 'Bolt'
      family and a member ProductRevision might be a 2cm Bolt.
      
      The member may be specified by a collection of parameter values in the 'Parameters' 
      UserData sub-element. The exact way in which these parameters are interpreted will
      depend on the CAD system which defined the Template.
      
      Attributes:
      
      memberRef:         URI reference to member ProductRevision/ProductRevisionView
      templateRef:       URI reference to template ProductRevision/ProductRevisionView
      
      Elements:
      
      Parameters         UserData element containing defining parameters for the member
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element name="Parameters" type="plm:UserDataType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="memberRef" type="plm:anyURIType" use="required" plm:refType="plm:Managed"/>
        <xsd:attribute name="templateRef" type="plm:anyURIType" use="required" plm:refType="plm:Managed"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductFamily" type="plm:ProductFamilyType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ************************* ProductDependency ***************************** -->
  <!-- -->
  <xsd:complexType name="ProductDependencyType">
    <xsd:annotation>
      <xsd:documentation>
      This element represents a dependency between one ProductRevision,
      ProductRevisionView or Occurrence, and another. The slave depends in some
      way on the master.

      The nature of the dependency may be specific to the CAD system which
      defined it, and is specified by the 'type' attribute, and the 'Parameters'
      UserData sub-element.

      Attributes:

      type:             The type of dependency.
      slaveRef:         URI reference to the dependent ProductRevision,
                        ProductRevisionView or Occurrence.
      masterRef:        URI reference to the master ProductRevision,
                        ProductRevisionView or Occurrence.
      typeRef:          References a multiple language version of message. If
                        multiple language support is required, messageRef should
                        be used in addition to message.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ConnectionBase">
        <xsd:sequence>
          <xsd:element name="Parameters" type="plm:UserDataType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="type" type="xsd:string" use="optional"/>
        <xsd:attribute name="slaveRef" type="plm:anyURIType" use="required" plm:refType="plm:Managed"/>
        <xsd:attribute name="masterRef" type="plm:anyURIType" use="required" plm:refType="plm:Managed"/>
        <xsd:attribute name="typeRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductDependency" type="plm:ProductDependencyType" substitutionGroup="plm:Connection"/>
  <!-- -->
  <!-- ************************* ValueWithUnit ****************************** -->
  <!-- -->
  <xsd:complexType name="ValueWithUnitType">
    <xsd:annotation>
      <xsd:documentation>
      This represents a numerical value with a unit, e.g. "3.1 miles".
      
      Attributes:
      
      name:       (inherited from DescriptionBase) name, e.g. "mileage"
      value:      the value
      unitRef:    reference to a Unit element. If this omitted, the value is unitless.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="value" type="xsd:double" use="required"/>
        <xsd:attribute name="unitRef" type="plm:anyURIType" use="optional" plm:refType="plm:Unit"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ValueWithUnit" type="plm:ValueWithUnitType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* RangeWithUnit ****************************** -->
  <!-- -->
  <xsd:complexType name="RangeWithUnitType">
    <xsd:annotation>
      <xsd:documentation>
      This represents a numerical range with a unit, e.g. "3.1-4.2 miles", or
      "at least 100 litres". At least one of the limit attributes must be present.
      
      Attributes:
      
      name:       (inherited from DescriptionBase) name, e.g. "mileage"
      lowerLimit: the lower limit
      upperLimit: the upper limit
      unitRef:    reference to a Unit element. If this omitted, the value is unitless.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="lowerLimit" type="xsd:double" use="optional"/>
        <xsd:attribute name="upperLimit" type="xsd:double" use="optional"/>
        <xsd:attribute name="unitRef" type="plm:anyURIType" use="optional" plm:refType="plm:Unit"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="RangeWithUnit" type="plm:RangeWithUnitType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* AssociatedAttachment ************************** -->
  <!-- -->
  <xsd:complexType name="AssociatedAttachmentType">
    <xsd:annotation>
      <xsd:documentation>
      Represents a configured attachment to an Occurrence. When an unconfigured
      element (such as a ProductInstance) has an attachment, for example by
      means of a GeneralRelation, or AssociatedDataSet, then a corresponding
      configured element (such as an Occurrence) may have that attachment
      configured.

      Attributes:

      role:             the role of the attachment i.e. the relation to its owner.
      contextRef:       The corresponding configured element (e.g.
                        ProductInstance) which owns the attachment.
      attachmentRef:    reference to the attached element.
      childRefs:        sub-Attachments
      roleRef:          References a multiple language version of role. If
                        multiple language support is required, roleRef should be
                        used in addition to role.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="role" type="xsd:string"/>
        <xsd:attribute name="contextRef" type="plm:anyURIType"/>
        <xsd:attribute name="attachmentRef" type="plm:anyURIType" use="required"/>
        <xsd:attribute name="childRefs" type="plm:uriReferenceListType" plm:refType="plm:AssociatedAttachment"/>
        <xsd:attribute name="roleRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AssociatedAttachment" type="plm:AssociatedAttachmentType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* OccurrenceGroup ****************************** -->
  <!-- -->
  <xsd:complexType name="OccurrenceGroupType">
    <xsd:annotation>
      <xsd:documentation>
      This is a group of InstancePaths and other OccurrenceGroups. All the InstancePaths
      included (recursively) in an OccurrenceGroup must have the same InstancePathRoot.
    
      OccurrenceGroups can share InstancePaths or other OccurrenceGroups, but must not
      contain recursive loops.
    
      Attributes:
    
      instancePathRootRef: reference to the common InstancePathRoot.
                      
      childRefs:           reference to contained InstancePaths or OccurrenceGroups
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:attribute name="instancePathRootRef" type="plm:anyURIType" plm:refType="plm:InstancePathRoot"/>
        <xsd:attribute name="childRefs" type="plm:uriReferenceListType" plm:refType="plm:AttribOwner"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="OccurrenceGroup" type="plm:OccurrenceGroupType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ************************* InstanceThread ******************************** -->
  <!-- -->
  <xsd:complexType name="InstanceThreadType">
    <xsd:annotation>
      <xsd:documentation>
      This element collects together Instances which correspond across different
      revisions of a structure. An Instance can only be in one InstanceThread,
      which it references by its instanceThreadRef attribute.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InstanceThread" type="plm:InstanceThreadType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* InstancePathRoot ******************************** -->
  <!-- -->
  <xsd:complexType name="InstancePathRootType">
    <xsd:annotation>
      <xsd:documentation>
      This element represents the root of a tree of InstancePaths.
    
      Attributes:
      
      structureViewRef: This is the StructureView at the top of the InstancePaths in the
                        tree.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="structureViewRef" type="plm:anyURIType" use="optional" plm:refType="plm:StructureView"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InstancePathRoot" type="plm:InstancePathRootType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* InstancePath ******************************** -->
  <!-- -->
  <xsd:complexType name="InstancePathType">
    <xsd:annotation>
      <xsd:documentation>
      This element represents an unconfigured path of InstanceThreads, top to bottom.
    
      The path must be sequential in that the 'instanced' Structure of each InstanceThread
      must be the same as the 'parent' Structure of the next InstanceThread in the path.
      It is possible (although unusual) for an InstancePath to 'change views' as you go
      down the path.
    
      Attributes:
      
      instancePathRootRef: The InstancePathRoot which represents the top of the tree
                           this InstancePath is in.

      instanceThreadRef:   This is the last (bottom) InstanceThread in the instance path.
                           (Unlike the Occurrence element, which has an "instanceRefs" 
                           attribute to specify the full path, this element only
                           specifies the last InstanceThread, and relies on its
                           'ancestor' elements to define the path).
      
      childRefs:           the 'children' of the InstancePath. This is a selection of
                           other InstancePaths, each of which must have a path which is 
                           formed by adding one more InstanceThread on the end of the
                           path. There must be no duplicates paths.                        

      absoluteOccurrenceRef: This is a back-pointer to a referencing AbsoluteOccurrence 
                           (There can be at most one AbsoluteOccurrence referencing a
                           given InstancePath)
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:attribute name="instancePathRootRef" type="plm:anyURIType" use="optional" plm:refType="plm:InstancePathRoot"/>
        <xsd:attribute name="instanceThreadRef" type="plm:anyURIType" use="optional" plm:refType="plm:InstanceThread"/>
        <xsd:attribute name="childRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:InstancePath"/>
        <xsd:attribute name="absoluteOccurrenceRef" type="plm:anyURIType" plm:refType="plm:AbsoluteOccurrence"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InstancePath" type="plm:InstancePathType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* AbsoluteOccurrence *************************** -->
  <!-- -->
  <xsd:complexType name="AbsoluteOccurrenceType">
    <xsd:annotation>
      <xsd:documentation>
      An AbsoluteOccurrence provides a mechanism for collecting together a number of
      InstancePaths, which in some sense 'correspond' (for example the front left wheels
      in two different cars). There are no actual requirements on what these
      InstancePaths are.
     
      Attributes:
    
      occurrenceId:         an id for the Occurrence
      instancePathRefs:     the InstancePaths in the AbsoluteOccurrence
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="occurrenceId" type="xsd:string" use="optional"/>
        <xsd:attribute name="instancePathRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:InstancePath"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AbsoluteOccurrence" type="plm:AbsoluteOccurrenceType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* StructureView ***************************** -->
  <!-- -->
  <xsd:complexType name="StructureViewType">
    <xsd:annotation>
      <xsd:documentation>
      This abstract element represents a View (e.g. 'design') of a Structure. 
      It simply references the associated Structure and View elements.
    
      Attributes:
    
      masterRef:      reference to the Structure
      viewRef:        reference to the View
      propertyRefs:   reference to Properties
      
      Elements:
      
      PropertyGroup
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:sequence>
          <xsd:element ref="plm:PropertyGroup" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="masterRef" type="plm:anyURIType" use="optional" plm:refType="plm:Structure"/>
        <xsd:attribute name="viewRef" type="plm:anyURIType" use="optional" plm:refType="plm:View"/>
        <xsd:attribute name="propertyRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Property"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="StructureView" type="plm:StructureViewType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ************************* ProductStructureView ****************************** -->
  <!-- -->
  <xsd:complexType name="ProductStructureViewType">
    <xsd:annotation>
      <xsd:documentation>
      This element represents a View of a Product, e.g. 'design' View.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureViewType"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductStructureView" type="plm:ProductStructureViewType" substitutionGroup="plm:StructureView"/>
  <!-- -->
  <!-- ************************* GeneralRelation ****************************** -->
  <!-- -->
  <xsd:complexType name="GeneralRelationType">
    <xsd:annotation>
      <xsd:documentation>
      This is general relation between a number of elements. The type of relation
      is given by the 'subType' attribute inherited from ManagedBase.
      
      There are no specified values of 'subType'. Therefore the semantics of the
      relation are not defined here.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ManagedBase">
        <xsd:attribute name="relatedRefs" type="plm:uriReferenceListType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GeneralRelation" type="plm:GeneralRelationType" substitutionGroup="plm:Managed"/>
  <!-- -->
  <!-- ************************* Property ****************************** -->
  <!-- -->
  <xsd:complexType name="PropertyBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      This is an abstract base class for Properties. A Property will override a similar
      Property if it attached to an earlier element in the following list:
      Occurrence, Instance, StructureRevisionView, StructureRevision, Structure. So, for
      example, a Property on an Instance will override a similar Property on the 
      corresponding StructureRevision.
      
      Attributes:
      
      ownerRef:        The owner of the property. Necessary when the owner is an object
                       in a Representation file, e.g. an XT Face.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="ownerRef" type="plm:anyURIType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Property" type="plm:PropertyBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* PropertyGroup ****************************** -->
  <!-- -->
  <xsd:complexType name="PropertyGroupType">
    <xsd:annotation>
      <xsd:documentation>
      This is a group of Properties.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element ref="plm:Property" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PropertyGroup" type="plm:PropertyGroupType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* LengthProperty ****************************** -->
  <!-- -->
  <xsd:complexType name="LengthPropertyType">
    <xsd:annotation>
      <xsd:documentation>
      This Property represents the length of an object (such as a pipe or wire).

      Attributes:

      type:             A string specifying the type of value, e.g. whether
                        computed or measured.
      typeRef:          References a multiple language version of type. If
                        multiple language support is required, typeRef should be
                        used in addition to type.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
        <xsd:attribute name="type" type="xsd:string" use="optional"/>
        <xsd:attribute name="typeRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="LengthProperty" type="plm:LengthPropertyType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* MassProperty ****************************** -->
  <!-- -->
  <xsd:complexType name="MassPropertyType">
    <xsd:annotation>
      <xsd:documentation>
      This Property represents the Mass of an object.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="MassProperty" type="plm:MassPropertyType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* Density ****************************** -->
  <!-- -->
  <xsd:complexType name="DensityType">
    <xsd:annotation>
      <xsd:documentation>
      This Property represents the Density of an object.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Density" type="plm:DensityType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ****************************** Colour ***************************** -->
  <!-- -->
  <xsd:complexType name="ColourType">
    <xsd:annotation>
      <xsd:documentation>
      This Property represents the colour of an object.

      Attributes:

      ambient:          ambient colour
      diffuse:          diffuse colour
      specular:         specular colour
      emissive:         emissive colour
      shininess:        shininess coefficient (0-255)
      alpha:            alpha coefficient (0-1)
      colourId:         string id of the colour
      type:             a string indicating the use of the colour in the owning
                        element.
      typeRef:          References a multiple language version of type. If
                        multiple language support is required, typeRef should be
                        used in addition to type.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="ambient" type="plm:RGBType" use="optional"/>
        <xsd:attribute name="diffuse" type="plm:RGBType" use="optional"/>
        <xsd:attribute name="specular" type="plm:RGBType" default="0.0 0.0 0.0"/>
        <xsd:attribute name="emissive" type="plm:RGBType" default="0.0 0.0 0.0"/>
        <xsd:attribute name="shininess" type="plm:ShininessType" default="0.0"/>
        <xsd:attribute name="alpha" type="plm:AlphaType" default="1.0"/>
        <xsd:attribute name="colourId" type="xsd:string" use="optional"/>
        <xsd:attribute name="type" type="xsd:string" use="optional"/>
        <xsd:attribute name="typeRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Colour" type="plm:ColourType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* ThermalExpansionCoefficient ********************** -->
  <!-- -->
  <xsd:complexType name="ThermalExpansionCoefficientType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the (volume) Thermal Expansion Coefficient of an object.
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Property.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ThermalExpansionCoefficient" type="plm:ThermalExpansionCoefficientType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* ThermalConductivity ********************** -->
  <!-- -->
  <xsd:complexType name="ThermalConductivityType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Thermal Conductivity of an object.
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Property.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ThermalConductivity" type="plm:ThermalConductivityType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ****************************** SpecificHeatCapacity **************************** -->
  <!-- -->
  <xsd:simpleType name="SpecificHeatCapacityEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="constantPressure"/>
      <xsd:enumeration value="constantVolume"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="SpecificHeatCapacityType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Specific Heat Capacity of an object.
      
      Attributes:
      
      type:          constantPressure (default) or constantVolume
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Rated Voltage.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
        <xsd:attribute name="type" type="plm:SpecificHeatCapacityEnum" default="constantPressure"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SpecificHeatCapacity" type="plm:SpecificHeatCapacityType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* ModulusOfElasticity ********************** -->
  <!-- -->
  <xsd:complexType name="ModulusOfElasticityType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Modulus of Elasticity of an object (also known 
      as Young's Modulus).
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Property.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ModulusOfElasticity" type="plm:ModulusOfElasticityType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* PoissonsRatio *************************** -->
  <!-- -->
  <xsd:complexType name="PoissonsRatioType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Poisson's Ratio of an object.
      
      Attributes:
      
      value:         value of Poissons' Ratio
      lowerLimit:    lower limit
      upperLimit:    upper limit
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="value" type="xsd:double" use="optional"/>
        <xsd:attribute name="lowerLimit" type="xsd:double" use="optional"/>
        <xsd:attribute name="upperLimit" type="xsd:double" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PoissonsRatio" type="plm:PoissonsRatioType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* YieldStress ********************************** -->
  <!-- -->
  <xsd:complexType name="YieldStressType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Yield Stress of an object (the tensile stress a
      material can support without permanent deformation).
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Property.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="YieldStress" type="plm:YieldStressType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* UltimateStress ********************************** -->
  <!-- -->
  <xsd:complexType name="UltimateStressType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Ultimate Stress of an object (the tensile stress a
      material can support without breaking).
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Property.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="UltimateStress" type="plm:UltimateStressType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* UltimateElongation *************************** -->
  <!-- -->
  <xsd:complexType name="UltimateElongationType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Ultimate Elongation of an object, that is, the 
      strain an object can support under tensile stress, before breaking. Note
      this is a ratio, not a percentage.
      
      Attributes:
      
      value:         value of Ultimate Elongation.
      lowerLimit:    lower limit
      upperLimit:    upper limit
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="value" type="xsd:double" use="optional"/>
        <xsd:attribute name="lowerLimit" type="xsd:double" use="optional"/>
        <xsd:attribute name="upperLimit" type="xsd:double" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="UltimateElongation" type="plm:UltimateElongationType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* SurfaceArea ********************************** -->
  <!-- -->
  <xsd:complexType name="SurfaceAreaType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Surface Area of an object.
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Property.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SurfaceArea" type="plm:SurfaceAreaType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* Volume ********************************** -->
  <!-- -->
  <xsd:complexType name="VolumeType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Volume of an object.
      
      Elements:
      
      ValueWithUnit
      RangeWithUnit  one of these sub-elements should be used to indicate the value
                     or range of the Property.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:choice>
          <xsd:element ref="plm:ValueWithUnit"/>
          <xsd:element ref="plm:RangeWithUnit"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Volume" type="plm:VolumeType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* CentreOfMass ********************************** -->
  <!-- -->
  <xsd:complexType name="CentreOfMassType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Centre of Mass of an object.
      
      Attributes:
      
      value:         The vector position of the Centre Of Mass (in metres).
      
      Elements:
      
      Bound:         The Bound sub-element, if present, gives an error bound
                     on the centre of mass.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:sequence>
          <xsd:element ref="plm:Bound" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="value" type="plm:VectorType"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CentreOfMass" type="plm:CentreOfMassType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* Inertia ********************************** -->
  <!-- -->
  <xsd:complexType name="InertiaType">
    <xsd:annotation>
      <xsd:documentation>
      This Property gives the Inertia Tensor of an object, at its Centre of
      Mass.
      
      Attributes:
      
      value:        The value of the Inertia matrix. Only 6 values are given,
                    in the order Ixx, Ixy, Ixz, Iyy, Iyz, Izz, as the matrix
                    is symmetric.
      error:        If present, this gives the error bound for the Inertia, as
                    12 doubles, in the order Ixx-min, Ixx-max, Ixy-min, Ixy-max,
                    etc.
      unitRef:      Reference to a Unit element. If absent, S.I. units are
                    assumed.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:sequence/>
        <xsd:attribute name="value" type="plm:DoubleListType" use="required"/>
        <xsd:attribute name="error" type="plm:DoubleListType" use="optional"/>
        <xsd:attribute name="unitRef" type="plm:anyURIType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Inertia" type="plm:InertiaType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- **************************** SetFilter ************************************ -->
  <!-- -->
  <xsd:simpleType name="SetFilterOperationEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="unite"/>
      <xsd:enumeration value="intersect"/>
      <xsd:enumeration value="exclude"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="SetFilterType">
    <xsd:annotation>
      <xsd:documentation>
      A type of Filter which is defined in terms of set operations on other
      Filters.
      
      Attributes:
      
      operation:         unite, intersect, or complement
      
      Elements:
      
      OccurrenceFilter:  Filters to be combined. If operation="complement", the Filters
                         are implicitly united before the Complement is performed.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OccurrenceFilterBase">
        <xsd:sequence>
          <xsd:element ref="plm:OccurrenceFilter" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="operation" type="plm:SetFilterOperationEnum" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SetFilter" type="plm:SetFilterType" substitutionGroup="plm:OccurrenceFilter"/>
  <!-- -->
  <!-- ******************************** GroupFilter *************************** -->
  <!-- -->
  <xsd:complexType name="GroupFilterType">
    <xsd:annotation>
      <xsd:documentation>
      A type of Filter which specifies an explicit collection of Occurrences. The filter 
      specifies two lists of Occurrences. Those in the first list are simply added to the 
      output of the Filter, without child Occurrences being included. Those in the second
      list result in the output of the Filter also containing their (recursive) child 
      Occurrences.     
      
      Attributes:
      
      targetRefs:            Occurrences, not including their child Occurrences
      targetRecursiveRefs    Occurrences, recursively including their child Occurrences      
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OccurrenceFilterBase">
        <xsd:attribute name="targetRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="targetRecursiveRefs" type="plm:uriReferenceListType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GroupFilter" type="plm:GroupFilterType" substitutionGroup="plm:OccurrenceFilter"/>
  <!-- -->
  <!-- ************************ PropertyFilter **************************** -->
  <!-- -->
  <xsd:simpleType name="PropertyFilterOperationEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="regularExpression"/>
      <xsd:enumeration value="equal"/>
      <xsd:enumeration value="notEqual"/>
      <xsd:enumeration value="lessThan"/>
      <xsd:enumeration value="lessThanOrEqual"/>
      <xsd:enumeration value="greaterThan"/>
      <xsd:enumeration value="greaterThanOrEqual"/>
      <xsd:enumeration value="begins"/>
      <xsd:enumeration value="contains"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="PropertyFilterType">
    <xsd:annotation>
      <xsd:documentation>
      A type of Filter based on querying properties of the objects filtered. If
      the operation specified returns true, the relevant Occurrence is included.
      
      If 'operation' and 'value' are both omitted, then the PropertyFilter selects
      those Occurrences for which the indicated property has a value.
    
      Attributes:    
      
      property:           The name of the property on which the filter is based
      operation:          The operation performed on the property value
      value:              The other operand
      type:               The type of 'value'
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OccurrenceFilterBase">
        <xsd:attribute name="property" type="xsd:string" use="required"/>
        <xsd:attribute name="operation" type="plm:PropertyFilterOperationEnum" use="optional"/>
        <xsd:attribute name="value" type="xsd:string" use="optional"/>
        <xsd:attribute name="type" type="plm:UserValueDataType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PropertyFilter" type="plm:PropertyFilterType" substitutionGroup="plm:OccurrenceFilter"/>
  <!-- -->
  <xsd:complexType name="ProximityZoneType">
    <xsd:annotation>
      <xsd:documentation>
      This is a Zone defined by a distance from a bounding shape, defined by a collection
      of objects.

      Attributes:
      
      entityRefs:           Reference to objects which defines the Zone. The objects are
                            implicitly united.
      distance:             Proximity distance in metres.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:ZoneBase">
        <xsd:attribute name="entityRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="distance" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProximityZone" type="plm:ProximityZoneType" substitutionGroup="plm:Zone"/>
  <!-- -->
  <!-- *************************************** ZoneFilter ****************************** -->
  <!-- -->
  <xsd:complexType name="ZoneFilterType">
    <xsd:annotation>
      <xsd:documentation>
      A type of Occurrence Filter based on a geometric zone.
            
      Attributes:      
        
      includeIn:          If true, then include occurrences that are inside the zone. 
      includeOut:         If true, then include occurrences that are outside the zone. 
      includeOn:          If true, then include occurrences that intersect the zone. 
      zoneRef:            Reference to Zone element.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:OccurrenceFilterBase">
        <xsd:attribute name="includeIn" type="xsd:boolean" default="true"/>
        <xsd:attribute name="includeOut" type="xsd:boolean" default="false"/>
        <xsd:attribute name="includeOn" type="xsd:boolean" default="true"/>
        <xsd:attribute name="zoneRef" type="plm:anyURIType" use="optional" plm:refType="plm:Zone"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ZoneFilter" type="plm:ZoneFilterType" substitutionGroup="plm:OccurrenceFilter"/>
  <!-- -->
  <!-- ************************* DisplayPreferences ****************************** -->
  <!-- -->
  <xsd:complexType name="DisplayPreferencesType">
    <xsd:annotation>
      <xsd:documentation>
      This Property represents the display preferences for an element such as a
      ProductRevisionView.

      Attributes:
      
      unitRef:         a Unit element giving the preferred display units.
      displayAnnotations Indicates that elements derived from Annotation3D
                       should be displayed in the target visualisation application.
      displayGeometry  Indicates that elements derived from Geometry or geometry
                       referenced via Reference elements should be displayed
                       in the target visualisation application.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="unitRef" type="plm:anyURIType" use="optional" plm:refType="plm:Unit"/>
        <xsd:attribute name="displayAnnotations" type="xsd:boolean" default="true"/>
        <xsd:attribute name="displayGeometry" type="xsd:boolean" default="true"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DisplayPreferences" type="plm:DisplayPreferencesType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* RepresentationEntity *************************** -->
  <!-- -->
  <xsd:complexType name="RepresentationEntityType">
    <xsd:annotation>
      <xsd:documentation>
      A 'logical entity' which corresponds to objects in a number of
      equivalent Representations.
      
      Attributes:
      
      entityRefs:      reference to EntityRef elements in Representations
                       or CompoundReps.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="entityRefs" type="plm:uriReferenceListType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="RepresentationEntity" type="plm:RepresentationEntityType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* EntityPropertyGroup ****************************** -->
  <!-- -->
  <xsd:complexType name="EntityPropertyGroupType">
    <xsd:annotation>
      <xsd:documentation>
      This is a group of Properties which apply to a specified set of 
      RepresentationEntities.
      
      Attributes:
      
      entityRefs:      reference to RepresentationEntity elements
      
      Elements:
      
      Property         Properties of the referenced entities.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element ref="plm:Property" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="entityRefs" type="plm:uriReferenceListType"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EntityPropertyGroup" type="plm:EntityPropertyGroupType" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ************************* Visibility ****************************** -->
  <!-- -->
  <xsd:complexType name="VisibilityType">
    <xsd:annotation>
      <xsd:documentation>
      This Property specifies whether an object is visible or not - also
      referred to as unblanked/blanked.

      Attributes:
      
      value:           logical: true is visible, false is invisible
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="value" type="xsd:boolean" use="optional" default="true"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Visibility" type="plm:VisibilityType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* CoordinateSystemDisplay ****************** -->
  <!-- -->
  <xsd:simpleType name="CoordinateSystemStyleEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="cartesian"/>
      <xsd:enumeration value="spherical"/>
      <xsd:enumeration value="cylindrical"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="CoordinateSystemDisplayType">
    <xsd:annotation>
      <xsd:documentation>
      This Property controls the display of a Coordinate System.

      Attributes:
      
      style:           an enumeration defining the display.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="style" type="plm:CoordinateSystemStyleEnum" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="CoordinateSystemDisplay" type="plm:CoordinateSystemDisplayType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* PointDisplay ******************************** -->
  <!-- -->
  <xsd:simpleType name="PointStyleEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="point" plm:deprecated="true"/>
      <xsd:enumeration value="plus"/>
      <xsd:enumeration value="asterisk"/>
      <xsd:enumeration value="circle"/>
      <xsd:enumeration value="cross"/>
      <xsd:enumeration value="triangle"/>
      <xsd:enumeration value="invertedTriangle"/>
      <xsd:enumeration value="square"/>
      <xsd:enumeration value="diamond"/>
      <xsd:enumeration value="dot"/>
      <xsd:enumeration value="hash"/>
      <xsd:enumeration value="gridPoint"/>
      <xsd:enumeration value="centreLine"/>
      <xsd:enumeration value="anchor"/>
      <xsd:enumeration value="filledCircle"/>
      <xsd:enumeration value="filledSquare"/>
      <xsd:enumeration value="largeFilledSquare"/>
      <xsd:enumeration value="circleInCircle"/>
      <xsd:enumeration value="circleInSquare"/>
      <xsd:enumeration value="squareInSquare"/>
      <xsd:enumeration value="filledLeftTriangle"/>
      <xsd:enumeration value="filledRightTriangle"/>
      <xsd:enumeration value="filledUpTriangle"/>
      <xsd:enumeration value="filledDownTriangle"/>
      <xsd:enumeration value="filledLeftTriangleInCircle"/>
      <xsd:enumeration value="filledRightTriangleInCircle"/>
      <xsd:enumeration value="filledUpTriangleInCircle"/>
      <xsd:enumeration value="filledDownTriangleInCircle"/>
      <xsd:enumeration value="filledLeftTriangleInSquare"/>
      <xsd:enumeration value="filledRightTriangleInSquare"/>
      <xsd:enumeration value="filledUpTriangleInSquare"/>
      <xsd:enumeration value="filledDownTriangleInSquare"/>
      <xsd:enumeration value="roundedCross"/>
      <xsd:enumeration value="filledDiamond"/>
      <xsd:enumeration value="upDownTriangles"/>
      <xsd:enumeration value="leftRightTriangles"/>
      <xsd:enumeration value="smallWheel"/>
      <xsd:enumeration value="largeWheel"/>
      <xsd:enumeration value="hollowCircle"/>
      <xsd:enumeration value="arcEndPoint"/>
      <xsd:enumeration value="bigAsterisk"/>
      <xsd:enumeration value="lineInCircle"/>
      <xsd:enumeration value="plusInCircle"/>
      <xsd:enumeration value="centreOfRotation"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="PointDisplayType">
    <xsd:annotation>
      <xsd:documentation>
      This Property controls the display of a Point.

      Attributes:
      
      style:           an enumeration defining the display.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="style" type="plm:PointStyleEnum" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PointDisplay" type="plm:PointDisplayType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* LineDisplay ******************************** -->
  <!-- -->
  <xsd:simpleType name="LineStyleEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="solid"/>
      <xsd:enumeration value="dashed"/>
      <xsd:enumeration value="longDashed"/>
      <xsd:enumeration value="dotDash"/>
      <xsd:enumeration value="dotted"/>
      <xsd:enumeration value="phantom"/>
      <xsd:enumeration value="centreline"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="LineThicknessEnum">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="thin"/>
      <xsd:enumeration value="normal"/>
      <xsd:enumeration value="thick"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="LineDisplayType">
    <xsd:annotation>
      <xsd:documentation>
      This Property controls the display of a line.

      Attributes:
      
      style:           an enumeration defining the display.
      thickness:       an enumeration defining the thickness of the line.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="style" type="plm:LineStyleEnum" use="optional"/>
        <xsd:attribute name="thickness" type="plm:LineThicknessEnum" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="LineDisplay" type="plm:LineDisplayType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* Translucency ******************************** -->
  <!-- -->
  <xsd:complexType name="TranslucencyType">
    <xsd:annotation>
      <xsd:documentation>
      This Property specifies the Translucency of an object.

      Attributes:
      
      value:           the Translucency. 0.0 is opaque; 1.0 is fully Translucent (invisible).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="value" type="xsd:double" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Translucency" type="plm:TranslucencyType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* OccurrenceControl ****************************** -->
  <!-- -->
  <xsd:complexType name="OccurrenceControlType">
    <xsd:annotation>
      <xsd:documentation>
      This is the revision-independent element which represents control over Occurrence(s) 
      and their AbsoluteOccurrence data in a set context
       
      Attributes:
      
      controlledOccurrenceRef: the AbsoluteOccurrence controlled by this OccurrenceControl
      contextRef:            the context of the OccurrenceControl

      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureBase">
        <xsd:attribute name="controlledOccurrenceRef" type="plm:anyURIType" use="required" plm:refType="plm:AbsoluteOccurrence"/>
        <xsd:attribute name="contextRef" type="plm:anyURIType" use="required" plm:refType="plm:StructureView plm:StructureRevisionView"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="OccurrenceControl" type="plm:OccurrenceControlType" substitutionGroup="plm:Structure"/>
  <!-- -->
  <!-- ************************* OccurrenceControlRevision *********************** -->
  <!-- -->
  <xsd:complexType name="OccurrenceControlRevisionType">
    <xsd:annotation>
      <xsd:documentation>
      This is a revision of an OccurrenceControl
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="OccurrenceControlRevision" type="plm:OccurrenceControlRevisionType" substitutionGroup="plm:StructureRevision"/>
  <!-- -->
  <!-- ************************* SymbolicOccurrence ******************************** -->
  <!-- -->
  <xsd:complexType name="SymbolicOccurrenceType">
    <xsd:annotation>
      <xsd:documentation>
      This element is used to "re-organise" an Occurrence under a new parent
      Occurrence. It references the "source" Occurrence which is being reorganised, and 
      specifies the new parent.
     
      Attributes:
    
      contextRef:            Occurrence defining the context in which the reorganisation
                             was defined
      sourceRef:             the source Occurrence or Instance being reorganised
      parentRef:             the new parent Occurrence, SymbolicOccurrence, Instance or 
                             StructureRevisionView
      showSource:            true if the source Occurrence or Instance should be displayed, 
                             as well as the reorganised one
      symbolicRefs:          the child SymbolicOccurrences
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DescriptionBase">
        <xsd:attribute name="contextRef" type="plm:anyURIType" use="optional" plm:refType="plm:Occurrence"/>
        <xsd:attribute name="sourceRef" type="plm:anyURIType" use="required" plm:refType="plm:Occurrence plm:Instance"/>
        <xsd:attribute name="parentRef" type="plm:anyURIType" use="optional" plm:refType="plm:Occurrence plm:SymbolicOccurrence plm:Instance plm:StructureRevisionView"/>
        <xsd:attribute name="showSource" type="xsd:boolean" default="false"/>
        <xsd:attribute name="symbolicRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:SymbolicOccurrence"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SymbolicOccurrence" type="plm:SymbolicOccurrenceType"/>
  <!-- -->
  <!-- ************************* Suppression ******************************** -->
  <!-- -->
  <xsd:complexType name="SuppressionType">
    <xsd:annotation>
      <xsd:documentation>
      This Property specifies the Suppression state of an object. Suppressing 
      an Occurrence effectively removes it from the Product Structure; so it 
      is not rendered, does not take part in mass property calculations, and 
      does not appear in the Bill of Materials.

      Attributes:
      
      value:           true if the object is Suppressed.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="value" type="xsd:boolean" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Suppression" type="plm:SuppressionType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************* Layer ******************************** -->
  <!-- -->
  <xsd:complexType name="LayerType">
    <xsd:annotation>
      <xsd:documentation>
      This Property specifies the Layer number of an element, for display purposes.

      Attributes:
      
      value:           the number of the Layer the object is on.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase">
        <xsd:attribute name="value" type="xsd:integer" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Layer" type="plm:LayerType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ********************* TraceabilityRelation ****************************** -->
  <!-- -->
  <xsd:complexType name="TraceabilityRelationType">
    <xsd:annotation>
      <xsd:documentation>
      This relation relates a "defining" element to a "complying" element.
      
      For example, the "defining" element might be a Requirements Document,
      and the "complying" element a Part.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GeneralRelationType"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="TraceabilityRelation" type="plm:TraceabilityRelationType" substitutionGroup="plm:GeneralRelation"/>
  <!-- -->
  <!-- ********************* Design ****************************** -->
  <!-- -->
  <xsd:complexType name="DesignType">
    <xsd:annotation>
      <xsd:documentation>
      This represents the geometric definition of a Product.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Design" type="plm:DesignType" substitutionGroup="plm:Structure"/>
  <!-- -->
  <!-- ************************* DesignRevision *********************** -->
  <!-- -->
  <xsd:complexType name="DesignRevisionType">
    <xsd:annotation>
      <xsd:documentation>
      This is a revision of a Design.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DesignRevision" type="plm:DesignRevisionType" substitutionGroup="plm:StructureRevision"/>
  <!-- -->
  <!-- ************************* DesignRevisionView ******************************** -->
  <!-- -->
  <xsd:complexType name="DesignRevisionViewType">
    <xsd:annotation>
      <xsd:documentation>
      This is a 'view' of a revision of a Design.
      
      Attributes:
      
      representationRefs: Representations of the DesignRevisionView.
      geometryRefs:       geometry elements referenced by the DesignRevisionView.
     
      Elements:

      Representation:     see representationRefs.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionViewBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:Representation"/>
        </xsd:choice>
        <xsd:attribute name="representationRefs" type="xsd:IDREFS" use="optional" plm:refType="plm:Representation"/>
        <xsd:attribute name="geometryRefs" type="plm:uriReferenceListType" use="optional" plm:refType="plm:Entity"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DesignRevisionView" type="plm:DesignRevisionViewType" substitutionGroup="plm:StructureRevisionView"/>
  <!-- -->
  <!-- ********************* RepresentedByRelation ****************************** -->
  <!-- -->
  <xsd:complexType name="RepresentedByRelationType">
    <xsd:annotation>
      <xsd:documentation>
      This relation relates a ProductRevision to a corresponding DesignRevision.
      
      Attributes:
      
      primaryDesign: Whether the referenced DesignRevision is the primary.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GeneralRelationType">
        <xsd:attribute name="primaryDesign" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="RepresentedByRelation" type="plm:RepresentedByRelationType" substitutionGroup="plm:GeneralRelation"/>
  <!-- -->
  <!-- ********************* DefinitionRelation **************************** -->
  <!-- -->
  <xsd:complexType name="DefinitionRelationType">
    <xsd:annotation>
      <xsd:documentation>
      This relation relates an Occurrence of a ProductRevisionView to a
      corresponding Occurrence of a DesignRevisionView. The inherited
      relatedRefs references must be in that order.
      
      Attributes:
      
      transform: Whether transform information in the Product Structure comes
                 from the Design Structure.
      geometry:  Whether geometry information in the Product Structure comes
                 from the Design Structure.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:GeneralRelationType">
        <xsd:attribute name="transform" type="xsd:boolean" default="false"/>
        <xsd:attribute name="geometry" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DefinitionRelation" type="plm:DefinitionRelationType" substitutionGroup="plm:GeneralRelation"/>
  <!-- -->
  <!-- ********************* Requirement ****************************** -->
  <!-- -->
  <xsd:complexType name="RequirementType">
    <xsd:annotation>
      <xsd:documentation>
      This represents a Requirement, i.e. a single Requirement for a 
      Product (not a Requirements Document).
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Requirement" type="plm:RequirementType" substitutionGroup="plm:Structure"/>
  <!-- -->
  <!-- ************************* RequirementRevision *********************** -->
  <!-- -->
  <xsd:complexType name="RequirementRevisionType">
    <xsd:annotation>
      <xsd:documentation>
      This is a revision of a Requirement.

      Attributes:

      plainRef:         References a multiple language version of PlainText. If
                        multiple language support is required, plainRef should
                        be used in addition to PlainText.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:StructureRevisionBase">
        <xsd:sequence>
          <xsd:element name="PlainText" type="xsd:string"/>
        </xsd:sequence>
        <xsd:attribute name="plainRef" type="plm:anyURIType" use="optional" plm:refType="plm:Text"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="RequirementRevision" type="plm:RequirementRevisionType" substitutionGroup="plm:StructureRevision"/>
  <!-- -->
  <!-- ************************ TriStateBooleanEnum ************************ -->
  <!-- -->
  <xsd:simpleType name="TriStateBooleanEnum">
    <xsd:annotation>
      <xsd:documentation>
      Tri-state boolean.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="true"/>
      <xsd:enumeration value="false"/>
      <xsd:enumeration value="unknown"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <!-- ************************ GeometrySet ******************************** -->
  <!-- -->
  <xsd:complexType name="GeometrySetType">
    <xsd:annotation>
      <xsd:documentation>
      Specifies the Geometry Set of an element for display purposes.

      Attributes:

      name:             Inherited from PropertyBase. This is the name of the
                        Geometry Set. When it is referenced by the propertyRefs
                        attribute of shareable elements, such as the
                        Representations, CompoundReps, construction geometry
                        elements or Ann3DInstances of a ProductRevisionView, it
                        indicates that the elements are members of the
                        GeometrySet. When it is referenced from a
                        ProductInstance or an Occurrence of a
                        ProductRevisionView, it indicates that the element is
                        selecting the GeometrySet for display purposes.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertyBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GeometrySet" type="plm:GeometrySetType" substitutionGroup="plm:Property"/>
  <!-- -->
  <!-- ************************ Item *************************************** -->
  <!-- -->
  <xsd:complexType name="MultipleLanguageItemType">
    <xsd:annotation>
      <xsd:documentation>
      Text in a particular language.

      Attributes:
      
      language:         The language of the text.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="language" type="xsd:language" default="en"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <!-- ************************ MultipleLanguageText ********************* -->
  <!-- -->
  <xsd:complexType name="MultipleLanguageTextType">
    <xsd:annotation>
      <xsd:documentation>
      A container that represents text in multiple languages.

      Attributes:

      primary:          Indicates the language that is preferred in some way. It
                        also overrides the language attribute on the PLMXML
                        element. The override applies to the single language
                        versions of the attributes that correspond to the
                        referencing multiple language attributes.

      Sub-elements:

      Item:             Text in a particular language. Only Item per language
                        should be used.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:IdBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="Item" type="plm:MultipleLanguageItemType"/>
        </xsd:choice>
        <xsd:attribute name="primary" type="xsd:language" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <!-- ************************ OrganisationRoleEnum *********************** -->
  <!-- -->
  <xsd:simpleType name="OrganisationRoleEnum">
    <xsd:annotation>
      <xsd:documentation>
      The role of an Organisation.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="supplier"/>
      <xsd:enumeration value="manufacturer"/>
      <xsd:enumeration value="distributor"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <!-- ************************ ExpressionFormatEnum *********************** -->
  <!-- -->
  <xsd:simpleType name="ExpressionFormatEnum">
    <xsd:annotation>
      <xsd:documentation>
      The format of the expression in GeneralExpressionBase. mro means the
      expression is in MRO format. nx means it is in NX format.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="mro"/>
      <xsd:enumeration value="nx"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <!-- ************************ GeneralExpressionBase ********************** -->
  <!-- -->
  <xsd:complexType name="GeneralExpressionBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
      The base for expressions.

      Attributes:

      expression:     The expression in the syntax given by the format attribute
                      as a string.
      format:         The format of the expression as an ExpressionFormatEnum.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="expression" type="xsd:string" use="required"/>
        <xsd:attribute name="format" type="plm:ExpressionFormatEnum" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="GeneralExpression" type="plm:GeneralExpressionBase" substitutionGroup="plm:AttribOwner"/>
  <!-- -->
  <!-- ********************** CurrencyType ******************************* -->
  <!-- -->
  <xsd:simpleType name="CurrencyType">
    <xsd:restriction base="xsd:string">
      <xsd:length value="3" fixed="true"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <!-- ********************** Money ************************************** -->
  <!-- -->
  <xsd:complexType name="MoneyType">
    <xsd:annotation>
      <xsd:documentation>
      Represents an amount of money in any currency.

      Attributes:

      value:          The amount of money.
      currency:       The 3 (capital) letter currency code according to ISO
                      4217.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="value" type="xsd:decimal" use="optional"/>
        <xsd:attribute name="currency" type="plm:CurrencyType" use="optional"/>            
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Money" type="plm:MoneyType" substitutionGroup="plm:AttribOwner"/>
</xsd:schema>
