<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.1 U (http://www.xmlspy.com) by Tim Moses (private) -->
<xs:schema targetNamespace="http://www.oasis-open.org/committees/xacml/docs/draft-xacml-schema-policy-11.xsd" xmlns:saml="http://www.oasis-open.org/committees/security/docs/draft-sstc-schema-assertion-24.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xacml="http://www.oasis-open.org/committees/xacml/docs/draft-xacml-schema-policy-11.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="http://www.oasis-open.org/committees/security/docs/draft-sstc-schema-assertion-24.xsd" schemaLocation="D:\My Documents\Standards\Xacml\v10 schema\draft-sstc-schema-assertion-24.xsd"/>
	<xs:element name="policySetStatement" type="xacml:PolicySetStatementType"/>
	<xs:element name="policyStatement" type="xacml:PolicyStatementType"/>
	<xs:element name="rule" type="xacml:RuleType"/>
	<xs:complexType name="PolicySetStatementType">
		<xs:complexContent>
			<xs:extension base="saml:StatementAbstractType">
				<xs:sequence>
					<xs:element name="description" type="xs:string" minOccurs="0"/>
					<xs:element name="target" type="xacml:TargetType"/>
					<xs:element name="policySet" type="xacml:PolicySetType" maxOccurs="unbounded"/>
					<xs:element name="obligations" type="xacml:ObligationsType" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="policySetId" type="xs:anyURI" use="required"/>
				<xs:attribute name="policySetName" type="xs:string" use="optional"/>
				<xs:attribute name="policyCombiningAlgId" type="xs:anyURI" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PolicyStatementType">
		<xs:complexContent>
			<xs:extension base="saml:StatementAbstractType">
				<xs:sequence>
					<xs:element name="description" type="xs:string" minOccurs="0"/>
					<xs:element name="target" type="xacml:TargetType"/>
					<xs:element name="ruleSet" type="xacml:RuleSetType" maxOccurs="unbounded"/>
					<xs:element name="obligations" type="xacml:ObligationsType" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="policyId" type="xs:anyURI" use="required"/>
				<xs:attribute name="policyName" type="xs:string" use="optional"/>
				<xs:attribute name="ruleCombiningAlgId" type="xs:anyURI" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="RuleType">
		<xs:sequence>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="target" type="xacml:TargetType" minOccurs="0"/>
			<xs:element name="effect" type="xacml:EffectType"/>
			<xs:element name="condition" type="xacml:PredicateExpressionType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="ruleId" type="xs:anyURI" use="required"/>
		<xs:attribute name="ruleName" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="TargetType">
		<xs:sequence>
			<xs:element name="subjects" type="xacml:SubjectsType"/>
			<xs:element name="resources" type="xacml:ResourcesType"/>
			<xs:element name="actions" type="xacml:ActionsType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SubjectsType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element ref="saml:Attribute"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ResourcesType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element ref="saml:Attribute"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ActionsType">
		<xs:sequence>
			<xs:element ref="saml:Actions"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ObligationsType">
		<xs:sequence>
			<xs:element name="onPermit" type="xacml:ObligationType" minOccurs="0"/>
			<xs:element name="onDeny" type="xacml:ObligationType" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ObligationType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="obligation">
				<xs:complexType>
					<xs:sequence maxOccurs="unbounded">
						<xs:choice>
							<xs:element ref="saml:AttributeDesignator"/>
							<xs:element ref="saml:Attribute"/>
						</xs:choice>
					</xs:sequence>
					<xs:attribute name="ObligationId" type="xs:anyURI" use="required"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="EffectType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="permit"/>
			<xs:enumeration value="deny"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="PredicateExpressionType">
		<xs:choice>
			<xs:element ref="xacml:predicateExpression"/>
			<xs:element ref="xacml:predicate"/>
		</xs:choice>
	</xs:complexType>
	<xs:element name="predicateExpression" type="xacml:PredicateExpressionAbstractType" abstract="true"/>
	<xs:complexType name="PredicateExpressionAbstractType"/>
	<xs:element name="and" type="xacml:AndType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="or" type="xacml:OrType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="orderedOr" type="xacml:OrderedOrType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="nOf" type="xacml:NOfType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="not" type="xacml:NotType" substitutionGroup="xacml:predicateExpression"/>
	<xs:complexType name="AndType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="OrType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="OrderedOrType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="NOfType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="quorum" type="xs:positiveInteger"/>
	</xs:complexType>
	<xs:complexType name="NotType">
		<xs:choice>
			<xs:element ref="xacml:predicateExpression" minOccurs="0"/>
			<xs:element ref="xacml:predicate" minOccurs="0"/>
		</xs:choice>
	</xs:complexType>
	<xs:element name="predicate" type="xacml:PredicateAbstractType" abstract="true"/>
	<!--This is an XACML extensibility point.  New predicates may be added in the
		substitution group of "predicate"-->
	<xs:complexType name="PredicateAbstractType"/>
	<xs:element name="present" type="xacml:PresentType" substitutionGroup="xacml:predicate"/>
	<xs:element name="equal" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="greaterOrEqual" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="lessOrEqual" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="subset" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="superset" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="patternMatch" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="nonNullSetIntersection" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:complexType name="PresentType">
		<xs:complexContent>
			<xs:extension base="xacml:PredicateAbstractType">
				<xs:sequence>
					<xs:element ref="saml:AttributeDesignator"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CompareType">
		<xs:complexContent>
			<xs:extension base="xacml:PredicateAbstractType">
				<xs:sequence minOccurs="2" maxOccurs="2">
					<xs:choice>
						<xs:element ref="saml:AttributeDesignator"/>
						<xs:element ref="saml:Attribute"/>
						<xs:element ref="xacml:attributeFunction"/>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
		<!-- XML operands in "set" operations MUST be of xsi:type xs:list -->
		<!-- XML operands in "inequality" operations MUST contain an xsi:type attribute for which
	XACML defines a comparison algorithm -->
	</xs:complexType>
	<xs:element name="attributeFunction" type="xacml:AttributeFunctionAbstractType" abstract="true"/>
	<xs:complexType name="AttributeFunctionAbstractType"/>
	<xs:element name="plus" type="xacml:ArgumentListType" substitutionGroup="xacml:attributeFunction"/>
	<xs:element name="minus" type="xacml:ArgumentListType" substitutionGroup="xacml:attributeFunction"/>
	<xs:element name="times" type="xacml:ArgumentListType" substitutionGroup="xacml:attributeFunction"/>
	<xs:element name="divide" type="xacml:ArgumentListType" substitutionGroup="xacml:attributeFunction"/>
	<xs:complexType name="ArgumentListType">
		<xs:complexContent>
			<xs:extension base="xacml:AttributeFunctionAbstractType">
				<xs:sequence maxOccurs="unbounded">
					<xs:choice>
						<xs:element ref="saml:AttributeDesignator"/>
						<xs:element ref="saml:Attribute"/>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PolicySetType">
		<xs:sequence maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:policySetStatement"/>
				<xs:element ref="xacml:policyStatement"/>
				<xs:element name="policySetDesignator" type="xacml:PolicySetDesignatorType"/>
				<xs:element name="policyDesignator" type="xacml:PolicyDesignatorType"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="PolicySetDesignatorType">
		<xs:sequence>
			<xs:element name="policySetId" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="policySetAssertion" type="saml:AssertionType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="PolicyDesignatorType">
		<xs:sequence>
			<xs:element name="policyId" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="policyAssertion" type="saml:AssertionType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RuleSetType">
		<xs:sequence maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:rule"/>
				<xs:element name="ruleDesignator" type="xacml:RuleDesignatorType"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RuleDesignatorType">
		<xs:sequence>
			<xs:element name="ruleId" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="ruleDigest" minOccurs="0">
				<xs:complexType>
					<xs:attribute name="digestAlgId" type="xs:string" default="SHA-1"/>
					<xs:attribute name="base64Digest" type="xs:string"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
</xs:schema>

