<xs:schema targetNamespace="urn:oasis:names:tc:XACML:0.01:context" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xacmlContext="urn:oasis:names:tc:XACML:0.01:context" xmlns:xacml="urn:oasis:names:tc:XACML:0.14b:core" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="urn:oasis:names:tc:XACML:0.14b:core" schemaLocation="D:\My Documents\Standards\Xacml\v14 schema\draft-xacml-schema-core-14b.xsd"/>
	<!-- -->
	<xs:element name="Request" type="xacmlContext:RequestType"/>
	<xs:element name="Response" type="xacmlContext:ResponseType"/>
	<!-- -->
	<xs:complexType name="RequestType">
		<xs:sequence>
			<xs:element name="Subject" type="xacmlContext:SubjectType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Resource" type="xacmlContext:ResourceType" minOccurs="0"/>
			<xs:element name="Action" type="xs:string" minOccurs="0"/>
			<xs:element name="Other" type="xacmlContext:OtherType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ResponseType">
		<xs:sequence>
			<xs:element name="Decision" type="saml:DecisionType"/>
			<xs:element name="Obligations" type="xacml:ObligationsType" minOccurs="0"/>
			<xs:element name="Advice" type="xacmlContext:AdviceType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="SubjectType">
		<xs:sequence>
			<xs:element name="SubjectId" type="xacmlContext:SubjectIdType" minOccurs="0"/>
			<xs:element name="SubjectAttribute" type="xacmlContext:AttributeType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="SubjectFunction" type="xs:anyURI" default="urn:oasis:names:tc:xacml:identifiers:AccessSubject"/>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="SubjectIdType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="Format" type="xs:anyURI" use="required"/>
				<xs:attribute name="NameQualifier" type="xs:string" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="AttributeType">
		<xs:complexContent>
			<xs:extension base="xacmlContext:AttributeDesignatorType">
				<xs:sequence>
					<xs:element ref="saml:AttributeValue" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="AttributeDesignatorType">
		<xs:sequence>
			<xs:element name="Holder" type="xacmlContext:SubjectIdType" minOccurs="0"/>
			<!-- Holder is usually the SubjectID element value when 
                 Attribute is used in a Subject, so Holder is
                 optional in that situation. -->
		</xs:sequence>
		<xs:attribute name="AttributeName" type="xs:string" use="required"/>
		<xs:attribute name="AttributeNamespace" type="xs:anyURI" use="required"/>
		<xs:attribute name="AttribueIssuer" type="xs:anyURI" use="optional"/>
		<xs:attribute name="AttributeIssueInstant" type="xs:dateTime" use="optional"/>
		<xs:attribute name="AttributeLocator" type="xs:string" use="optional"/>
		<!-- xacml:AttributeNamespace identifies the namespace authority
             for the xacml:AttributeName -->
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ResourceType">
		<xs:sequence>
			<xs:element name="xacmlContext:ResourceSpecifier" type="xacmlContext:ResourceSpecifierType"/>
			<xs:element name="ResourceAttribute" type="xacmlContext:AttributeType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ResourceSpecifierType">
		<xs:sequence>
			<xs:element name="ResourceContent" type="xacmlContext:ResourceContentType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="ResourceURI" type="xs:anyURI" use="optional"/>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ResourceContentType">
		<xs:sequence>
			<xs:any maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<!-- ContextOther is used for attributes associated with
         entities that are not involved in making the access
         request -->
	<xs:complexType name="OtherType">
		<xs:sequence>
			<xs:element name="OtherAttribute" type="xacmlContext:AttributeType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="AdviceType">
		<xs:sequence>
			<xs:any minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="AdviceName" type="xs:anyURI"/>
	</xs:complexType>
</xs:schema>

