<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<xsd:schema xmlns="http://www.springframework.net/tx"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		xmlns:objects="http://www.springframework.net"
		xmlns:tool="http://www.springframework.net/tool"
		targetNamespace="http://www.springframework.net/tx"
		elementFormDefault="qualified"
		attributeFormDefault="unqualified">

	<xsd:import namespace="http://www.springframework.net"/>
	<xsd:import namespace="http://www.springframework.net/tool"/>


	<xsd:complexType name="identifiedType" abstract="true">
		<xsd:annotation>
			<xsd:documentation>
				<![CDATA[
	The unique identifier for a object. The scope of the identifier
	is the enclosing object factory.
			]]>
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="xsd:ID">
			<xsd:annotation>
				<xsd:documentation>
					<![CDATA[
	The unique identifier for an object.
				]]>
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:annotation>
		<xsd:documentation><![CDATA[
	Defines the elements used in the Spring Framework's declarative
	transaction management infrastructure.
		]]></xsd:documentation>
	</xsd:annotation>

	<xsd:element name="advice">
		<xsd:complexType>
			<xsd:annotation>
				<xsd:documentation source="net: Spring.Transaction.Interceptor.TransactionInterceptor"><![CDATA[
	Defines the transactional semantics of the AOP advice that is to be
	executed.
	
	That is, this advice element is where the transactional semantics of
	any	number of methods are defined (where transactional semantics
	includes the propagation settings, the isolation level, the rollback
	rules, etc).
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation>
						<tool:exports type="Spring.Transaction.Interceptor.TransactionInterceptor"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
			<xsd:complexContent>
				<xsd:extension base="identifiedType">
					<xsd:sequence>
						<xsd:element name="attributes" type="attributesType" minOccurs="0" maxOccurs="1"/>
					</xsd:sequence>
					<xsd:attribute name="transaction-manager" type="xsd:string" default="transactionManager">
						<xsd:annotation>
							<xsd:documentation source="net:Spring.Transaction.IPlatformTransactionManager"><![CDATA[
	The object name of the PlatformTransactionManager that is to be used
	to drive transactions.
	
	This attribute is not required, and only needs to be specified
	explicitly if the bean name of the desired PlatformTransactionManager
	is not 'transactionManager'.
							]]></xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="Spring.Transaction.IPlatformTransactionManager"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="attribute-driven">
		<xsd:complexType>
			<xsd:annotation>
				<xsd:documentation source="net:Spring.Transaction.Interceptor.AttributesTransactionAttributeSource"><![CDATA[
	Indicates that transaction configuration is defined by .NET
	attributes on objects classes, and that proxies are automatically
	to be created for the relevant annotated objects.
	
	Transaction semantics such as propagation settings, the isolation
	level, the rollback rules, etc are all defined in the annotation
	metadata.
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:attribute name="transaction-manager" type="xsd:string" default="transactionManager">
				<xsd:annotation>
					<xsd:documentation source="net:Spring.Transaction.IPlatformTransactionManager"><![CDATA[
	The object name of the PlatformTransactionManager that is to be used
	to drive transactions.
	
	This attribute is not required, and only needs to be specified
	explicitly if the object name of the desired PlatformTransactionManager
	is not 'transactionManager'.
					]]></xsd:documentation>
					<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="Spring.Transaction.IPlatformTransactionManager"/>
								</tool:annotation>
							</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="proxy-target-type" type="xsd:boolean" default="false">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	Are inheritance based proxies to be created? By default, composition
	based proxies are created.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="order" type="xsd:int">
				<xsd:annotation>
					<xsd:documentation source="net:Spring.Core.IOrdered"><![CDATA[
	Controls the ordering of the execution of the transaction advisor
	when multiple advice executes at a specific joinpoint.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="attributesType">
		<xsd:sequence>
			<xsd:element name="method" minOccurs="1" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:attribute name="name" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	The method name(s) with which the transaction attributes are to be
	associated. The wildcard (*) character can be used to associate the
	same transaction attribute settings with a number of methods; for
	example, 'get*', 'handle*', 'on*Event', etc.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="propagation" default="Required">
						<xsd:simpleType>
							<xsd:annotation>
								<xsd:documentation source="net:Spring.Transaction.TransactionPropagation"><![CDATA[
	The transaction propagation behavior.
								]]></xsd:documentation>
							</xsd:annotation>
							<xsd:restriction base="xsd:string">
								<xsd:enumeration value="Required"/>
								<xsd:enumeration value="Supports"/>
								<xsd:enumeration value="Mandatory"/>
								<xsd:enumeration value="RequiresNew"/>
								<xsd:enumeration value="NotSupported"/>
								<xsd:enumeration value="Never"/>
								<xsd:enumeration value="Nested"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:attribute>
					<xsd:attribute name="isolation" default="ReadCommitted">
						<xsd:simpleType>
							<xsd:annotation>
								<xsd:documentation source="net:System.Data.IsolationLevel"><![CDATA[
	The transaction isolation level.
								]]></xsd:documentation>
							</xsd:annotation>
							<xsd:restriction base="xsd:string">
								<xsd:enumeration value="Unspecified"/>
								<xsd:enumeration value="ReadUncommitted"/>
								<xsd:enumeration value="ReadCommitted"/>
								<xsd:enumeration value="RepeatableRead"/>
								<xsd:enumeration value="Serializable"/>
                <xsd:enumeration value="Snapshot"/>
                <xsd:enumeration value="Chaos"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:attribute>
					<xsd:attribute name="timeout" type="xsd:integer" default="-1">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	The transaction timeout value (in seconds).
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="read-only" type="xsd:boolean" default="false">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Is this transaction read-only?
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="rollback-for" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	The Exception(s) that will trigger rollback; comma-delimited.
	For example, 'com.foo.MyBusinessException,ServletException'
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="no-rollback-for" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	The Exception(s) that will *not* trigger rollback; comma-delimited.
	For example, 'com.foo.MyBusinessException,ServletException'
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>

</xsd:schema>
