<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    targetNamespace="http://jboss.com/products/seam/persistence" xmlns:persistence="http://jboss.com/products/seam/persistence"
    xmlns:components="http://jboss.com/products/seam/components" attributeFormDefault="unqualified">
    
    <xs:import namespace="http://jboss.com/products/seam/components" schemaLocation="components-2.1.xsd"/>

    <xs:element name="managed-persistence-context">
        <xs:complexType mixed="true">
            <xs:sequence>
            	<xs:choice minOccurs="0" maxOccurs="unbounded">
    	            <xs:element ref="persistence:filters"/>
	                <xs:element ref="persistence:persistence-unit-jndi-name" />
                </xs:choice>
            </xs:sequence>
            <xs:attributeGroup ref="persistence:attlist.ManagedPersistenceContext"/>
            <xs:attributeGroup ref="components:attlist.component"/>
        </xs:complexType>
    </xs:element>
    <xs:attributeGroup name="attlist.ManagedPersistenceContext">
        <xs:attribute name="entity-manager-factory" type="components:expressionType"/>
        <xs:attribute name="persistence-unit-jndi-name" type="components:string"/>
    </xs:attributeGroup>

    <xs:element name="managed-hibernate-session">
        <xs:complexType mixed="true">
            <xs:sequence minOccurs="0" maxOccurs="1">
                <xs:element ref="persistence:filters"/>
            </xs:sequence>
            <xs:attributeGroup ref="persistence:attlist.ManagedHibernateSession"/>
            <xs:attributeGroup ref="components:attlist.component"/>
        </xs:complexType>
    </xs:element>
    <xs:attributeGroup name="attlist.ManagedHibernateSession">
        <xs:attribute name="session-factory"/>
        <xs:attribute name="session-factory-jndi-name"/>
    </xs:attributeGroup>
    
    <xs:element name="filters" type="components:multiValuedProperty"/>
    <xs:element name="persistence-unit-jndi-name" type="components:string" />
    
    <xs:element name="hibernate-session-factory">
        <xs:complexType mixed="true">
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="mapping-classes" type="components:multiValuedProperty"/>
                <xs:element name="mapping-files" type="components:multiValuedProperty"/>
                <xs:element name="mapping-jars" type="components:multiValuedProperty"/>
                <xs:element name="mapping-packages" type="components:multiValuedProperty"/>
                <xs:element name="mapping-resources" type="components:multiValuedProperty"/>
                <xs:element name="naming-strategy" type="components:expressionType"/>
                <xs:element name="cfg-properties" type="components:mapProperty"/>
            </xs:choice>
            <xs:attributeGroup ref="persistence:attlist.HibernateSessionFactory"/>
            <xs:attributeGroup ref="components:attlist.component"/>
        </xs:complexType>
    </xs:element>
    <xs:attributeGroup name="attlist.HibernateSessionFactory">
        <xs:attribute name="cfg-resource-name" type="components:string"/>
    </xs:attributeGroup>

    <xs:element name="entity-manager-factory">
        <xs:complexType mixed="true">
            <xs:sequence minOccurs="0" maxOccurs="1">
                <xs:element name="persistence-unit-properties" type="components:mapProperty"/>
            </xs:sequence>
            <xs:attributeGroup ref="persistence:attlist.EntityManagerFactory"/>
            <xs:attributeGroup ref="components:attlist.component"/>
        </xs:complexType>
    </xs:element>
    <xs:attributeGroup name="attlist.EntityManagerFactory">
        <xs:attribute name="persistence-unit-name" type="components:string" />
    </xs:attributeGroup>

    <xs:element name="filter">
        <xs:complexType mixed="true">
            <xs:sequence>
                <xs:element minOccurs="0" name="name" type="components:string"/>
                <xs:element minOccurs="0" name="parameters" type="components:mapProperty"/>
            </xs:sequence>
            <xs:attributeGroup ref="persistence:attlist.filter"/>
            <xs:attributeGroup ref="components:attlist.component"/>
        </xs:complexType>
    </xs:element>
    <xs:attributeGroup name="attlist.filter">
        <xs:attribute name="enabled" type="components:boolean" />
    </xs:attributeGroup>

</xs:schema>
