跳转至

CM SEMI E142模式#

SEMI E142标准是在关键制造MES中定制的,以允许更多的xml substrate map,更好地满足我们客户的需求。

以下是SEMI E142格式的定制XSD:

<?xml version="1.0" encoding="UTF-8"?>
<!--CMF: Removed target namespaces and imports-->
<xs:schema id="MapData"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:annotation>
    <xs:appinfo>Schema for SEMI E142 Substrate Mapping</xs:appinfo>
  </xs:annotation>
  <!-- Elements -->
  <xs:element name="MapData" type="MapDataType">
    <xs:key name="LayoutKey">
      <xs:selector xpath="Layouts/Layout" />
      <xs:field xpath="@LayoutId" />
    </xs:key>
    <xs:key name="SubstrateKey">
      <xs:selector xpath="Substrates/Substrate" />
      <xs:field xpath="@SubstrateType" />
      <xs:field xpath="@SubstrateId" />
    </xs:key>
    <xs:key name="SubstrateMapKey">
      <xs:selector xpath="SubstrateMaps/SubstrateMap" />
      <xs:field xpath="@SubstrateType" />
      <xs:field xpath="@SubstrateId" />
      <xs:field xpath="@LayoutSpecifier" />
    </xs:key>
    <xs:keyref name="ChildLayoutRef" refer="LayoutKey">
      <xs:selector xpath="Layouts/Layout/ChildLayouts/ChildLayout" />
      <xs:field xpath="@LayoutId" />
    </xs:keyref>
    <xs:keyref name="FromSubstrateMapRef" refer="SubstrateMapKey">
      <xs:selector xpath="SubstrateMaps/SubstrateMap/Overlay/TransferMap" />
      <xs:field xpath="@FromSubstrateType" />
      <xs:field xpath="@FromSubstrateId" />
      <xs:field xpath="@FromSubstrateLayoutSpecifier" />
    </xs:keyref>
  </xs:element>
  <!-- Complex Types -->
  <xs:complexType name="MapDataType">
    <xs:sequence>
      <xs:element name="Layouts" type="LayoutsType" minOccurs="0" />
      <xs:element name="Substrates" type="SubstratesType" minOccurs="0" />
      <xs:element name="SubstrateMaps" type="SubstrateMapsType" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LayoutsType">
    <xs:sequence>
      <xs:element name="Layout" type="LayoutType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LayoutType">
    <!--CMF: LayoutType child elements can be sent in any order (xs:all) instead of a defined sequence (xs:sequence) -->
    <xs:all>
      <xs:element name="Dimension" type="LogicalCoordinatesType" />
      <xs:element name="LowerLeft" type="PhysicalCoordinatesType" minOccurs="0" />
      <xs:element name="DeviceSize" type="PhysicalCoordinatesType" minOccurs="0" />
      <xs:element name="StepSize" type="PhysicalCoordinatesType" minOccurs="0" />
      <xs:element name="Z" type="ZDimensionsType" minOccurs="0" />
      <xs:element name="TopImage" type="xs:string" minOccurs="0" />
      <xs:element name="BottomImage" type="xs:string" minOccurs="0" />
      <xs:element name="ProductId" type="xs:string" minOccurs="0" />
      <xs:element name="ChildLayouts" type="ChildLayoutsType" minOccurs="0" />
    </xs:all>
    <xs:attribute name="LayoutId" type="xs:string" use="required" />
    <xs:attribute name="DefaultUnits" type="xs:string" use="required" />
    <xs:attribute name="TopLevel" type="CustomBoolean" use="optional" default="false" />
    <xs:attribute name="Package" type="CustomBoolean" use="optional" default="false" />
  </xs:complexType>
  <xs:complexType name="ChildLayoutsType">
    <xs:sequence>
      <xs:element name="ChildLayout" type="ChildLayoutType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ChildLayoutType">
    <xs:attribute name="LayoutId" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="SubstratesType">
    <xs:sequence>
      <xs:element name="Substrate" type="SubstrateType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SubstrateType">
    <!--CMF: SubstrateType child elements can be sent in any order (xs:all) instead of a defined sequence (xs:sequence) -->
    <xs:all>
      <xs:element name="LotId" type="LotIdType" minOccurs="0"/>
      <xs:element name="AliasIds" type="AliasIdsType" minOccurs="0"/>
      <xs:element name="CarrierType" type="xs:string" minOccurs="0"/>
      <xs:element name="CarrierId" type="LotIdType" minOccurs="0"/>
      <xs:element name="SlotNumber" type="xs:nonNegativeInteger" minOccurs="0"/>
      <xs:element name="SubstrateNumber" type="xs:nonNegativeInteger" minOccurs="0"/>
      <xs:element name="GoodDevices" type="xs:nonNegativeInteger" minOccurs="0"/>
      <xs:element name="SupplierName" type="xs:string" minOccurs="0"/>
      <xs:element name="Status" type="xs:string" minOccurs="0"/>     
    </xs:all>
    <xs:attribute name="SubstrateType" type="SubstrateTypeEnum" use="required" />
    <xs:attribute name="SubstrateId" type="MaterialIdType" use="required" />
    <!--CMF: SubstrateType can have any defined attribute. Since processContents=lax, no validation will be applied to this attribute-->
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>
  <xs:complexType name="SubstrateMapsType">
    <xs:sequence>
      <xs:element name="SubstrateMap" type="SubstrateMapType" maxOccurs="unbounded">
        <!--CMF: OverlayKey, defined as xs:unique can have null values. If it were defined as xs:key all its elements would have been required-->
        <xs:unique name="OverlayKey">
          <xs:selector xpath="Overlay" />
          <xs:field xpath="@MapName" />
          <xs:field xpath="@MapVersion" />
        </xs:unique>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SubstrateMapType">
    <xs:sequence>
      <xs:element name="Overlay" type="OverlayType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="SubstrateType" type="SubstrateTypeEnum" use="required" />
    <xs:attribute name="SubstrateId" type="MaterialIdType" use="required" />
    <xs:attribute name="LayoutSpecifier" type="xs:string" use="required" />
    <xs:attribute name="SubstrateSide" type="SubstrateSideEnum" use="optional" default="TopSide" />
    <xs:attribute name="Orientation" type="OrientationType" use="optional" default="0" />
    <xs:attribute name="OriginLocation" type="OriginLocationEnum" use="optional" default="LowerLeft" />
    <xs:attribute name="AxisDirection" type="AxisDirectionEnum" use="optional" default="UpRight" />
  </xs:complexType>
  <xs:complexType name="AliasIdsType">
    <xs:sequence>
      <xs:element name="AliasId" type="AliasIdType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="AliasIdType">
    <xs:attribute name="Type" type="xs:string" use="required" />
    <xs:attribute name="Value" type="MaterialIdType" use="required" />
  </xs:complexType>
  <xs:complexType name="OverlayType">
    <xs:sequence>
      <xs:element name="ReferenceDevices" type="ReferenceDevicesType" minOccurs="0" />
      <xs:choice minOccurs="0">
        <xs:element name="BinCodeMap" type="BinCodeMapType" />
        <xs:element name="DeviceIdMap" type="DeviceIdMapType" />
        <xs:element name="TransferMap" type="TransferMapType" maxOccurs="unbounded" />
        <xs:element name="DeviceDataMap" type="DeviceDataMapType" maxOccurs="unbounded" />
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="MapName" type="xs:string" use="required" />
    <xs:attribute name="MapVersion" type="xs:string" use="optional" default="" />
  </xs:complexType>
  <xs:complexType name="ReferenceDevicesType">
    <xs:sequence>
      <xs:element name="ReferenceDevice" type="ReferenceDeviceType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ReferenceDeviceType">
    <xs:sequence>
      <xs:element name="Coordinates" type="LogicalCoordinatesType" />
      <xs:element name="Position" type="PhysicalCoordinatesType" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="optional" default="" />
  </xs:complexType>
  <xs:complexType name="BinCodeMapType">
    <xs:sequence>
      <xs:element name="BinDefinitions" type="BinDefinitionsType" minOccurs="0" />
      <xs:element name="BinCode" type="BinCodeType" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="BinType" type="BinTypeEnum" use="required" />
    <xs:attribute name="NullBin" type="xs:string" use="required" />
    <xs:attribute name="MapType" type="MapTypeEnum" use="optional" />
  </xs:complexType>
  <xs:complexType name="BinCodeType">
    <xs:simpleContent>
      <xs:extension base="BinCodeContentType">
        <xs:attribute name="X" type="xs:integer" use="optional" />
        <xs:attribute name="Y" type="xs:integer" use="optional" />
        <xs:attribute name="Number" type="xs:integer" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="BinDefinitionsType">
    <xs:sequence>
      <xs:element name="BinDefinition" type="BinDefinitionType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="BinDefinitionType">
    <xs:attribute name="BinCode" type="xs:string" use="required" />
    <xs:attribute name="BinCount" type="xs:nonNegativeInteger" use="optional" />
    <xs:attribute name="BinQuality" type="xs:string" use="optional" default="" />
    <xs:attribute name="BinDescription" type="xs:string" use="optional" default="" />
    <xs:attribute name="Pick" type="CustomBoolean" use="optional" default="false" />
  </xs:complexType>
  <xs:complexType name="DeviceIdMapType">
    <xs:sequence>
      <xs:element name="Id" type="DeviceIdType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DeviceIdType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="X" type="xs:integer" />
        <xs:attribute name="Y" type="xs:integer" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="TransferMapType">
    <xs:sequence>
      <xs:element name="T" type="TransferType" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="FromSubstrateType" type="SubstrateTypeEnum" use="required" />
    <xs:attribute name="FromSubstrateId" type="MaterialIdType" use="required" />
    <xs:attribute name="FromSubstrateLayoutSpecifier" type="xs:string" use="required" />
  </xs:complexType>
  <xs:complexType name="TransferType">
    <xs:attribute name="FX" type="xs:integer" use="required" />
    <xs:attribute name="FY" type="xs:integer" use="required" />
    <xs:attribute name="TX" type="xs:integer" use="required" />
    <xs:attribute name="TY" type="xs:integer" use="required" />
  </xs:complexType>
  <xs:complexType name="DeviceDataMapType">
    <xs:sequence>
      <xs:element name="Parameter" type="ParameterType" minOccurs="1" maxOccurs="unbounded" />
      <!--CMF: 'DeviceData' can be abbreviated as 'D'-->
      <xs:choice minOccurs="1" maxOccurs="unbounded">
        <xs:element name="DeviceData" type="DeviceDataType" minOccurs="1" />
        <xs:element name="D" type="DeviceDataType" minOccurs="1" />
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ParameterType">
    <xs:attribute name="Name" type="xs:string" />
    <xs:attribute name="Description" type="xs:string" use="optional" />
    <!--CMF: ParameterType can have any defined attribute. Since processContents=lax, no validation will be applied to this attribute-->
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>
  <xs:simpleType name="NoValueReasonEnumType" final="#all">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ValueNotAvailable"/>
      <xs:enumeration value="NoSuchSource"/>
      <xs:enumeration value="NoSuchParameter"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="NoValueType">
  <xs:sequence>
    <xs:element name="Description" type="xs:string" nillable="false"/>
  </xs:sequence>
  <xs:attribute name="reasonCode" type="NoValueReasonEnumType" use="required"/>
  </xs:complexType>
  <xs:group name="PVType">
      <xs:choice>
        <xs:element name="F8" type="xs:double" block="#all" nillable="true"/>
        <xs:element name="F4" type="xs:float" block="#all" nillable="true"/>
        <xs:element name="I8" type="xs:long" block="#all" nillable="true"/>
        <xs:element name="I4" type="xs:int" block="#all" nillable="true"/>
        <xs:element name="I2" type="xs:short" block="#all" nillable="true"/>
        <xs:element name="I1" type="xs:byte" block="#all" nillable="true"/>
        <xs:element name="S" type="xs:string" block="#all" nillable="true"/>
        <xs:element name="D" type="xs:dateTime" block="#all" nillable="true"/>
        <xs:element name="B" type="CustomBoolean" block="#all" nillable="true"/>
        <xs:element name="URI" type="xs:anyURI" block="#all" nillable="true"/>
        <xs:element name="B64" type="xs:base64Binary" block="#all" nillable="true"/>
        <xs:element name="EI" type="xs:int" block="#all" nillable="true"/>
        <xs:element name="ES" type="xs:string" block="#all" nillable="true"/>
        <xs:element name="Su" type="StructureValueType" nillable="true"/>
        <xs:element name="Arr" type="ArrayValueType" nillable="true"/>
        <xs:element name="NoValue" type="NoValueType" nillable="false"/>
      </xs:choice>
  </xs:group>
  <xs:complexType name="PVSetType">
    <xs:group ref="PVType" minOccurs="0" maxOccurs="unbounded"/>
  </xs:complexType>
  <xs:complexType name="ArrayValueType">
        <xs:complexContent>
            <xs:restriction base="PVSetType">
                <xs:group ref="PVType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="StructureValueType">
        <xs:complexContent>
            <xs:restriction base="PVSetType">
                <xs:group ref="PVType" minOccurs="1" maxOccurs="unbounded"/>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>
  <xs:element name="PVSet" type="PVSetType"/>
  <xs:complexType name="DeviceDataType">
    <xs:sequence>
      <xs:element ref="PVSet" minOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="X" type="xs:integer" />
    <xs:attribute name="Y" type="xs:integer" />
  </xs:complexType>
  <xs:complexType name="LogicalCoordinatesType">
    <xs:attribute name="X" type="xs:integer" use="required" />
    <xs:attribute name="Y" type="xs:integer" use="required" />
  </xs:complexType>
  <xs:complexType name="PhysicalCoordinatesType">
    <xs:attribute name="X" type="xs:double" use="required" />
    <xs:attribute name="Y" type="xs:double" use="required" />
    <xs:attribute name="Units" type="xs:string" use="optional" />
  </xs:complexType>
  <xs:complexType name="ZDimensionsType">
    <xs:attribute name="Order" type="xs:integer" use="optional" default="0" />
    <xs:attribute name="Height" type="xs:double" use="optional" default="0" />
    <xs:attribute name="Units" type="xs:string" use="optional" />
  </xs:complexType>
  <!-- Simple Types -->
  <xs:simpleType name="LotIdType">
    <xs:restriction base="xs:string">
      <xs:maxLength value="80" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="MaterialIdType">
    <xs:restriction base="xs:string">
      <xs:maxLength value="32" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="BinCodeContentType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OrientationType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0" />
      <xs:maxInclusive value="359" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="BinTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Ascii" />
      <xs:enumeration value="Decimal" />
      <xs:enumeration value="HexaDecimal" />
      <xs:enumeration value="Integer2" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SubstrateSideEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="TopSide" />
      <xs:enumeration value="BottomSide" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OriginLocationEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="LowerLeft" />
      <xs:enumeration value="UpperLeft" />
      <xs:enumeration value="LowerRight" />
      <xs:enumeration value="UpperRight" />
      <xs:enumeration value="Center" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="AxisDirectionEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="UpRight" />
      <xs:enumeration value="DownRight" />
      <xs:enumeration value="UpLeft" />
      <xs:enumeration value="DownLeft" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SubstrateTypeEnum">
    <!--CMF: SubstrateType can be written with uppercase letters or be capitalized-->
    <xs:restriction base="xs:string">
      <xs:enumeration value="Wafer" />
      <xs:enumeration value="Frame" />
      <xs:enumeration value="Strip" />
      <xs:enumeration value="Tray" />
      <xs:enumeration value="WAFER" />
      <xs:enumeration value="FRAME" />
      <xs:enumeration value="STRIP" />
      <xs:enumeration value="TRAY" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="MapTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="2DArray" />
      <xs:enumeration value="Row/Column" />
      <xs:enumeration value="Array" />
      <xs:enumeration value="Coordinate" />
    </xs:restriction>
  </xs:simpleType>
  <!--CMF: Custom Boolean Type-->
  <xs:simpleType name="CustomBoolean">
    <xs:restriction base="xs:string">
      <xs:enumeration value="True"/>
      <xs:enumeration value="False"/>
      <xs:enumeration value="true"/>
      <xs:enumeration value="false"/>
      <xs:enumeration value="1"/>
      <xs:enumeration value="0"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>