<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:apr="http://www.dassaultsystemes.com/delmia/apriso"
           targetNamespace="http://www.dassaultsystemes.com/delmia/apriso"
           elementFormDefault="qualified">
  
  <xs:element name="TransportPathOrders" type="apr:TransportPathOrdersType"/>
  
  <xs:complexType name="TransportPathOrdersType">
    <xs:sequence>
      <xs:element name="PathOrder" type="apr:PathOrderType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="PathOrderType">
    <xs:sequence>
      <xs:element name="OrderId" type="xs:string"/>
      <xs:element name="OrderName" type="xs:string"/>
      <xs:element name="Description" type="xs:string"/>
      <xs:element name="PathType" type="apr:PathTypeEnum"/>
      <xs:element name="TotalLength" type="xs:decimal"/>
      <xs:element name="Timestamp" type="xs:dateTime"/>
      <xs:element name="Generator" type="xs:string"/>
      <xs:element name="Version" type="xs:string"/>
      <xs:element name="Nodes" type="apr:NodesType"/>
      <xs:element name="Edges" type="apr:EdgesType"/>
      <xs:element name="ObjectLimits" type="apr:ObjectLimitsType"/>
      <xs:element name="CoordinateSystem" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- 路径类型枚举 -->
  <xs:simpleType name="PathTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Ground"/>
      <xs:enumeration value="Aerial"/>
      <xs:enumeration value="Underground"/>
      <xs:enumeration value="Mixed"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:complexType name="NodesType">
    <xs:sequence>
      <xs:element name="Node" type="apr:NodeType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="NodeType">
    <xs:sequence>
      <xs:element name="NodeId" type="xs:string"/>
      <xs:element name="SequenceId" type="xs:int"/>
      <xs:element name="NodeName" type="xs:string"/>
      <xs:element name="NodeType" type="apr:NodeTypeEnum"/>
      <xs:element name="Position" type="apr:PositionType"/>
      <xs:element name="Released" type="xs:boolean"/>
      <xs:element name="LiftHeight" type="xs:decimal" minOccurs="0"/>
      <xs:element name="LoadCapacity" type="xs:decimal" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:simpleType name="NodeTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="StartPoint"/>
      <xs:enumeration value="WayPoint"/>
      <xs:enumeration value="EndPoint"/>
      <xs:enumeration value="ChargePoint"/>
      <xs:enumeration value="ParkPoint"/>
      <xs:enumeration value="LiftPoint"/>
      <xs:enumeration value="DescendPoint"/>
      <xs:enumeration value="HoverPoint"/>
      <xs:enumeration value="TransferPoint"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:complexType name="PositionType">
    <xs:sequence>
      <xs:element name="X" type="xs:decimal"/>
      <xs:element name="Y" type="xs:decimal"/>
      <xs:element name="Z" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="EdgesType">
    <xs:sequence>
      <xs:element name="Edge" type="apr:EdgeType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="EdgeType">
    <xs:sequence>
      <xs:element name="EdgeId" type="xs:string"/>
      <xs:element name="EdgeType" type="apr:EdgeTypeEnum"/>
      <xs:element name="SequenceId" type="xs:int"/>
      <xs:element name="StartNodeId" type="xs:string"/>
      <xs:element name="EndNodeId" type="xs:string"/>
      <xs:element name="PhysicalLength" type="xs:decimal"/>
      <xs:element name="Trajectory" type="apr:TrajectoryType" minOccurs="0"/>
      <xs:element name="MaxSpeed" type="xs:decimal" minOccurs="0"/>
      <xs:element name="MaxAcceleration" type="xs:decimal" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:simpleType name="EdgeTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="straight"/>
      <xs:enumeration value="arc"/>
      <xs:enumeration value="bezier"/>
      <xs:enumeration value="vertical"/>
      <xs:enumeration value="suspension"/>
      <xs:enumeration value="hoisting"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:complexType name="TrajectoryType">
    <xs:sequence>
      <xs:element name="StartTangent" type="apr:PositionType"/>
      <xs:element name="EndTangent" type="apr:PositionType"/>
      <xs:element name="ArcCenter" type="apr:PositionType" minOccurs="0"/>
      <xs:element name="Radius" type="xs:decimal" minOccurs="0"/>
      <xs:element name="DeflectionAngle" type="xs:decimal" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="ObjectLimitsType">
    <xs:sequence>
      <xs:element name="MaxLength" type="xs:decimal"/>
      <xs:element name="MaxWidth" type="xs:decimal"/>
      <xs:element name="MaxHeight" type="xs:decimal"/>
      <xs:element name="SafetyMargin" type="xs:decimal"/>
      <xs:element name="MaxWeight" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>
  
</xs:schema>
