CM SEMI E142 Schema#
The SEMI E142 Standard was customized in Critical Manufacturing MES to allow more xml substrate maps and better accommodate the needs of our customers.
This page summarizes the main values supported by the Critical Manufacturing SEMI E142 schema. These values are used when importing Substrate Map xml files and define how the substrate, map orientation, coordinate system, and Overlay content are interpreted.
Supported Values#
The following attributes that can be defined in the SubstrateMap element are supported by the Critical Manufacturing SEMI E142 schema. If the uploaded xml file does not define these attributes, the default values will be applied.
| Attribute | Allowed values | Default value |
|---|---|---|
SubstrateSide | TopSide, BottomSide | TopSide |
Orientation | 0, 90, 180, and 270 | 0 |
OriginLocation | LowerLeft, LowerRight, UpperLeft, UpperRight, Center | LowerLeft |
AxisDirection | UpRight, DownRight, UpLeft, DownLeft | UpRight |
Table: Supported Substrate Map attributes
Substrate Types#
The following SubstrateType values are supported and aligned with SEMI E142-0225:
WaferFrameStripTrayTNRPanelPCB
Info
The SubstrateType can be written with uppercase letters or be capitalized.
Overlay Types#
The following Overlay types are supported and aligned with SEMI E142-0225:
BinCodeMapDeviceDataMapDeviceIdMapTransferMap
Note
The supported SubstrateType and Overlay type values correspond to the Cmf.Navigo.BusinessObjects.SubstrateType and Cmf.Navigo.BusinessObjects.E142MapOverlayType enum values.
Info
For more information on how Overlay types are displayed in the Substrate Map page, see Substrate Map Page.
Schemas#
This section provides the XSD for the main SEMI E142 schema and for the supplementary User Managed Properties schema.
SEMI E142#
What follows is the customized XSD of the SEMI E142 format:
<?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:include schemaLocation="CMF-E142-2-User-Managed-Properties-Schema.xsd"/>
<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:keyref name="ChildLayoutRef" refer="LayoutKey">
<xs:selector xpath="Layouts/Layout/ChildLayouts/ChildLayout" />
<xs:field xpath="@LayoutId" />
</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:attributeGroup ref="OverlayUserManagedProperties"/>
</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="LID" type="xs:string" 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" minOccurs="0" 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:attribute name="LID" type="xs:string" use="optional" />
</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" />
<!-- CMF: Make FromSubstrateLayoutSpecifier optional and add FromLayoutSpecifier attribute -->
<xs:attribute name="FromSubstrateLayoutSpecifier" type="xs:string" use="optional" />
<xs:attribute name="FromLayoutSpecifier" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="TransferType">
<xs:attribute name="FX" type="xs:integer" use="optional" />
<xs:attribute name="FY" type="xs:integer" use="optional" />
<xs:attribute name="TX" type="xs:integer" use="optional" />
<xs:attribute name="TY" type="xs:integer" use="optional" />
<xs:attribute name="FID" type="xs:string" use="optional" />
<xs:attribute name="TID" type="xs:string" use="optional" />
</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:attribute name="LID" type="xs:string" use="optional" />
</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">
<!--CMF: BinType can be written with uppercase letters or be capitalized-->
<xs:restriction base="xs:string">
<xs:enumeration value="Ascii" />
<xs:enumeration value="Decimal" />
<xs:enumeration value="HexaDecimal" />
<xs:enumeration value="Integer2" />
<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:enumeration value="TNR" />
<xs:enumeration value="tnr" />
<xs:enumeration value="TnR" />
<xs:enumeration value="Panel" />
<xs:enumeration value="PANEL" />
<xs:enumeration value="pcb" />
<xs:enumeration value="PCB" />
</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>
User-Managed Properties#
You can also setup the custom attribute schema for the OverlayUserManagedProperties attribute group. This schema is used on the Overlay element to add the user-managed contextual properties (such as Enterprise, Site, Facility, etc.) alongside the map data.
What follows is the customized XSD of the Overlay User-Managed Properties schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attributeGroup name="OverlayUserManagedProperties">
<xs:attribute name="CreationDate" type="xs:string" use="optional" default=""/>
<xs:attribute name="Enterprise" type="xs:string" use="optional" default=""/>
<xs:attribute name="Site" type="xs:string" use="optional" default=""/>
<xs:attribute name="Facility" type="xs:string" use="optional" default=""/>
<xs:attribute name="Step" type="xs:string" use="optional" default=""/>
<xs:attribute name="Resource" type="xs:string" use="optional" default=""/>
<xs:attribute name="Class" type="xs:string" use="optional" default=""/>
<xs:attribute name="State" type="OverlayStateEnumType" use="optional"/>
</xs:attributeGroup>
<xs:simpleType name="OverlayStateEnumType">
<xs:restriction base="xs:string">
<xs:enumeration value="Active"/>
<xs:enumeration value="Inactive"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>