<?xml version="1.0" encoding="UTF-8"?>
<!-- A prototype xsd schema for the pojoserver xml deployer
$Id: aop-deployer_1_1.xsd 35274 2005-08-24 23:06:19Z bill $
 -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="urn:jboss:aop-deployer"
   xmlns="urn:jboss:aop-deployer"
   elementFormDefault="qualified"
   attributeFormDefault="unqualified"
   version="1.0">
   <xsd:annotation>
      <xsd:documentation><![CDATA[
      The xml deployer schema. The deployment document instance
      root element should reference the schema in the root
      deployment element using something like:

         <aop
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:jboss:aop-deployer aop-deployer_1_1.xsd"
            xmlns="urn:jboss:aop-deployer">
         ]]>
      </xsd:documentation>
   </xsd:annotation>

   <xsd:complexType name="typedefType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="expr" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="annotationType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="expr" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="annotationIntroductionType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="expr" type="xsd:string" use="required"/>
      <xsd:attribute name="invisible" type="booleanType" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="dynamicCflowType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="class" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="cflowCalledType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="expr" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="cflowNotCalledType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="expr" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="cflowStackType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="called" type="cflowCalledType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="not-called" type="cflowNotCalledType" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="bindType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="interceptor-ref" type="interceptorRefType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="stack-ref" type="stackRefType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="advice" type="adviceType" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="optional"/>
      <xsd:attribute name="pointcut" type="xsd:string" use="required"/>
      <xsd:attribute name="cflow" type="xsd:string" use="optional"/>
   </xsd:complexType>

   <xsd:complexType name="pluggable-pointcut">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:any minOccurs="0" maxOccurs="1" namespace="##other"/>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="class" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="prepareType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="expr" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="pointcutType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="expr" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="interceptorRefType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="stackRefType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="adviceType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="aspect" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="stackType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="interceptor-ref" type="interceptorRefType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="stack-ref" type="stackRefType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="advice" type="adviceType" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="metadata">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:any minOccurs="0" maxOccurs="1" namespace="##other"/>
      </xsd:sequence>
      <xsd:attribute name="tag" type="xsd:string" use="required"/>
      <xsd:attribute name="class" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="metadataLoaderType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:attribute name="tag" type="xsd:string" use="required"/>
      <xsd:attribute name="class" type="xsd:string" use="required"/>
   </xsd:complexType>

   <xsd:complexType name="mixinType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="interfaces" type="xsd:string" minOccurs="1" maxOccurs="1"/>
         <xsd:element name="class" type="xsd:string" minOccurs="1" maxOccurs="1"/>
         <xsd:element name="construction" type="xsd:string" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <xsd:attribute name="transient" type="xsd:string" use="optional"/>
   </xsd:complexType>

   <xsd:complexType name="introductionType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="mixin" type="mixinType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="interfaces" type="xsd:string" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <xsd:attribute name="class" type="xsd:string" use="optional"/>
      <xsd:attribute name="expr" type="xsd:string" use="optional"/>
   </xsd:complexType>

   <xsd:simpleType name="aspectScope">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="PER_VM" />
         <xsd:enumeration value="PER_CLASS" />
         <xsd:enumeration value="PER_INSTANCE" />
         <xsd:enumeration value="PER_JOINPOINT" />
         <xsd:enumeration value="PER_CLASS_JOINPOINT" />
      </xsd:restriction>
   </xsd:simpleType>

   <xsd:simpleType name="booleanType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="true" />
         <xsd:enumeration value="false" />
      </xsd:restriction>
   </xsd:simpleType>

   <xsd:complexType name="aspectType">
      <xsd:choice minOccurs="0" maxOccurs="1">
         <xsd:element name="class" type="xsd:anyType"/>
         <xsd:element name="factory" type="xsd:anyType"/>
      </xsd:choice>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="class" type="xsd:string" use="optional"/>
      <xsd:attribute name="factory" type="xsd:string" use="optional"/>
      <xsd:attribute name="scope" type="aspectScope" use="optional"/>
   </xsd:complexType>

   <xsd:complexType name="interceptorType">
      <xsd:choice minOccurs="0" maxOccurs="1">
         <xsd:element name="class" type="xsd:anyType"/>
         <xsd:element name="factory" type="xsd:anyType"/>
      </xsd:choice>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="class" type="xsd:string" use="optional"/>
      <xsd:attribute name="factory" type="xsd:string" use="optional"/>
      <xsd:attribute name="scope" type="aspectScope" use="optional"/>
   </xsd:complexType>

   <xsd:complexType name="domainType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:sequence>
         <xsd:element name="interceptor" type="interceptorType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="introduction" type="introductionType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="metadata-loader" type="metadataLoaderType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="stack" type="stackType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="aspect" type="aspectType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="pointcut" type="pointcutType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="bind" type="bindType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="prepare" type="prepareType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="cflow-stack" type="cflowStackType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="dynamic-cflow" type="dynamicCflowType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="annotation" type="annotationType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="annotation-introduction" type="annotationIntroductionType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="typedef" type="typedefType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="domain" type="domainType" minOccurs="0"
            maxOccurs="unbounded"/>
      </xsd:sequence>
   </xsd:complexType>

   <xsd:complexType name="aopType">
      <xsd:annotation>
         <xsd:documentation>
           <![CDATA[
           Doco
           ]]>
         </xsd:documentation>
      </xsd:annotation>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
         <xsd:element name="interceptor" type="interceptorType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="introduction" type="introductionType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="metadata-loader" type="metadataLoaderType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="stack" type="stackType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="aspect" type="aspectType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="pointcut" type="pointcutType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="bind" type="bindType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="prepare" type="prepareType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="cflow-stack" type="cflowStackType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="dynamic-cflow" type="dynamicCflowType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="annotation" type="annotationType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="annotation-introduction" type="annotationIntroductionType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="typedef" type="typedefType" minOccurs="0"
            maxOccurs="unbounded"/>
         <xsd:element name="domain" type="domainType" minOccurs="0"
            maxOccurs="unbounded"/>
      </xsd:choice>
   </xsd:complexType>

   <!-- The document root element -->
   <xsd:element name="aop" type="aopType">
      <xsd:annotation>
         <xsd:documentation> The root of the xml deployer instance document
         </xsd:documentation>
      </xsd:annotation>
   </xsd:element>
</xsd:schema>
