<?xml version="1.0" encoding="UTF-8"?>
<!--
/*   Copyright 2004 The Apache Software Foundation
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *  limitations under the License.
 */
-->

<xs:schema targetNamespace="urn:xbeans:jira33b" 
    xmlns="urn:xbeans:jira33b" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:saml="urn:xbeans:jira_33a:SAML:1.0:assertion" 
    elementFormDefault="qualified" attributeFormDefault="unqualified">

    <xs:import namespace="urn:xbeans:jira_33a:SAML:1.0:assertion" 
        schemaLocation="xmlbeans_33a.xsd"/>

    <xs:complexType name="SubjectType">
        <xs:complexContent>
            <xs:extension base="saml:SubjectType">
                <xs:sequence>
                    <xs:element ref="IDPProvidedNameIdentifier"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
<!--
    <xs:element name="Subject" type="SubjectType" substitutionGroup="saml:Subject"/>
-->
    <xs:element name="IDPProvidedNameIdentifier" type="saml:NameIdentifierType"/>
</xs:schema>
