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

<xs:schema targetNamespace="urn:liberty:sec:2003-08"
           xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
           xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
           xmlns:ac="urn:liberty:ac:2003-08"
           xmlns:lib="urn:liberty:iff:2003-08"
           xmlns:disco="urn:liberty:disco:2003-08"
           xmlns:md="urn:liberty:metadata:2003-08"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:sec="urn:liberty:sec:2003-08" 
           xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">
    <xs:import namespace="urn:oasis:names:tc:SAML:1.0:assertion"
               schemaLocation="oasis-sstc-saml-schema-assertion-1.1.xsd"/>
    <xs:import namespace="urn:liberty:iff:2003-08"
               schemaLocation="liberty-idff-protocols-schema-1.2-errata-v3.0.xsd"/>
    <xs:import namespace="urn:liberty:disco:2003-08"
               schemaLocation="liberty-idwsf-disco-svc-v1.2.xsd"/>
    <xs:import namespace="urn:liberty:ac:2003-08"
               schemaLocation="liberty-authentication-context-v1.3.xsd"/>
    <xs:import namespace="urn:liberty:metadata:2003-08"
               schemaLocation="liberty-metadata-v1.1.xsd"/>
    <xs:import namespace="http://www.w3.org/2001/04/xmlenc#" 
               schemaLocation="http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/xenc-schema.xsd"/>
    <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"
               schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>

    <xs:annotation>
        <xs:documentation>Liberty ID-WSF Security Mechanisms Specification XSD</xs:documentation>
        <xs:documentation>
The source code in this XSD file was excerpted verbatim from:

Liberty ID-WSF Security Mechanisms Specification
Version 1.2
14th December 2004

Copyright (c) 2003,2004 Liberty Alliance participants, see
http://www.projectliberty.org/specs/idwsf_1_1_copyrights.php

        </xs:documentation>
    </xs:annotation>

    <xs:element name="ValidityRestrictionCondition" type="sec:ValidityRestrictionConditionType"/>
    <xs:complexType name="ValidityRestrictionConditionType">
        <xs:complexContent>
            <xs:extension base="saml:ConditionAbstractType">
              <xs:sequence>
                 <xs:element name="NumberOfUses" type="xs:integer"/>
              </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="ProxySubject" substitutionGroup="saml:Subject"
                type="saml:SubjectType"/>
    <xs:annotation>
        <xs:documentation>ProxyTransitedStatement is a 
        SubjectStatement which MAY carry specific subject confirmation
        data </xs:documentation>
    </xs:annotation>
    <xs:element name="ProxyTransitedStatement"
		type="saml:SubjectStatementAbstractType"/>

    <xs:annotation>
        <xs:documentation>
          ProxyInfoConfirmationData may be relied upon to
          corroborate the path information carried in a
          ProxyTransitedStatement
	</xs:documentation>
    </xs:annotation>
    <xs:element name="ProxyInfoConfirmationData"
                type="sec:ProxyInfoConfirmationType"/>
    <xs:complexType name="ProxyInfoConfirmationType">
      <xs:sequence>
        <xs:element ref="saml:AssertionIDReference"/>
        <xs:element name="Issuer" type="xs:string"/>
        <xs:element name="IssueInstant" type="xs:dateTime"/>
        <xs:element ref="ds:Signature" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID"/>
   </xs:complexType>

    <xs:element name="SessionContext" type="sec:SessionContextType"/>
    <xs:complexType name="SessionContextType">
        <xs:sequence>
            <xs:element name="SessionSubject" type="lib:SubjectType"/>
            <xs:element name="ProviderID" type="md:entityIDType"/>
            <xs:element ref="lib:RequestAuthnContext" minOccurs="0" maxOccurs="1"/>
            <!-- The system entity for which this context applies
	     is privacy protect by the SessionSubject -->
        </xs:sequence>
        <xs:attribute name="SessionIndex" type="xs:string" use="optional"/>
        <xs:attribute name="AuthenticationInstant" type="xs:dateTime" use="required"/>
        <xs:attribute name="AssertionIssueInstant" type="xs:dateTime" use="required"/>
    </xs:complexType>

    <xs:element name="SessionContextStatement"
                type="sec:SessionContextStatementType"
                substitutionGroup="saml:SubjectStatement"/>

    <xs:complexType name="SessionContextStatementType">
        <xs:complexContent>
            <xs:extension base="saml:SubjectStatementAbstractType">
                <xs:sequence>
                    <!-- This is the name of the proxy and it SHOULD carry
                         SubjectConfirmation information to authorize the
                         ProxySubject to act on behalf of the
                         Subject inherited from
                         SubjectStatementAbstractType -->
                    <xs:element name="ProxySubject"
                                type="saml:SubjectType"  minOccurs="0"/>
                    <xs:element ref="sec:SessionContext"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:element name="ResourceAccessStatement"
		type="sec:ResourceAccessStatementType"
		substitutionGroup="saml:SubjectStatement"/>

    <xs:complexType name="ResourceAccessStatementType">
        <xs:complexContent>
            <xs:extension base="saml:SubjectStatementAbstractType">
                <xs:sequence>
                    <xs:group ref="disco:ResourceIDGroup"/>
                    <xs:sequence minOccurs="0">
                    <!-- This is the name of the proxy and it SHOULD carry
                         SubjectConfirmation information to authorize the
                         ProxySubject to act on behalf of the
                         Subject inherited from
                         SubjectStatementAbstractType -->
                        <xs:element name="ProxySubject" type="saml:SubjectType"/>
                        <xs:element ref="sec:SessionContext" minOccurs="0"/>
                    </xs:sequence>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

