<?xml version="1.0" encoding="UTF-8"?>
<!-- This software and related documentation are proprietary to       -->
<!-- Unigraphics Solutions Inc. (c) 2001. Unigraphics Solutions Inc.  -->
<!-- All Rights Reserved.                                             -->
<!--                                                                  -->
<!-- Restricted Rights Legend: This commercial computer software and  -->
<!-- related documentation are provided with restricted rights. Use,  -->
<!-- duplication or disclosure by the U.S. Government is subject to   -->
<!-- the protections and restrictions as set forth in the Unigraphics -->
<!-- Solutions Inc. commercial license for the software and/or        -->
<!-- documentation as prescribed in DOD FAR 227-7202-3(a), or for     -->
<!-- Civilian agencies, in FAR 27.404(b)(2)(i), and any successor or  -->
<!-- similar regulation, as applicable.                               -->
<!--                                                                  -->
<!--  Unigraphics Solutions Inc., 13736 Riverport Drive,              -->
<!--  Maryland Heights, MO 63043-4826.                                -->
<xsd:schema targetNamespace="http://www.plmxml.org/Schemas/PLMXMLSchema" xmlns:plm="http://www.plmxml.org/Schemas/PLMXMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xml:lang="en">
  <!--*** Common -->
  <!--*** Types, elements and attributes common to several components -->
  <!--*** of the PLMXML Schema -->
  <xsd:attributeGroup name="idGroup">
    <xsd:attribute name="id" type="xsd:ID" use="optional"/>
  </xsd:attributeGroup>
  <!-- -->
  <xsd:complexType name="IdBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">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:complexType name="ApplicationRefType">
    <xsd:annotation>
      <xsd:documentation>
    The ApplicationRef element is meant to relate the parent element (Part, Representation, etc) 
    back to the owning entity in the sending  application. The attributes can be described 
    as follows:

    - 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="required"/>
    <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="PLMXMLSchemaGenerator">sdkname=DescriptionObject</xsd:appinfo>
      <xsd:documentation>
			The DescriptionBase type is an abstract base type for PLM XML types which have optional 
			name, description and ApplicationRef.
			         
			Sub-elements:
			
			Description      Readable textual description of the element.
			ApplicationRef   A means of uniquely identifying the element in terms understood by the
			                 sending system.
 			</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"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="EntityRefType">
    <xsd:restriction base="xsd:anyURI"/>
  </xsd:simpleType>
  <xsd:attributeGroup name="referenceGroup">
    <xsd:attribute name="location" type="xsd:anyURI" use="optional"/>
    <xsd:attribute name="load" type="xsd:boolean" default="false"/>
  </xsd:attributeGroup>
  <!-- -->
  <xsd:simpleType name="uriReferenceListType">
    <xsd:list itemType="xsd:anyURI"/>
  </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:DoubleListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </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:complexType name="BoxBoundType">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">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:appinfo source="PLMXMLSchemaGenerator">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:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="BoundType">
    <xsd:sequence>
      <xsd:element name="Transform" type="plm:TransformType" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="type" type="plm:BoundingType" default="box"/>
    <xsd:attribute name="values" type="plm:MatrixType" use="required"/>
    <xsd:attribute name="transformRef" type="xsd:IDREF" use="optional"/>
  </xsd:complexType>
  <!--*** Attributes -->
  <!-- -->
  <xsd:simpleType name="IntegerFieldType">
    <xsd:restriction base="xsd:integer"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="IntegerFieldListType">
    <xsd:list itemType="plm:IntegerFieldType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RealFieldType">
    <xsd:restriction base="xsd:double"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RealFieldListType">
    <xsd:restriction base="plm:DoubleListType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="StringFieldType">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="VectorFieldType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="CoordinateFieldType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="DirectionFieldType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="AxisFieldType">
    <xsd:restriction base="plm:DoubleListType">
      <xsd:length value="6"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="EntityFieldType">
    <xsd:restriction base="plm:EntityRefType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="EntityFieldListType">
    <xsd:list itemType="plm:EntityFieldType"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="AttributeOwnerType">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">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="PLMXMLSchemaGenerator">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="PLMXMLSchemaGenerator">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="PLMXMLSchemaGenerator">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:appinfo source="PLMXMLSchemaGenerator">output=ignore</xsd:appinfo>
    </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="AttribOwnerBase" abstract="true">
    <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"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AttribOwner" type="plm:AttribOwnerBase"/>
  <!-- -->
  <xsd:complexType name="PropertiesBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">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="PLMXMLSchemaGenerator">output=ignore</xsd:appinfo>
            </xsd:annotation>
          </xsd:element>
          <xsd:element name="SphereBound" type="plm:SphereBoundType" minOccurs="0">
            <xsd:annotation>
              <xsd:appinfo source="PLMXMLSchemaGenerator">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:complexType name="InternalRepBase" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="EntityBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=EntityObject</xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="entityRef" type="plm:EntityRefType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="PointBase" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <xsd:attribute name="position" type="plm:VectorType"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <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>
  <!-- -->
  <xsd:complexType name="CurveBase" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <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:complexType name="PlaneCurveBase" abstract="true">
    <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:complexContent>
      <xsd:extension base="plm:EntityBase">
        <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:complexType name="SurfacePositionBase" abstract="true">
    <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>
  <!--*** Display Control -->
  <!--*** PLMXML Schema to define colours, materials, lights, etc -->
  <!--*** required to support display controls -->
  <!-- -->
  <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:restriction base="plm:RGBFloatListType">
      <xsd:length value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RGBAType">
    <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:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <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:complexType name="EntityMaterialType">
    <xsd:annotation>
      <xsd:documentation>
    Material definition that can be associated with a remote entity.
    </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"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <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:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <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: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: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="name" type="xsd:string" use="optional"/>
        <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>
  <!--*** Reference -->
  <!--*** Schemas for defining references to entities via the data references.-->
  <!-- -->
  <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.

    Attribute:
    - name   -(optional) Name of the reference
    - select -(mandatory) Type of the reference - single or multiple. It provides
    the application with additional information about what the reference
    is actually referencing : a set of entities or a single entity.  
    - type   -(mandatory) Type of the reference - body, face, edge or vertex. 
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DescriptionBase">
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="contextRef" type="xsd:anyURI" 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 eXTPointer.
    Attribute:
    - locationRef  -(mandatory) The value of the URI reference.
    - type         -(mandatory) Format of the locator reference.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityRefBase">
        <xsd:attribute name="locationRef" type="xsd:anyURI" 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:
    - name   -(mandatory) The name of the attribute to query
    - field  -(optional) The name of the field within the attribute
    - index  -(optional) The index of the field within the attribute
    (if 'field' cannot be mapped).
    - value  -(mandatory) 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  - (mandatory) 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"/>
  <!--*** Features -->
  <!--*** Enumerated feature exchange. Feature semantics are not supported. -->
  <!-- -->
  <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.

    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
    (eg. a BRep) expressed as PLMXML references.

    Attributes:
    - name              - (required) display name for the feature
    - 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.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="Type" type="plm:UserEnumDataType"/>
          <xsd:element name="Parameter" type="plm:UserDataElementType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:EntityRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required"/>
        <xsd:attribute name="nextFeature" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="targetFeature" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="toolFeature" type="xsd:IDREF" use="optional"/>
        <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"/>
  <!-- -->
  <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"/>
  <!-- -->
  <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'
    of a part - the FeatureTreeType is based on InternalRepBase and the 
    element FeatureTree is a substitution class for InternalRep.

    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.

    Attributes:
    - name           - (required) display name for the feature tree.
    - 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.
    </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="name" type="xsd:string" use="required"/>
        <xsd:attribute name="firstFeature" type="xsd:IDREF" use="optional"/>
        <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"/>
  <!--*** Geometry -->
  <xsd:element name="Point" type="plm:PointBase"/>
  <!-- -->
  <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"/>
  <!--*** Curve geometry types -->
  <!-- -->
  <xsd:complexType name="LineType">
    <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:complexType name="PolyLineType">
    <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:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="CircleType">
    <xsd:complexContent>
      <xsd:extension base="plm:PlaneCurveBase">
        <xsd:attribute name="radius" type="xsd:double" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="EllipseType">
    <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: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>
  <!-- -->
  <xsd:complexType name="BSplineCurveType">
    <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:complexType name="CompositeCurveType">
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:attribute name="curves" type="xsd:IDREFS" use="required"/>
        <xsd:attribute name="isClosed" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="SPCurveType">
    <xsd:complexContent>
      <xsd:extension base="plm:CurveBase">
        <xsd:attribute name="parameterCurve" type="xsd:IDREF" use="required"/>
        <xsd:attribute name="surface" type="xsd:IDREF" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--*** Curve geometry elements -->
  <xsd:element name="Curve" type="plm:CurveBase"/>
  <xsd:element name="Line" type="plm:LineType" substitutionGroup="plm:Curve"/>
  <xsd:element name="PolyLine" type="plm:PolyLineType" substitutionGroup="plm:Curve"/>
  <xsd:element name="Circle" type="plm:CircleType" substitutionGroup="plm:Curve"/>
  <xsd:element name="Ellipse" type="plm:EllipseType" substitutionGroup="plm:Curve"/>
  <xsd:element name="BSplineCurve" type="plm:BSplineCurveType" substitutionGroup="plm:Curve"/>
  <xsd:element name="CompositeCurve" type="plm:CompositeCurveType" substitutionGroup="plm:Curve"/>
  <xsd:element name="SPCurve" type="plm:SPCurveType" substitutionGroup="plm:Curve"/>
  <xsd:element name="SurfacePosition" type="plm:SurfacePositionBase" substitutionGroup="plm:Surface"/>
  <!-- -->
  <xsd:complexType name="PlaneType">
    <xsd:complexContent>
      <xsd:extension base="plm:SurfacePositionBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <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: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:complexType name="ConeType">
    <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:complexType name="TorusType">
    <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:complexType name="BSplineSurfaceType">
    <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>
  <!--*** Surface geometry elements -->
  <xsd:element name="Surface" type="plm:SurfaceBase"/>
  <xsd:element name="Plane" type="plm:PlaneType" substitutionGroup="plm:Surface"/>
  <xsd:element name="Cylinder" type="plm:CylinderType" substitutionGroup="plm:Surface"/>
  <xsd:element name="Sphere" type="plm:SphereType" substitutionGroup="plm:Surface"/>
  <xsd:element name="Cone" type="plm:ConeType" substitutionGroup="plm:Surface"/>
  <xsd:element name="Torus" type="plm:TorusType" substitutionGroup="plm:Surface"/>
  <xsd:element name="BSplineSurface" type="plm:BSplineSurfaceType" substitutionGroup="plm:Surface"/>
  <!-- -->
  <xsd:complexType name="PlanarCoordinateSystemType">
    <xsd:annotation>
      <xsd:documentation>
    Planar Coordinate system
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <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:PlanarCoordinateSystemType"/>
  <!-- -->
  <xsd:complexType name="CompositionType">
    <xsd:annotation>
      <xsd:documentation>
    Geometry composition 
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:EntityBase">
        <xsd:sequence>
          <xsd:element name="LocalCoordinateSystem" type="plm:PlanarCoordinateSystemType"/>
          <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:CompositionType"/>
  <!-- -->
  <xsd:complexType name="ConstructionGeometryType">
    <xsd:annotation>
      <xsd:documentation>
    Top level construction geometry element
    </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>
  <!--*** View Control -->
  <!--*** Elements for defining view controls -->
  <!-- -->
  <xsd:complexType name="PerspectiveType">
    <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>
  <!-- -->
  <xsd:complexType name="OrthographicType">
    <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>
  <!-- -->
  <xsd:complexType name="ViewControlType">
    <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>
  <!--*** 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="xsd:anyURI" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="Texture1DType">
    <xsd:sequence maxOccurs="unbounded">
      <xsd:element name="Data" type="plm:Texture1DDataType"/>
    </xsd:sequence>
    <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="xsd:anyURI" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="Texture2DType">
    <xsd:sequence maxOccurs="unbounded">
      <xsd:element name="Data" type="plm:Texture2DDataType"/>
    </xsd:sequence>
    <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:attribute name="name" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <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="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="dataRef" type="xsd:IDREF" use="optional"/>
        <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: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"/>
        <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"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--*** 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="Unregistered"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:element name="InternalRep" type="plm:InternalRepBase"/>
  <!-- -->
  <xsd:complexType name="CompoundRepType">
    <xsd:annotation>
      <xsd:documentation>
	This class represents the &lt;CompoundRep&gt; element in an plmxml file. 
			</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:attributeGroup ref="plm:referenceGroup"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="RepresentationType">
    <xsd:annotation>
      <xsd:documentation>
    Part representations for the PLMXML Schema
    
    This class represents the &lt;Representation&gt; element in an plmxml file. 

	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).

	Applications can define derived classes of Representation (for example,
	XTRepresentation), to manage model data in different formats, and to load them
	into virtual memory. Model entities loaded in this way are referenced by a
	PLMXML_MODELLER_HANDLE (which might, for example, be a memory pointer).
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="Transform" type="plm:TransformType" minOccurs="0"/>
          <xsd:element ref="plm:InternalRep" minOccurs="0"/>
          <xsd:element name="CompoundRep" type="plm:CompoundRepType" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="Material" type="plm:MaterialType"/>
            <xsd:element name="EntityMaterial" type="plm:EntityMaterialType"/>
            <xsd:element name="TextureData" type="plm:TextureDataType"/>
            <xsd:element name="Texture" type="plm:TextureType"/>
            <xsd:element name="EntityTexture" type="plm:EntityTextureType"/>
          </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="transformRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="format" type="plm:RepresentationFormatType" use="required"/>
        <xsd:attribute name="revision" type="xsd:decimal" use="optional"/>
        <xsd:attributeGroup ref="plm:referenceGroup"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--*** Product View -->
  <!-- -->
  <xsd:complexType name="OccurrenceType">
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:sequence>
          <xsd:element name="Transform" type="plm:TransformType" minOccurs="0"/>
          <xsd:element name="Representation" type="plm:RepresentationType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="transformRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="occurrenceRefs" type="xsd:IDREFS" use="optional"/>
        <xsd:attribute name="instanceRefs" use="optional">
          <xsd:simpleType>
            <xsd:restriction base="plm:uriReferenceListType">
              <xsd:minLength value="1"/>
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:attribute>
        <xsd:attribute name="pathRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="partRef" type="xsd:anyURI" use="optional"/>
        <xsd:attribute name="representationRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="materialRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="geometryRefs" type="plm:uriReferenceListType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="ProductViewType">
    <xsd:annotation>
      <xsd:documentation>
    View definition for PLMXML Schema
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="Occurrence" type="plm:OccurrenceType"/>
          <xsd:element name="Transform" type="plm:TransformType"/>
        </xsd:choice>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="primaryOccurrenceRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="rootRefs" type="xsd:IDREFS" use="optional"/>
        <xsd:attribute name="viewControlRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="displayControlRef" type="xsd:IDREF" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--*** Product Def -->
  <!--*** Types, elements and attributes for the Product Definition -->
  <!--*** component of the PLMXML Schema -->
  <!-- -->
  <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="PLMXMLSchemaGenerator">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="PartType">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=Part</xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:PropertiesBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="Occurrence" type="plm:OccurrenceType"/>
          <xsd:element name="Representation" type="plm:RepresentationType"/>
        </xsd:choice>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="type" type="plm:PartTypesType" use="optional"/>
        <xsd:attribute name="partRefs" type="xsd:IDREFS" use="optional"/>
        <xsd:attribute name="instanceRefs" type="xsd:IDREFS" use="optional"/>
        <xsd:attribute name="representationRefs" type="xsd:IDREFS" use="optional"/>
        <xsd:attribute name="materialRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="preferredUnits" type="plm:PreferredPartUnitsType" default="millimetres"/>
        <xsd:attribute name="geometryRefs" type="plm:uriReferenceListType" use="optional"/>
        <xsd:attribute name="annotation3DGroupRefs" type="plm:uriReferenceListType" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Part" type="plm:PartType"/>
  <!-- -->
  <xsd:complexType name="InstanceType">
    <xsd:complexContent>
      <xsd:extension base="plm:PropertiesBase">
        <xsd:sequence>
          <xsd:element name="Transform" type="plm:TransformType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="partRef" type="xsd:anyURI" use="required"/>
        <xsd:attribute name="transformRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="materialRef" type="xsd:IDREF" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Instance" type="plm:InstanceType"/>
  <!-- -->
  <xsd:complexType name="InstanceGraphType">
    <xsd:complexContent>
      <xsd:extension base="plm:PropertiesBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:Instance"/>
          <xsd:element ref="plm:Part"/>
          <xsd:element name="Transform" type="plm:TransformType"/>
        </xsd:choice>
        <xsd:attribute name="rootInstanceRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="rootRefs" type="xsd:IDREFS" use="optional"/>
        <xsd:attribute name="viewControlRef" type="xsd:IDREF" use="optional"/>
        <xsd:attribute name="displayControlRef" type="xsd:IDREF" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InstanceGraph" type="plm:InstanceGraphType"/>
  <!-- -->
  <xsd:complexType name="ProductDefType">
    <xsd:complexContent>
      <xsd:extension base="plm:AttribOwnerBase">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="plm:InstanceGraph"/>
          <xsd:element ref="plm:Part"/>
          <xsd:element name="Representation" type="plm:RepresentationType"/>
          <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 name="Material" type="plm:MaterialType"/>
          <xsd:element name="ConstructionGeometry" type="plm:ConstructionGeometryType"/>
        </xsd:choice>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="revision" type="xsd:decimal" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--*** User Data -->
  <!--*** Schema for describing user data values and general annotation information. -->
  <!-- -->
  <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.
    </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:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="UserListElementType">
    <xsd:annotation>
      <xsd:documentation>
    Datatype that defines a single entry in the user list. The
    element will consist of a value attribute and an optional
    description attribute.
    The string 'value' attribute must contain data of the type
    specified by the 'type' attribute in the owning list.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="value" type="xsd:string" use="required"/>
    <xsd:attribute name="description" type="xsd:string" use="optional"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="UserListDataType">
    <xsd:annotation>
      <xsd:documentation>
    Datatype to define a list of user specified data items.
    Each item in the list is of the same type - as specified
    by the 'type' attribute'.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:choice>
          <xsd:element name="Item" type="plm:UserListElementType" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <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:attributeGroup name="UserValueRangeGroup">
    <xsd:annotation>
      <xsd:documentation>
    Group of attributes to specifiy the valid range of 
    a user value data item.
    </xsd:documentation>
    </xsd:annotation>
    <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:attributeGroup>
  <xsd:attributeGroup name="UserValueDataGroup">
    <xsd:annotation>
      <xsd:documentation>
    Group of attributes for specifying the user data item.
    </xsd:documentation>
    </xsd:annotation>
    <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="xsd:anyURI" use="optional"/>
    <xsd:attribute name="editable" type="xsd:boolean" default="false"/>
  </xsd:attributeGroup>
  <!-- -->
  <xsd:complexType name="UserDataElementType">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=UserValue</xsd:appinfo>
      <xsd:documentation>
    The datatype specifying all the attributes and fields
    that will define a single user data item within a 
    user data table.
    title - is the name of the entry in the data table
    value - is the current value of the data entry
    type  - the type of the data enetry:
    - int      : value = single integer
    - ints     : value = list of integers
    - real     : value = single real (double) value
    - reals    : value = list of real (double) values 
    - boolean  : value = single boolean (true/false) value
    - booleans : value = list of boolean values 
    - reference: value = single reference (anyURI)
    - enum     : value = enumeration value
    - UserList or 
    dataRef = List of string values that make up
    enumeration.
    - list     : value = ignored
    - UserList or 
    dataRef = List of values that make up data.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="UserList" type="plm:UserListDataType" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="plm:UserValueDataGroup"/>
    <xsd:attributeGroup ref="plm:UserValueRangeGroup"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="UserDataType">
    <xsd:annotation>
      <xsd:documentation>
    The datatype for defining the table of user values. The type is
    based on the plm:Attribute base class so that it may be substituted
    wherever PLMXML attributes are permitted. 
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:choice>
          <xsd:element name="UserValue" type="plm:UserDataElementType" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="UserData" type="plm:UserDataType" substitutionGroup="plm:Attribute">
    <xsd:annotation>
      <xsd:documentation>
    The top level element for defining user values. It is 
    a substitute class for plm:Attributes
    </xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <!-- -->
  <xsd:complexType name="UserEnumDataType">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=UserEnum</xsd:appinfo>
      <xsd:documentation>
    The datatype for defining a user defined enumeration. The
    element contains a single value for the enumeration and a
    reference to a table element (expected to be an element 
    called 'UserList' defined above.
    The value must be one of values listed in the user list.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="value" type="xsd:string" use="required"/>
    <xsd:attribute name="listRef" type="xsd:anyURI" use="optional"/>
  </xsd:complexType>
  <!-- -->
  <xsd:simpleType name="XTDataType">
    <xsd:annotation>
      <xsd:documentation>
	This class represents the &lt;XTData&gt; element in an 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>
  <!--*** XTRep -->
  <!-- -->
  <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"/>
  <!--*** Mass Properties -->
  <!-- -->
  <xsd:simpleType name="MassPropertyUnitType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="grams,millimetres">
        <xsd:annotation>
          <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=GramsMillimetres</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="grams,centimetres">
        <xsd:annotation>
          <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=GramsCentimetres</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="kilograms,metres">
        <xsd:annotation>
          <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=KilogramsMetres</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="pounds,feet">
        <xsd:annotation>
          <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=PoundsFeet</xsd:appinfo>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="pounds,inches">
        <xsd:annotation>
          <xsd:appinfo source="PLMXMLSchemaGenerator">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="VolumeType">
    <xsd:simpleContent>
      <xsd:restriction base="plm:MassPropertyRealType"/>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="DensityType">
    <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:VectorFieldType">
        <xsd:attributeGroup ref="plm:MassPropertyGroup"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="CentreOfMassType">
    <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="MassPropertyType">
    <xsd:annotation>
      <xsd:documentation>
    PLMXML attribute describing mass properties.
			</xsd:documentation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">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:VolumeType"/>
          <xsd:element name="Density" type="plm:DensityType"/>
          <xsd:element name="Mass" type="plm:MassType"/>
          <xsd:element name="CentreOfMass" type="plm:CentreOfMassType"/>
          <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:MassPropertyType" substitutionGroup="plm:Attribute"/>
  <!--*** Protocol (Request) -->
  <!--*** This schema describes an PLMXML data request element. -->
  <!--*** This  data element is to be used to communicate a -->
  <!--*** request for an PLMXML document from an application. -->
  <!-- -->
  <xsd:simpleType name="RequestIdType">
    <xsd:annotation>
      <xsd:documentation>
    Request identifier.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="QueryBase" abstract="true">
    <xsd:annotation>
      <xsd:documentation>
    The abstract datatype and element for Query elements.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:restriction base="xsd:anyType"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Query" type="plm:QueryBase"/>
  <!-- -->
  <xsd:complexType name="RequestType">
    <xsd:annotation>
      <xsd:documentation>
    The datatype describing the data context for PLMXML request.
    This effectively identifies the part or application
    context for the request.
    Elements:
    - Query        - (required) the query itself. Note that this
                    is an abstract element where a substitution
                    element must be used.
    Attributes:
    - name         - (optional) name of the data context or part.
    - format       - (required) the format of the context.
    - context      - (required) the location or identifier of the 
                    data context.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:choice>
      <xsd:element ref="plm:Query" maxOccurs="unbounded"/>
    </xsd:choice>
    <xsd:attribute name="name" type="xsd:string" use="optional"/>
    <xsd:attribute name="format" type="plm:RepresentationFormatType" use="required"/>
    <xsd:attribute name="context" type="xsd:string" use="required"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="DocumentBase" abstract="true">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=DocumentBase</xsd:appinfo>
      <xsd:documentation>
	This class corresponds to a top-level element in an plmxml file. 
	Document and RequestDocument are derived classes of this, which 
	correspond to &lt;plmxml&gt; and &lt;plmxmlRequest&gt; elements, 
	respectively.
			</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DescriptionBase">
        <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:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="PLMXMLRequestType">
    <xsd:annotation>
      <xsd:documentation>
    The main PLMXML data request element. 
    This element must appear within it's own document.
    The element contains  anumber of ields for describing the 
    context of the request (eg. the part name, etc) and the 
    type of data to be returned. The application making the 
    request provides it's own context within the data request 
    element via the 'requestId' attribute. This attribute value
    must be returned in the resultant PLMXML document. This enables
    the application to match PLMXML documents with the data request.
    Elements:
    - Description  - (optional) Description of the data request. This
                    data has no semantic. It is purely a user field.
    - Request      - (optional) The application part context and request.
    Attributes:
    - schemaVersion - (fixed) The version of the schema with which the
                      data request complies.
    - author        - (mandatory) The author of the document, making the 
                      request.
    - application   - (mandatory) Name of the application making the request.
    - requestId     - (mandatory) Application supplied identifier for the 
                      request. This value will be returned in the resulting
                      PLMXML document.
    - time          - (mandatory) Time of the request.
    - date          - (mandatory) Date of the request.
    - language      - (optional) Language specifier.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DocumentBase">
        <xsd:sequence>
          <xsd:element name="Request" type="plm:RequestType"/>
        </xsd:sequence>
        <xsd:attribute name="application" type="xsd:string" use="required"/>
        <xsd:attribute name="requestId" type="plm:RequestIdType" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PLMXMLRequest" type="plm:PLMXMLRequestType">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=RequestDocument</xsd:appinfo>
    </xsd:annotation>
  </xsd:element>
  <!-- -->
  <xsd:simpleType name="RepQueryType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="XT"/>
      <xsd:enumeration value="JT"/>
      <xsd:enumeration value="jXT"/>
      <xsd:enumeration value="All"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="TristripControl">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="facets"/>
      <xsd:enumeration value="tristrips"/>
      <xsd:enumeration value="facetsAndTristrips"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="FacetsetControl">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="unspecified"/>
      <xsd:enumeration value="perFace"/>
      <xsd:enumeration value="perMaterial"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="FacetControlsType">
    <xsd:annotation>
      <xsd:documentation>
    This type gives the parameters which control the a facet generation
    operation.
    
    Attributes:
    
    curveAngularTol    - max angular change between chords along edge
    curveDistanceTol   - max edge/chord distance
    surfaceAngularTol  - max angular change between facets
    surfaceDistanceTol - max face/facet distance
    tristripControl    - whether tristrips allowed
    facetsetControl    - whether facetsets are created per face, per material, or
                         unspecified
    
      </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="curveAngularTol" type="xsd:double" use="optional"/>
    <xsd:attribute name="curveDistanceTol" type="xsd:double" use="optional"/>
    <xsd:attribute name="surfaceAngularTol" type="xsd:double" use="optional"/>
    <xsd:attribute name="surfaceDistanceTol" type="xsd:double" use="optional"/>
    <xsd:attribute name="tristripControl" type="plm:TristripControl" use="optional"/>
    <xsd:attribute name="facetsetControl" type="plm:FacetsetControl" use="optional"/>
  </xsd:complexType>
  <!-- -->
  <xsd:complexType name="RepresentationQueryType">
    <xsd:annotation>
      <xsd:documentation>
    This datatype is used to describe a representation query. The
    element is defined as a substitution element for the abstract
    Query element.
    Attributes:
    - type  - (required) The type of representation requested.
              Currently, this is : XT, JT, jXT or All
    - label - (optional) If a suitable application label is specified
              the request must return the representation matching the
              specified label.
              If no label is specified, then the request must return
              an PLMXML document that identifies all the appropriate 
              representation in the specified context.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:QueryBase">
        <xsd:sequence>
          <xsd:element name="FacetControls" type="plm:FacetControlsType" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="type" type="plm:RepQueryType" use="required"/>
        <xsd:attribute name="label" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="RepresentationQuery" type="plm:RepresentationQueryType" substitutionGroup="plm:Query"/>
  <!-- -->
  <xsd:complexType name="ProductDefQueryType">
    <xsd:annotation>
      <xsd:documentation>
    This datatype is used to describe a product structure query. The
    element is defined as a substitution element for the abstract
    Query element.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:QueryBase"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ProductDefQuery" type="plm:ProductDefQueryType" substitutionGroup="plm:Query"/>
  <!-- -->
  <xsd:complexType name="FeatureQueryType">
    <xsd:annotation>
      <xsd:documentation>
    This datatype is used to describe a Feature/FeatureTree query. The
    element is defined as a substitution element for the abstract
    Query element.
    Attributes:
    - label - (optional) If a suitable application label is specified
              the request must return the feature matching the
              specified label.
              If no label is specified, then the request must return
              an PLMXML document that specifies the whole feature tree 
              within the specified context.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:QueryBase">
        <xsd:attribute name="label" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="FeatureQuery" type="plm:FeatureQueryType" substitutionGroup="plm:Query"/>
  <!-- -->
  <xsd:complexType name="AnnotationQueryType">
    <xsd:annotation>
      <xsd:documentation>
    This datatype is used to describe an Annotation query. The
    element is defined as a substitution element for the abstract
    Query element.
    Attributes:
    - label - (optional) If a suitable application label is specified
              the request must return the annotation matching the
              specified label.
              If no label is specified, then the request must return
              an PLMXML document that specifies all the annotations 
              within the specified context.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:QueryBase">
        <xsd:attribute name="label" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AnnotationQuery" type="plm:AnnotationQueryType" substitutionGroup="plm:Query"/>
  <!-- -->
  <xsd:simpleType name="RequestResultType">
    <xsd:annotation>
      <xsd:documentation>
    The request return types.
    </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="Success"/>
      <xsd:enumeration value="InvalidRequest"/>
      <xsd:enumeration value="ContextNotIdentified"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:simpleType name="RequestSeverityType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="none"/>
      <xsd:enumeration value="mild"/>
      <xsd:enumeration value="severe"/>
      <xsd:enumeration value="aborted"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- -->
  <xsd:complexType name="RequestInformationType">
    <xsd:annotation>
      <xsd:documentation>
    This datatype is used to return status information to the user
    within the resultant PLMXML document. The element is in the form
    of a PLMXML attribute. This implies that an PLMXML docuemnt could 
    just be returned with one RequestInformation element in it - 
    useful for returning errors and no data.
    Attributes:
    - requestId - (required) The application request identifier.
    - result - (default=Success) Indicates success or failure with a code.
    - description - (optional) textual description of failure, etc. 
    </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:AttributeBase">
        <xsd:attribute name="requestId" type="plm:RequestIdType" use="required"/>
        <xsd:attribute name="result" type="plm:RequestResultType" default="Success"/>
        <xsd:attribute name="description" type="xsd:string" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="RequestInformation" type="plm:RequestInformationType" substitutionGroup="plm:Attribute"/>
  <!--*** Markup -->
  <!-- -->
  <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="PLMXMLSchemaGenerator">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"/>
  <!-- -->
  <!--*** PLM XML -->
  <!-- -->
  <xsd:complexType name="PLMXMLType">
    <xsd:annotation>
      <xsd:documentation>
    V1.0 of the PLMXML Schema. This schema definition, in W3C format,
    can represent the following data in various combinations and permutations :
    - Product definition via instance graph and occurrence view representations
    - Part representation via facet representation and/or external refs to XT files
    - Attribute information
			</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="plm:DocumentBase">
        <xsd:sequence>
          <xsd:choice>
            <xsd:element name="ProductDef" type="plm:ProductDefType"/>
            <xsd:element name="Representation" type="plm:RepresentationType" maxOccurs="unbounded"/>
            <xsd:element name="ConstructionGeometry" type="plm:ConstructionGeometryType"/>
            <xsd:element ref="plm:Attribute">
              <xsd:annotation>
                <xsd:appinfo source="PLMXMLSchemaGenerator">output=ignore</xsd:appinfo>
              </xsd:annotation>
            </xsd:element>
          </xsd:choice>
          <xsd:element ref="plm:Attribute" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="plm:AttribOwner" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PLMXML" type="plm:PLMXMLType">
    <xsd:annotation>
      <xsd:appinfo source="PLMXMLSchemaGenerator">sdkname=Document</xsd:appinfo>
    </xsd:annotation>
  </xsd:element>
</xsd:schema>
