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


(C) COPYRIGHT, Cadence Design Systems, Inc. 2013
All Rights Reserved
Licensed Materials - PropertyA 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"
    targetNamespace="http://www.cadence.com/xsd/dictionary"
    xmlns:l="http://www.cadence.com/xsd/dictionary"
    elementFormDefault="qualified"
    >

  <xs:include schemaLocation="common.xsd"/>
  <xs:include schemaLocation="dictionaryCommon.xsd"/>
  
  <xs:annotation>
    <xs:documentation xml:lang="en">
      Cadence Allegro Constraint Manager property dictionary schema.
      Copyright 2011 Cadence Design Systems LLC All rights reserved.
    </xs:documentation>
  </xs:annotation>

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="l:AttrIdAvailableList" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="l:attribute" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="l:bundle" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="Version" type="l:VersionPattern" use="optional"/>
    </xs:complexType>
    <xs:key name="AttributeNameKey">
      <xs:selector xpath="l:attribute"/>
      <xs:field xpath="@Name"/>
    </xs:key>
    <xs:key name="BundleNameKey">
      <xs:selector xpath="l:bundle"/>
      <xs:field xpath="@Name"/>
    </xs:key>
    <xs:keyref name="AttributeRef" refer="l:AttributeNameKey">
      <xs:selector xpath="l:attribute/*/l:r"/>
      <xs:field xpath="."/>
    </xs:keyref>
    <xs:keyref name="MasterRef" refer="l:AttributeNameKey">
      <xs:selector xpath="l:attribute"/>
      <xs:field xpath="@Master"/>
    </xs:keyref>
  </xs:element>

  <xs:element name="AttrIdAvailableList">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="release" minOccurs="1" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="obsoleteList" minOccurs="0" maxOccurs="1"/>
              <xs:element name="reservedList" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
            <xs:attribute name="Version" type="l:VersionPattern" use ="required"/>
          </xs:complexType>         
        </xs:element>
      </xs:sequence>
    </xs:complexType>    
  </xs:element>
  
  <xs:element name="attribute">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="l:value"/>
        <xs:element ref="l:objects" minOccurs="0"/>
        <xs:element ref="l:analysis" minOccurs="0"/>
        <xs:element name="relatedProperties" type="l:ReferencesTp" minOccurs="0">
          <xs:annotation>
            <xs:documentation> properties related to the attribute. Typically only specified if the attribute is a constraint</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="restriction" minOccurs="0" maxOccurs="1">
          <xs:annotation>
            <xs:documentation>restrictions relative to other properties</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:complexContent>
              <xs:extension base="l:ReferencesTp">
                <xs:attribute name="Type" type="l:RestrictionTypeEnum" use="required"/>
              </xs:extension>
            </xs:complexContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="relatedAnalyses" type="l:ReferencesTp" minOccurs="0">
          <xs:annotation>
            <xs:documentation>constraints which share the same analysis results. i.e validating one constraint calculates the results for the other(s)</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element ref="l:aliases" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Allows one to define aliases for the attribute name</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="domains" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="d"  minOccurs="1" maxOccurs="unbounded" type="l:DomainEnum"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="l:tiering" minOccurs="0">
        </xs:element>

        <xs:element name="allegro" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="cns" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                  <xs:attribute name="Id">
                    <xs:annotation>
                      <xs:documentation>ALLEGRO CNS ID</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:decimal">
                        <xs:minInclusive value="-1"/>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:attribute>
                </xs:complexType>
              </xs:element>
              <xs:element name="atrMask" minOccurs="0"> 
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="m" minOccurs="0" maxOccurs="unbounded" type="l:AtrAllegroMaskEnum"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="l:allegro_objects" minOccurs="0"/>
            </xs:sequence>
            <xs:attribute name="Id" use="required">
              <xs:annotation>
                <xs:documentation>ALLEGRO defined attribute ID</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:union>
                  <xs:simpleType>
                    <xs:restriction base="xs:decimal">
                      <xs:minInclusive value="0"/>
                    </xs:restriction>
                  </xs:simpleType>
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="AutoAssign"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:union>
              </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="AtrPropertyType" type="l:AtrAllegroTypeEnum" use="required">
              <xs:annotation>
                <xs:documentation>ALLEGRO Property Type</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="Daemon" type="xs:string" use="optional">
              <xs:annotation>
                <xs:documentation>ALLEGRO daemon</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="VerifyDaemon" type="xs:string" use="optional">
              <xs:annotation>
                <xs:documentation>ALLEGRO verify daemon</xs:documentation>
              </xs:annotation>
            </xs:attribute>
          </xs:complexType>

        </xs:element>
      </xs:sequence>
      <xs:attribute name="Name" type="l:PropertyNamePattern" use="required">
        <xs:annotation>
          <xs:documentation>Attribute Name (&lt;= 64 characters)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="Description" type="xs:string" use="optional">
        <xs:annotation>
          <xs:documentation>Free form attribute description text (&lt;= 255 characters). Used for simple help</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="extDesc" type="xs:string" use="optional">
        <xs:annotation>
          <xs:documentation>Free form attribute extended description text (&lt;= 255 characters). Used for simple help</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="Version" type="l:VersionPattern" use="optional">
        <xs:annotation>
          <xs:documentation>software version in which the attribute first appeared</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="DisplayName" type="xs:string" use="optional">
        <xs:annotation>
          <xs:documentation>Default display name when presenting attribute to the user</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="Master" type="xs:string" use="optional">
        <xs:annotation>
          <xs:documentation>Master property in 'horizontal inheritance', i.e. if this property is not set, master's value should be returned</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="aliases">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="a" type="l:PropertyNamePattern" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:complexType name="BundleValueTp">
    <xs:attribute name="Type" type="l:ValueTypeEnum"/>
    <xs:attribute name="Category" type="l:CategoryEnum"/>
  </xs:complexType>
  <xs:element name="value">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="l:BundleValueTp">
          <xs:sequence>
            <xs:element name="data" minOccurs="0">
              <xs:annotation>
                <xs:documentation>The data type for the attribute</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="e" type="xs:string" minOccurs="0" maxOccurs="50"/>
                </xs:sequence>
                <xs:attribute name="Type" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="Special">
                        <xs:annotation>
                          <xs:documentation>Type unique for the particular attribute - this value means, that the type is defined by the dictionary index</xs:documentation>
                        </xs:annotation>
                      </xs:enumeration>
                      <xs:enumeration value="Scalar"/>
                      <xs:enumeration value="Array"/>
                      <xs:enumeration value="Layer"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="Storage" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="Bool"/>
                      <xs:enumeration value="Integer"/>
                      <xs:enumeration value="LayerIndex"/>
                      <xs:enumeration value="Enum"/>
                      <xs:enumeration value="Double"/>
                      <xs:enumeration value="DoubleWUnits"/>
                      <xs:enumeration value="DblWUnitsOrEnum"/>
                      <xs:enumeration value="DblWUnitsAsString">
                        <xs:annotation>
                          <xs:documentation>Preserves the original input string as is (i.e. '5v' won't become '5 V'). Also allows giberish to be entered (e.g. '---') - used for Voltage so far...</xs:documentation>
                        </xs:annotation>
                      </xs:enumeration>
                      <xs:enumeration value="String"/>
                      <xs:enumeration value="EnumOrString"/>
                      <xs:enumeration value="LayerIndexPairs"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
            <xs:element name="units" minOccurs="0">
              <xs:annotation>
                <xs:documentation>The units of measurement for the attribute</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:attribute name="Type" type="l:UnitEnum" use="required"/>
                <xs:attribute name="Name" type="l:UnitNameEnum" use="optional"/>
                <xs:attribute name="Dimension" type="xs:integer"/>
              </xs:complexType>
            </xs:element>
            <xs:element name="range" minOccurs="0">
              <xs:annotation>
                <xs:documentation>The minimum and/or maximum allowable values for the attribute, expressed in the units of measurement</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:attribute name="Min" type="xs:decimal"/>
                <xs:attribute name="Max" type="xs:decimal"/>
              </xs:complexType>
            </xs:element>
            <xs:element name="flags" type="l:FlagListTp" minOccurs="0" maxOccurs="1"/>
          </xs:sequence>
          <xs:attribute name="Kind" type="l:AttrKindEnum" use="optional"/>
          <xs:attribute name="Delimiter" use="optional">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:length fixed="1" value="1"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="MaxLength" type="xs:string" use="optional">
            <xs:annotation>
              <xs:documentation>Maximum length for string-based attributes</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="Format" type="xs:string" use="optional">
            <xs:annotation>
              <xs:documentation>The regular expression to be used for the input validator</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="LegalExpression" type="xs:string" use="optional">
            <xs:annotation>
              <xs:documentation>Regular expression describing legal format for string-based attributes</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="analysis">
    <xs:complexType>
      <xs:annotation>
        <xs:documentation>Analysis related information</xs:documentation>
      </xs:annotation>
      <xs:sequence>
        <xs:element name="flags" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="s" type="l:AnalysisFlagEnum" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="Reason" type="xs:string" use="optional">
        <xs:annotation>
          <xs:documentation>
            Actual's pass or fail reason. If checker doesn't return an actual, the reason is used to populate _VSTATUS and the status is set to pass (green) or fail (red).
          </xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="MeasureName" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="objects">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="valid" type="l:ObjectListTp" minOccurs="1" maxOccurs="1">
          <xs:annotation>
            <xs:documentation>The type of objects the attribute can be defined for. NOTE: order in which supported csets are listed is important!!! Attribute will be looked for exactly in that order</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="inheritedValid" type="l:ObjectListTp" minOccurs="0" maxOccurs="1">
          <xs:annotation>
            <xs:documentation>The type of objects the attribute can be defined for. NOTE: order in which supported csets are listed is important!!! Attribute will be looked for exactly in that order</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="readOnly" type="l:ObjectListTp" minOccurs="0" maxOccurs="1">
          <xs:annotation>
            <xs:documentation>The type of objects which will always be read-only for this attribute. NOTE: If object is read-only for all objects, use ReadOnly status.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="inheritOnly" type="l:ObjectListTp" minOccurs="0" maxOccurs="1">
          <xs:annotation>
            <xs:documentation>The type of objects which will never have the attribute directly set.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="noPackage" type="l:ObjectListTp" minOccurs="0" maxOccurs="1"/>
        <xs:element name="noPackageNoFlow" type="l:ObjectListTp" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="l:noInherit" minOccurs="0" maxOccurs="3"/>
        <xs:element name="parent" type="l:ObjectListTp" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="allegro_objects">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="allegroOnly" type="l:ObjectListTp" minOccurs="0" maxOccurs="1"/>
        <xs:element name="excludeFromAllegro" type="l:ObjectListTp" minOccurs="0" maxOccurs="1"/>
        <xs:element name="inheritedValid" type="l:ObjectListTp" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="bundle">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="value" type="l:BundleValueTp" minOccurs="0" maxOccurs="1"/>
        <xs:element name="relatedProperties" type="l:ReferencesTp" minOccurs="1" maxOccurs="1"/>
        <xs:element ref="l:aliases" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="Name" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Bundle name (&lt;= 64 characters)</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="ReferencesTp">
    <xs:sequence>
      <xs:element name="r" minOccurs="0" maxOccurs="unbounded" type="l:PropertyNamePattern"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="noInherit">
    <xs:complexType>
      <xs:annotation>
        <xs:documentation>Allows one to turn-off attribute inheritance between specific "associations" of the valid objects. If the 'NoInherit' status is not set, an attribute is valid for the entire hierarchy of objects (Xnet->Net->PinPair). The noInherit term allows one to specifically turn-off a specific inheritance (eg Net PinPair)</xs:documentation>
      </xs:annotation>
      <xs:sequence>
        <xs:element name="pair" minOccurs="1" maxOccurs="5">
          <xs:complexType>
            <xs:attribute name="Kind1" use="required" type="l:ObjKindEnum"/>
            <xs:attribute name="Kind2" use="required" type="l:ObjKindEnum"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="AttrKindEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="REDS_NULL_ATTR_KIND"/>
      <xs:enumeration value="Actual">
        <xs:annotation>
          <xs:documentation>Attribute represents an actual value for a specific domain (e.g. actualStubLength).</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DerivedData">
        <xs:annotation>
          <xs:documentation>Attribute is not an attribute in the Allegro database: it is native data.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="MinConstraint">
        <xs:annotation>
          <xs:documentation>Use compare function which treats constraint as a minimum requirement for the object</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="MaxConstraint">
        <xs:annotation>
          <xs:documentation>Use compare function which treats constraint as a maximum requirement for the object</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="PassFailConstraint">
        <xs:annotation>
          <xs:documentation>Constraint is used to turn the check on or off.  The actual values indicate pass or fail.  No comparison is needed.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Property">
        <xs:annotation>
          <xs:documentation>Attribute is a property</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Constraint">
        <xs:annotation>
          <xs:documentation>Attribute is a constraint.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Result">
        <xs:annotation>
          <xs:documentation>Attribute is a calculated result.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="TargetOneTolerance">
        <xs:annotation>
          <xs:documentation>(also sTarget, sTargetOneTolerance) Use compare function that treats constraint as a target value requirement for the object within a related +/- tolerance.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="TargetTwoTolerances">
        <xs:annotation>
          <xs:documentation>Use compare function that treats constraint as a target value requirement for the object within related positive and negative tolerances.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="TolConstraint">
        <xs:annotation>
          <xs:documentation>Use compare function that treats constraint as a tolerance value applied to a group of objects.  The actual values for each of the members of the group must be within the tolerance of each other.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="VStatus">
        <xs:annotation>
          <xs:documentation>Attribute represents the verification status of the constraint.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Bundle">
        <xs:annotation>
          <xs:documentation>Attribute represents a bundle.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="ConstraintSetRef">
        <xs:annotation>
          <xs:documentation>Attribute is a constraint set.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="PinDelay">
        <xs:annotation>
          <xs:documentation>Attribute is a pin delay.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="AnalysisFlagEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="DRCVerify">
        <xs:annotation>
          <xs:documentation>DRC type constraint/actual</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="SimVerify">
        <xs:annotation>
          <xs:documentation>Simulation type constraint/actual</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="XtalkVerify">
        <xs:annotation>
          <xs:documentation>Xtalk type constraint/actual</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="CustomMeasure">
        <xs:annotation>
          <xs:documentation>custom measurement actual</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DiffPairVerify">
        <xs:annotation>
          <xs:documentation>Diff Pair type constraint</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="ECSetMappingVerify">
        <xs:annotation>
          <xs:documentation>constraints used to indicate ecset mapping results</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DefaultToPass">
        <xs:annotation>
          <xs:documentation>constraints pass by default</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="VerifyOnChange">
        <xs:annotation>
          <xs:documentation>Actuals must be redone on constraint change.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="CnsForAnalysis">
        <xs:annotation>
          <xs:documentation>Actuals can not be computed unless constraint exists.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="FullyRouted">
        <xs:annotation>
          <xs:documentation>Attribute can only be analyzed if fully routed.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="CMAnalysisMode">
        <xs:annotation>
          <xs:documentation>
            Attribute is a Custom Measurement Analysis Mode
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DelayRelated">
        <xs:annotation>
          <xs:documentation>Attribute may use PIN_DELAY info in the calculatons.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DefaultToPass">
        <xs:annotation>
          <xs:documentation>If measurement returns no results, default to success/pass.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>        
      <xs:enumeration value="ScheduleVerify"/>
      <xs:enumeration value="CheckVMode"/>
      <xs:enumeration value="UpdateDelay"/>
      <xs:enumeration value="RelPropDelayVerify"/>
      <xs:enumeration value="NegTolerance"/>
      <xs:enumeration value="Tolerance"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ValueTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Default">
        <xs:annotation>
          <xs:documentation>single value. Used in conjunction with the DataType.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Percentage">
        <xs:annotation>
          <xs:documentation>single numerical input for specifying a percentage.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Threshold">
        <xs:annotation>
          <xs:documentation>High and Low values.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Edge">
        <xs:annotation>
          <xs:documentation>Rising and Falling values.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Range">
        <xs:annotation>
          <xs:documentation>Minimum and Maximum values.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Layer">
        <xs:annotation>
          <xs:documentation>Layer specific values.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DiffPairLayer">
        <xs:annotation>
          <xs:documentation>Layer specific differential pair values.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="CT">
        <xs:annotation>
          <xs:documentation>Constraint Templates references.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="TT">
        <xs:annotation>
          <xs:documentation>Topology Templates references.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="LayerNames">
        <xs:annotation>
          <xs:documentation>Layer names.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Matrix">
        <xs:annotation>
          <xs:documentation>Matrix of values. Currently only supports a 2x4 configuration.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Enum">
        <xs:annotation>
          <xs:documentation>Enums.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DeltaTol">
        <xs:annotation>
          <xs:documentation>Delta and Tolerance values.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="RelSkew">
        <xs:annotation>
          <xs:documentation>Rise, Fall (delta) and Tolerance values.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DiffPair">
        <xs:annotation>
          <xs:documentation>Differential pair values, with access to the DiffPair calculator.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="EditOrPickFromList">
        <xs:annotation>
          <xs:documentation>Value may be entered or picked up from a list.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="LayerSets">
        <xs:annotation>
          <xs:documentation>Layer Sets need to be differentiated to use Allegro or own dlg.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="WebLink">
        <xs:annotation>
          <xs:documentation>Value is link to WEB need to launch web explorer.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="BitPattern">
        <xs:annotation>
          <xs:documentation>Bit pattern (introduced for Custom Stimulus).</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="ViaList">
        <xs:annotation>
          <xs:documentation>Needs to present the via list editing dialog.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="EnumOrString">
        <xs:annotation>
          <xs:documentation>value may be represented as a enum (should be translated to some defualt value) or as a single value. Use in conjunction with dEnumOrString</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="EnumOrInteger">
        <xs:annotation>
          <xs:documentation>value may be represented as a enum (should be translated to some defualt value) or as a single integer value. Use in conjunction with dEnumOrString and uInteger</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Nets">
        <xs:annotation>
          <xs:documentation>Value which is comprised of a list of Net names.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="IBDMapping">
        <xs:annotation>
          <xs:documentation>Value which created by mapping a design object to interface definition object.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="PercentOptional">
        <xs:annotation>
          <xs:documentation>Value with an optional percent.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DelayWithUnits">
        <xs:annotation>
          <xs:documentation>Delat value with units (length, time, percent).</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="PulseParam"/>
      <xs:enumeration value="EnumSpecial"/>
      <xs:enumeration value="SSDelay"/>
      <xs:enumeration value="Impedance"/>
      <xs:enumeration value="PropDelay"/>
      <xs:enumeration value="MinMaxLen"/>
      <xs:enumeration value="RelPropDelay"/>
      <xs:enumeration value="SparseLayer">
        <xs:annotation>
          <xs:documentation>Per-layer that allows blanks</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="TableCol">
        <xs:annotation>
          <xs:documentation>One column of a table, the whole table being represented by a set of attributes</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="DerivedComponents"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RestrictionTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="MatchOneOf"/>
      <xs:enumeration value="MinConstraintOrZero"/>
      <xs:enumeration value="MaxConstraintOrZero"/>
      <xs:enumeration value="DiffPairPlusVerify"/>
      <xs:enumeration value="DiffPairMinusVerify"/>
      <xs:enumeration value="MinConstraint"/>
      <xs:enumeration value="MaxConstraint"/>
      <xs:enumeration value="BreakoutImpedance"/>        
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="DomainEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="NoDomain">
        <xs:annotation>
          <xs:documentation>Attribute is domain-less and is considered always in-content, Manufacturing domain is actually ILC here.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="Electrical"/>
      <xs:enumeration value="PowerIntegrity"/>
      <xs:enumeration value="Physical"/>
      <xs:enumeration value="Spacing"/>
      <xs:enumeration value="SameNetSpacing"/>
      <xs:enumeration value="Assembly"/>
      <xs:enumeration value="ILC"/>
      <xs:enumeration value="DFF"/>
      <xs:enumeration value="DFA"/>
	  <xs:enumeration value="DFT"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name ="AtrAllegroTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="DB_DATA_TYPE_ALTITUDE"/>
      <xs:enumeration value="DB_DATA_TYPE_CAPACITANCE"/>
      <xs:enumeration value="DB_DATA_TYPE_DISTANCE"/>
      <xs:enumeration value="DB_DATA_TYPE_ELEC_CONDUCTIVITY"/>
      <xs:enumeration value="DB_DATA_TYPE_FAILURE_RATE"/>
      <xs:enumeration value="DB_DATA_TYPE_LAYER_THICKNESS"/>
      <xs:enumeration value="DB_DATA_TYPE_IMPEDANCE"/>
      <xs:enumeration value="DB_DATA_TYPE_INDUCTANCE"/>
      <xs:enumeration value="DB_DATA_TYPE_PROP_DELAY"/>
      <xs:enumeration value="DB_DATA_TYPE_RESISTANCE"/>
      <xs:enumeration value="DB_DATA_TYPE_TEMPERATURE"/>
      <xs:enumeration value="DB_DATA_TYPE_THERM_CONDUCTANCE"/>
      <xs:enumeration value="DB_DATA_TYPE_THERM_CONDUCTIVITY"/>
      <xs:enumeration value="DB_DATA_TYPE_VOLTAGE"/>
      <xs:enumeration value="DB_DATA_TYPE_VELOCITY"/>
      <xs:enumeration value="DB_DATA_TYPE_BOOLEAN"/>
      <xs:enumeration value="DB_DATA_TYPE_DESIGN_UNITS"/>
      <xs:enumeration value="DB_DATA_TYPE_INTEGER"/>
      <xs:enumeration value="DB_DATA_TYPE_REAL"/>
      <xs:enumeration value="DB_DATA_TYPE_STRING"/>
      <xs:enumeration value="DB_DATA_TYPE_NAME"/>
      <xs:enumeration value="DB_DATA_TYPE_ENUM"/>
      <xs:enumeration value="DB_DATA_TYPE_THERM_RESISTANCE"/>
      <xs:enumeration value="DB_DATA_TYPE_NOISE_VOLTAGE"/>
      <xs:enumeration value="DB_DATA_TYPE_PERCENT"/>
      <xs:enumeration value="DB_DATA_TYPE_STRING_ID"/>
      <xs:enumeration value="DB_DATA_TYPE_LAYERSET_GROUP"/>
      <xs:enumeration value="DB_DATA_TYPE_STRUCT_BUNDLE"/>
      <xs:enumeration value="DB_DATA_TYPE_DESIGN_UNITS_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_INT_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_SCLASS_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_SCLASS_INT_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_SCLASS_INDEX_VALUE_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_STRING_ID_LARGE"/>
      <xs:enumeration value="DB_DATA_TYPE_SHORT_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_SCLASS_DBREP_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_SCLASS_MILDEG_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_MILDEGREE"/>
      <xs:enumeration value="DB_DATA_TYPE_STRUCT_DIM_INST"/>
      <xs:enumeration value="DB_DATA_TYPE_DESIGN_UNITS_AREA"/>
      <xs:enumeration value="DB_DATA_TYPE_SCLASS_INDEX_ENUM_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_SCLASS_INDEX_DBREP_ARRAY"/>
      <xs:enumeration value="DB_DATA_TYPE_INTERNAL_TABLE_ID"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name ="AtrAllegroMaskEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="MAESTRO_NOTIFIED"/>
      <xs:enumeration value="DPF_DISABLED"/>
      <xs:enumeration value="XNET_BUBBLE_ALWAYS"/>
      <xs:enumeration value="XNET_BUBBLE_OPTIONAL"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="CategoryEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Bubble">
        <xs:annotation>
          <xs:documentation>Attribute will be bubbled to XNet, from a Net, if Retain ECns on Nets is not in CM Server. If Bundle is categorized, individual portions SHOULD NOT unless existing code is updated appropriately</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="PowerRailInst">
        <xs:annotation>
          <xs:documentation>Attribute is an instance attribute that can be set on the members of Power Rails.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
