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>