<?xml version="1.0" encoding="utf-8"?>
<!--
Cadence Design Systems 


(C) COPYRIGHT, Cadence Design Systems, Inc. 2013
All Rights Reserved
Licensed Materials - Property of Cadence Design Systems

No part of this file may be reproduced, stored in a retrieval system,
or transmitted in any form or by any means electronic, mechanical,
photocopying, recording, or otherwise without prior written permission
of Cadence Design Systems, Inc. 

WARRANTY:
Use all material in this file at your own risk.  Cadence Design Systems
makes no claims about any material contained in this file.
-->
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    >

  <xs:annotation>
    <xs:documentation>
      Cadence Allegro Constraint Manager property dictionary schema.
      Copyright 2012 Cadence Design Systems LLC All rights reserved.
    </xs:documentation>
  </xs:annotation>

  <xs:complexType name="ObjectListTp">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="o" type="ObjKindEnum"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ObjRefTp">
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="Kind" type="ObjKindEnum" use="required"/>
  </xs:complexType>
  <xs:complexType name="FncStListTp">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="unbounded" name="s" type="FncStEnum"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AppMask">
    <xs:sequence maxOccurs="unbounded" minOccurs="0">
      <xs:element name="v">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="PCB"/>
            <xs:enumeration value="Schematic"/>
            <xs:enumeration value="EMC"/>
            <xs:enumeration value="SiP"/>
            <xs:enumeration value="APD"/>
            <xs:enumeration value="Exploration"/>
            <xs:enumeration value="InterfaceEditor"/>
            <xs:enumeration value="TechEditor"/>
            <xs:enumeration value="CMClient"/>
            <xs:enumeration value="SymbolEditor"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="tiering">
    <xs:complexType>
      <xs:annotation>
        <xs:documentation>Licensing requirements, that need to be met in order for the attribute NOT to be disabled. If both tier and option are specified, at least one needs to be in use (e.g. &lt;tiering Tier="Base"&gt; &lt;option&gt;miniaturization&lt;/option&gt;&lt;/tiering&gt; will be DISabled ONLY if we use L (&lt; perf L) and NO Miniaturization option)</xs:documentation>
      </xs:annotation>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="option">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="GRE">
                <xs:annotation>
                  <xs:documentation>All 3 GRE options: (GreBundleView, GreBundleEdit, GreBundlePlan)</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="GreBundleView"/>
              <xs:enumeration value="GreBundleEdit"/>
              <xs:enumeration value="GreBundlePlan"/>
              <xs:enumeration value="ApdWithSiPEnabled"/>
              <xs:enumeration value="ratbundle"/>
              <xs:enumeration value="miniaturization"/>
              <xs:enumeration value="highSpeed"/>
              <xs:enumeration value="sigrity"/>
              <xs:enumeration value="dfmAdvanced"/>
              <xs:enumeration value="dfmBasic"/>
              <xs:enumeration value="PowerIntegrity"/>
              <!-- internal options (various combinations of official options) -->
              <xs:enumeration value="AllGre">
                <xs:annotation>
                  <xs:documentation>Combination of the 3 GRE options: GreBundleView, GreBundleEdit and GreBundlePlan</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="signalIntegrity">
                <xs:annotation>
                  <xs:documentation>Legacy SI functionality</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="aurora">
                <xs:annotation>
                  <xs:documentation>Next-Gen sSI functionality</xs:documentation>
                </xs:annotation>
              </xs:enumeration>              
              <!-- pseudo-options (not in official tiering) -->
              <xs:enumeration value="totalEtch">
                <xs:annotation>
                  <xs:documentation>etch length for OrCad Pro (TISimpleElecOk)</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="regions">
                <xs:annotation>
                  <xs:documentation>regions for OrCad Pro (TICnsRegionOK())</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="embedded">
                <xs:annotation>
                  <xs:documentation>embedded components support must be On (TIMsgEmbeddedOk())</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="padsSuppression">
                <xs:annotation>
                  <xs:documentation>Pads Suppression </xs:documentation>
                </xs:annotation>
              </xs:enumeration>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:choice minOccurs="0">
          <xs:element name="enabled-in-apps" type="AppMask">
            <xs:annotation>
              <xs:documentation>List of applications, where the tiering requirement would be satisfied</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="disabled-in-apps" type="AppMask">
            <xs:annotation>
              <xs:documentation>List of applications, where the tiering requirement would NOT be satisfied</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="tier" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="L"/>
            <xs:enumeration value="Base"/>
            <xs:enumeration value="XL"/>
            <xs:enumeration value="OrCad"/>
            <xs:enumeration value="MustHaveOption">
              <xs:annotation>
                <xs:documentation>matches Allegro's ATTR_VISIBLE_NEVER - when the property should be hidden by all tiers; use this tier key when ONLY a precense of an option can enable the property</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="ObjKindEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="System"/>
      <xs:enumeration value="Design"/>
      <xs:enumeration value="PartDefn"/>
      <xs:enumeration value="Part"/>
      <xs:enumeration value="GateDefn"/>
      <xs:enumeration value="Gate"/>
      <xs:enumeration value="PinDefn"/>
      <xs:enumeration value="Pin"/>
      <xs:enumeration value="Xnet"/>
      <xs:enumeration value="Net"/>
      <xs:enumeration value="Layer"/>
      <xs:enumeration value="Region"/>
      <xs:enumeration value="Room"/>
      <xs:enumeration value="ElectricalCSet"/>
      <xs:enumeration value="Group"/>
      <xs:enumeration value="DRC"/>
      <xs:enumeration value="NetClass"/>
      <xs:enumeration value="DiffPair"/>
      <xs:enumeration value="Bus"/>
      <xs:enumeration value="PinPair"/>
      <xs:enumeration value="MatchGroup"/>
      <xs:enumeration value="ResultPinPair"/>
      <xs:enumeration value="Result"/>
      <xs:enumeration value="ElecCSetMatchGroup"/>
      <xs:enumeration value="ElecCSetPinPair"/>
      <xs:enumeration value="ElecCSetPin"/>
      <xs:enumeration value="ClineSegment"/>
      <xs:enumeration value="DesignInstance"/>
      <xs:enumeration value="ElectricalDRCGroup"/>
      <xs:enumeration value="SpacingDRCGroup"/>
      <xs:enumeration value="PhysicalDRCGroup"/>
      <xs:enumeration value="DesignDRCGroup"/>
      <xs:enumeration value="IODriver"/>
      <xs:enumeration value="IOTile"/>
      <xs:enumeration value="Die"/>
      <xs:enumeration value="IOBuses"/>
      <xs:enumeration value="IODiffPairs"/>
      <xs:enumeration value="ExternalDRCGroup"/>
      <xs:enumeration value="PhysicalCSet"/>
      <xs:enumeration value="SpacingCSet"/>
      <xs:enumeration value="ClassClass"/>
      <xs:enumeration value="RegionClass"/>
      <xs:enumeration value="RegionClassClass"/>
      <xs:enumeration value="LayerSet"/>
      <xs:enumeration value="RatBundle"/>
      <xs:enumeration value="SameNetSpacingCSet"/>
      <xs:enumeration value="SameNetSpacingDRCGroup"/>
      <xs:enumeration value="FromTo"/>
      <xs:enumeration value="NetInterface"/>
      <xs:enumeration value="NetGroup"/>
      <xs:enumeration value="VoltageDefinition"/>
      <xs:enumeration value="WireProfile"/>
      <xs:enumeration value="AssemblyCSet"/>
	  <xs:enumeration value="DFTestBucket"/>
      <xs:enumeration value="ComponentClass"/>
      <xs:enumeration value="Interposer"/>
      <xs:enumeration value="Spacer"/>
      <xs:enumeration value="AssemblyDRCGroup"/>
      <xs:enumeration value="PowerIntegrityCSet"/>
      <xs:enumeration value="PowerRail"/>
      <xs:enumeration value="PICSetPowerRail"/>
      <xs:enumeration value="Alias"/>
      <xs:enumeration value="Interface"/>
      <xs:enumeration value="Via"/>
      <xs:enumeration value="SymbolDefn"/>
      <xs:enumeration value="Symbol"/>
      <xs:enumeration value="Line"/>
      <xs:enumeration value="Figure"/>
      <xs:enumeration value="Void"/>
      <xs:enumeration value="CLine"/>
      <xs:enumeration value="Stackup"/>
      <xs:enumeration value="SubClass"/>
      <xs:enumeration value="SubClassSubClass"/>
      <xs:enumeration value="Via"/>
      <xs:enumeration value="SymbolDefn"/>
      <xs:enumeration value="Symbol"/>
      <xs:enumeration value="Line"/>
      <xs:enumeration value="Figure"/>
      <xs:enumeration value="Void"/>
      <xs:enumeration value="Shape"/>
      <xs:enumeration value="ClineSegment"/>
      <xs:enumeration value="FixPin"/>
      <xs:enumeration value="Frec"/>
      <xs:enumeration value="Funcpd"/>
      <xs:enumeration value="Funcpi"/>
      <xs:enumeration value="Padstack"/>
      <xs:enumeration value="RatT"/>
      <xs:enumeration value="Rect"/>
      <xs:enumeration value="Rel"/>
      <xs:enumeration value="Stdp"/>
      <xs:enumeration value="Text"/>
      <xs:enumeration value="ModuleGroup"/>
      <xs:enumeration value="IslandDrc"/>
      <xs:enumeration value="SxnetPinList"/>
      <xs:enumeration value="ThievingGroup"/>
      <xs:enumeration value="PseudosegDrc"/>
      <xs:enumeration value="DynamicShape"/>
      <xs:enumeration value="DiffpVias"/>
      <xs:enumeration value="Tile"/>
      <xs:enumeration value="IOPadCell"/>
      <xs:enumeration value="DieStack"/>
      <xs:enumeration value="RouterPlan"/>
      <xs:enumeration value="Simulation"/>
      <xs:enumeration value="CompInterface"/>
      <xs:enumeration value="PortGroup"/>
      <xs:enumeration value="Asymclear"/>
      <xs:enumeration value="DimensionGroup"/>
      <xs:enumeration value="DatumDim"/>
      <xs:enumeration value="IbdDisp"/>
      <xs:enumeration value="TimingVis"/>
      <xs:enumeration value="AdjRKO"/>
      <xs:enumeration value="NetsRKO"/>
      <xs:enumeration value="Zone"/>
      <xs:enumeration value="Bend"/>
      <xs:enumeration value="RFNets"/>
      <xs:enumeration value="DFFOutlineCSet"/>
      <xs:enumeration value="DFFAnnularRingCSet"/>
      <xs:enumeration value="DFFSilkscreenCSet"/>
      <xs:enumeration value="DFFCopperFeatureCSet"/>
      <xs:enumeration value="DFFCopperSpacingCSet"/>
      <xs:enumeration value="DffHoleCSet"/>
      <xs:enumeration value="DFFMaskCSet"/>
      <xs:enumeration value="DFFDRCGroup"/>
      <xs:enumeration value="GenericLayer"/>
      <xs:enumeration value="DFFAnnularRingSCGroup"/>
      <xs:enumeration value="DFFMaskSCGroup"/>
      <xs:enumeration value="DFFOutlineSCGroup"/>
      <xs:enumeration value="DFFSilkscreenSCGroup"/>
      <xs:enumeration value="DbGroup"/>
      <xs:enumeration value="RKOGroup"/>
      <xs:enumeration value="DFAOutlineCSet"/>
      <xs:enumeration value="DFAPkgToPkgSpacingCSet"/>
      <xs:enumeration value="DFASpacingCSet"/>
      <xs:enumeration value="DFAPinCSet"/>
      <xs:enumeration value="DFAMaskCSet"/>
      <xs:enumeration value="DFACavityCSet"/>
      <xs:enumeration value="DFAFiducialCSet"/>
      <xs:enumeration value="DFAAnalysisCSet"/>
	  <xs:enumeration value="DFADRCGroup"/>
      <xs:enumeration value="DFAPinSCGroup"/>
      <xs:enumeration value="DFAOutlineSCGroup"/>
      <xs:enumeration value="DFAMaskSCGroup"/>
      <xs:enumeration value="DFAFiducialSCGroup"/>
      <xs:enumeration value="DFASpacingSCGroup"/>
      <xs:enumeration value="AssemblyBucket"/>
      <xs:enumeration value="Package"/>
	  <xs:enumeration value="PackageClass"/>
	  <xs:enumeration value="PackageToPackage"/>
      <xs:enumeration value="DFTOutlineCSet"/>
      <xs:enumeration value="DFTMaskCSet"/>
      <xs:enumeration value="DFTSpacingCSet"/>
      <xs:enumeration value="DFTProbeCSet"/>
      <xs:enumeration value="DFTOutlineSCGroup"/>
      <xs:enumeration value="DFTMaskSCGroup"/>
      <xs:enumeration value="DFTSpacingSCGroup"/>
      <xs:enumeration value="DFTProbeSCGroup"/>
	    <xs:enumeration value="DFTDRCGroup"/>
      <xs:enumeration value="DFFCopperSpacingAcceptableCSet"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="UnitEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="uNone"/>
      <xs:enumeration value="uTime"/>
      <xs:enumeration value="uResistance"/>
      <xs:enumeration value="uCapacitance"/>
      <xs:enumeration value="uVoltage"/>
      <xs:enumeration value="uFrequency"/>
      <xs:enumeration value="uPower"/>
      <xs:enumeration value="uCurrent"/>
      <xs:enumeration value="uInductance"/>
      <xs:enumeration value="uTemperature"/>
      <xs:enumeration value="uElectricalConductivity"/>
      <xs:enumeration value="uThermalConductivity"/>
      <xs:enumeration value="uThermalResistance"/>
      <xs:enumeration value="uVelocity"/>
      <xs:enumeration value="uDelay"/>
      <xs:enumeration value="uPercentage"/>
      <xs:enumeration value="uPhaseTol"/>
      <xs:enumeration value="uResistanceTolerance"/>
      <xs:enumeration value="uAngle"/>
      <xs:enumeration value="uFailureRate"/>
      <xs:enumeration value="uDesign"/>
      <xs:enumeration value="uLengthPercent"/>
      <xs:enumeration value="uLayerThickness"/>
      <xs:enumeration value="uDesignOrXWidth"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="UnitNameEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="in"/>
      <xs:enumeration value="mil"/>
      <xs:enumeration value="smil"/>
      <xs:enumeration value="m"/>
      <xs:enumeration value="cm"/>
      <xs:enumeration value="mm"/>
      <xs:enumeration value="um"/>
      <xs:enumeration value="nm"/>
      <xs:enumeration value="s"/>
      <xs:enumeration value="ms"/>
      <xs:enumeration value="us"/>
      <xs:enumeration value="ns"/>
      <xs:enumeration value="Ohm"/>
      <xs:enumeration value="F"/>
      <xs:enumeration value="mF"/>
      <xs:enumeration value="uF"/>
      <xs:enumeration value="nF"/>
      <xs:enumeration value="pF"/>
      <xs:enumeration value="V"/>
      <xs:enumeration value="mV"/>
      <xs:enumeration value="MHz"/>
      <xs:enumeration value="Hz"/>
      <xs:enumeration value="W"/>
      <xs:enumeration value="A"/>
      <xs:enumeration value="mW"/>
      <xs:enumeration value="mA"/>
      <xs:enumeration value="H"/>
      <xs:enumeration value="mH"/>
      <xs:enumeration value="nH"/>
      <xs:enumeration value="C"/>
      <xs:enumeration value="mho/cm"/>
      <xs:enumeration value="W/cm-degC"/>
      <xs:enumeration value="degC/W"/>
      <xs:enumeration value="fpmh"/>
      <xs:enumeration value="m/s"/>
      <xs:enumeration value="ps"/>
      <xs:enumeration value="%"/>
      <xs:enumeration value="uH"/>
      <xs:enumeration value="pH"/>
      <xs:enumeration value="mOhm"/>
      <xs:enumeration value="MegOhm"/>
      <xs:enumeration value="ft"/>
      <xs:enumeration value="deg"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="FncStEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Flattened"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="VersionPattern">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,2}\.[0-9]{1,3}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="PropertyNamePattern">
    <xs:restriction base="xs:string">
      <xs:pattern value="[-A-Z_0-9]{1,63}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bool">
    <xs:restriction base="xs:string">
      <xs:enumeration value="0">
        <xs:annotation>
          <xs:documentation>false</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>true</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
