<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by Haytham Salah (Mentor Graphics) -->
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Mark Noll (Synopsys) -->
<!-- edited with XMLSpy v2006 sp2 U (http://www.altova.com) by Michael Brouhard (Mentor Graphics) -->
<!--
// Description : subInstances.xsd
// Author : SPIRIT Schema Working Group
// Version:     $Revision: 401 $
// Date:        $Date: 2006-07-07 07:21:09 -0600 (Fri, 07 Jul 2006) $
// Tag:         $Name$
//
// Copyright (c) 2005 SPIRIT.  All rights reserved.
// www.spiritconsortium.com
//
// THIS WORK FORMS PART OF A SPIRIT CONSORTIUM SPECIFICATION.
// THIS WORK CONTAINS TRADE SECRETS AND PROPRIETARY INFORMATION
// WHICH IS THE EXCLUSIVE PROPERTY OF INDIVIDUAL MEMBERS OF THE
// SPIRIT CONSORTIUM. USE OF THESE MATERIALS ARE GOVERNED BY
// THE LEGAL TERMS AND CONDITIONS OUTLINED IN THE SPIRIT
// SPECIFICATION DISCLAIMER AVAILABLE FROM
// www.spiritconsortium.org
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4" targetNamespace="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4" elementFormDefault="qualified" attributeFormDefault="qualified">
	<xs:include schemaLocation="commonStructures.xsd"/>
	<xs:include schemaLocation="identifier.xsd"/>
	<xs:include schemaLocation="autoConfigure.xsd"/>
	<xs:element name="configuration">
		<xs:annotation>
			<xs:documentation>All configuration information for a contained component or channel instance.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="spirit:configurableElement" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="configurableElement">
		<xs:annotation>
			<xs:documentation>Describes the content of a configurable element.

The required referenceId attribute refers to the ID attribute of the configurable element.</xs:documentation>
		</xs:annotation>
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element name="configurableElementValue" type="xs:string"/>
			</xs:sequence>
			<xs:attribute name="referenceId" type="xs:Name" use="required"/>
			<xs:attributeGroup ref="spirit:autoConfig"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="instanceName" type="xs:Name">
		<xs:annotation>
			<xs:documentation>An instance name assigned to subcomponent instances and contained channels, that is unique within the parent component.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="componentInstance">
		<xs:annotation>
			<xs:documentation>Component instance element.  The instance name is contained in the unique-value instanceName attribute.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="spirit:instanceName"/>
				<xs:element name="componentRef" type="spirit:libraryRefType">
					<xs:annotation>
						<xs:documentation>References a component to be found in an external library.  The name attribute gives the name of the component and the version attribute speicifies which version of the component to use.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element ref="spirit:configuration" minOccurs="0"/>
  			<xs:element name="description" type="xs:string" minOccurs="0">
	  			<xs:annotation>
		  			<xs:documentation>string for describing this component instance to users</xs:documentation>
			  	</xs:annotation>
			  </xs:element>			
				<xs:element ref="spirit:vendorExtensions" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="componentInstances">
		<xs:annotation>
			<xs:documentation>Sub instances of internal components.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="spirit:componentInstance" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="adHocConnection">
		<xs:annotation>
			<xs:documentation>Represents an ad-hoc connection between component pins.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="export" default="false" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Specifies whether this ad-hoc connection will be exported out of the design.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:simpleContent>
							<xs:extension base="xs:boolean">
								<xs:attributeGroup ref="spirit:bool.prompt.att"/>
							</xs:extension>
						</xs:simpleContent>
					</xs:complexType>
				</xs:element>
				<xs:element name="portReference" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="componentRef" type="xs:Name" use="required"/>
						<xs:attribute name="portRef" type="xs:Name" use="required"/>
						<xs:attribute name="left" type="xs:nonNegativeInteger"/>
						<xs:attribute name="right" type="xs:nonNegativeInteger"/>
					</xs:complexType>
				</xs:element>
  			<xs:element name="description" type="xs:string" minOccurs="0">
	  			<xs:annotation>
		  			<xs:documentation>String for describing this ad-hoc connection to users</xs:documentation>
			  	</xs:annotation>
			  </xs:element>			
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="adHocConnections">
		<xs:annotation>
			<xs:documentation>Defines the set of ad-hoc connections in a design. An ad-hoc connection represents a connection between two component pins which were not connected as a result of interface connections (i.e.the pin to pin connection was made explicitly and is represented explicitly).</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="spirit:adHocConnection" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="interconnection">
		<xs:annotation>
			<xs:documentation>Describes a connection from the interface of one component to the interface of another component through its attributes.

 The componentRef and busInterfaceRef attributes indicate the instance name and bus interface name of one end of the connection.

The interconnection element connects two active interfaces and doesn't connect monitor interfaces. </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="name" minOccurs="0">
					<xs:annotation>
						<xs:documentation>name of the connection</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="activeInterface" type="spirit:interface"/>
				<xs:element name="activeInterface" type="spirit:interface"/>
  			<xs:element name="description" type="xs:string" minOccurs="0">
	  			<xs:annotation>
		  			<xs:documentation>String for describing this interconnection to users</xs:documentation>
			  	</xs:annotation>
			  </xs:element>			
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="interconnections">
		<xs:annotation>
			<xs:documentation>Connections between internal sub components.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="spirit:interconnection" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element ref="spirit:monitorInterconnection" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="interface">
		<xs:annotation>
			<xs:documentation>A representation of a component/bus interface relation; i.e. a bus interface belonging to a certain component.</xs:documentation>
		</xs:annotation>
		<xs:attribute name="componentRef" type="xs:Name" use="required"/>
		<xs:attribute name="busRef" type="xs:Name" use="required"/>
	</xs:complexType>
	<xs:element name="monitorInterconnection">
		<xs:annotation>
			<xs:documentation>Describes a connection from the interface of one component to any number of monitor interfaces in the design through its child elements' attributes.

The componentRef and busInterfaceRef attributes of each child interface element indicate the instance name and bus interface name of one end of the connection.   

An active interface can be connected to unlimited number of monitor interfaces.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="name" minOccurs="0">
					<xs:annotation>
						<xs:documentation>name of the connection</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="activeInterface" type="spirit:interface"/>
				<xs:element name="monitorInterface" type="spirit:interface" maxOccurs="unbounded"/>
  			<xs:element name="description" type="xs:string" minOccurs="0">
	  			<xs:annotation>
		  			<xs:documentation>String for describing this monitor interconnection to users</xs:documentation>
			  	</xs:annotation>
			  </xs:element>			
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>
