<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:oval-def="http://oval.mitre.org/XMLSchema/oval-definitions-5" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://oval.mitre.org/XMLSchema/oval-definitions-5" elementFormDefault="qualified" version="5.0">
	<xsd:import namespace="http://oval.mitre.org/XMLSchema/oval-common-5" schemaLocation="oval-common-schema.xsd" />
	<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd" />
	<!-- =============================================================================== -->
	<!-- =============================================================================== -->
	<!-- =============================================================================== -->
	<xsd:element name="oval_definitions">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="generator" type="oval:GeneratorType" minOccurs="1" maxOccurs="1" />
				<xsd:element name="definitions" type="oval-def:DefinitionsType" minOccurs="0" maxOccurs="1" />
				<xsd:element name="tests" type="oval-def:TestsType" minOccurs="0" maxOccurs="1" />
				<xsd:element name="objects" type="oval-def:ObjectsType" minOccurs="0" maxOccurs="1" />
				<xsd:element name="states" type="oval-def:StatesType" minOccurs="0" maxOccurs="1" />
				<xsd:element name="variables" type="oval-def:VariablesType" minOccurs="0" maxOccurs="1" />
				<xsd:element ref="ds:Signature" minOccurs="0" maxOccurs="1" />
			</xsd:sequence>
		</xsd:complexType>
		<xsd:key name="definitionKey">
			<xsd:selector xpath="oval-def:definitions/oval-def:definition" />
			<xsd:field xpath="@id" />
		</xsd:key>
		<xsd:key name="testKey">
			<xsd:selector xpath="oval-def:tests/*" />
			<xsd:field xpath="@id" />
		</xsd:key>
		<xsd:key name="objectKey">
			<xsd:selector xpath="oval-def:objects/*" />
			<xsd:field xpath="@id" />
		</xsd:key>
		<xsd:key name="stateKey">
			<xsd:selector xpath="oval-def:states/*" />
			<xsd:field xpath="@id" />
		</xsd:key>
		<xsd:key name="variableKey">
			<xsd:selector xpath="oval-def:variables/*" />
			<xsd:field xpath="@id" />
		</xsd:key>
		<xsd:keyref name="extendKeyRef" refer="oval-def:definitionKey">
			<xsd:selector xpath=".//*" />
			<xsd:field xpath="@definition_ref" />
		</xsd:keyref>
		<xsd:keyref name="testKeyRef" refer="oval-def:testKey">
			<xsd:selector xpath=".//*" />
			<xsd:field xpath="@test_ref" />
		</xsd:keyref>
		<xsd:keyref name="objectKeyRef" refer="oval-def:objectKey">
			<xsd:selector xpath=".//*" />
			<xsd:field xpath="@object_ref" />
		</xsd:keyref>
		<xsd:keyref name="stateKeyRef" refer="oval-def:stateKey">
			<xsd:selector xpath=".//*" />
			<xsd:field xpath="@state_ref" />
		</xsd:keyref>
		<xsd:keyref name="variableKeyRef" refer="oval-def:variableKey">
			<xsd:selector xpath=".//*" />
			<xsd:field xpath="@var_ref" />
		</xsd:keyref>
		<xsd:keyref name="object_referenceKeyRef" refer="oval-def:objectKey">
			<xsd:selector xpath=".//oval-def:object_reference" />
			<xsd:field xpath="." />
		</xsd:keyref>
		<xsd:keyref name="filterKeyRef" refer="oval-def:stateKey">
			<xsd:selector xpath=".//oval-def:filter" />
			<xsd:field xpath="." />
		</xsd:keyref>
	</xsd:element>
	<!-- =============================================================================== -->
	<!-- =================================  GENERATOR  ================================= -->
	<!-- =============================================================================== -->
	<!--
		The GeneratorType is defined by the oval shared schema.  Please refer to
		that documentation for a description of the complex type.
	 -->
	<!-- =============================================================================== -->
	<!-- ================================  DEFINITIONS  ================================ -->
	<!-- =============================================================================== -->
	<xsd:complexType name="DefinitionsType">
		<xsd:sequence>
			<xsd:element name="definition" type="oval-def:DefinitionType" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="DefinitionType">
		<xsd:sequence>
			<xsd:element name="metadata" type="oval-def:MetadataType" minOccurs="1" maxOccurs="1" />
			<xsd:element name="notes" type="oval-def:NotesType" minOccurs="0" maxOccurs="1" />
			<xsd:element name="criteria" type="oval-def:CriteriaType" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
		<xsd:attribute name="id" type="oval:DefinitionIDPattern" use="required" />
		<xsd:attribute name="version" type="xsd:integer" use="required" />
		<xsd:attribute name="class" type="oval-def:ClassEnumeration" use="required" />
		<xsd:attribute name="deprecated" type="xsd:boolean" use="optional" default="false" />
	</xsd:complexType>
	<xsd:complexType name="MetadataType">
		<xsd:sequence>
			<xsd:element name="title" type="xsd:string" minOccurs="1" maxOccurs="1" />
			<xsd:element name="affected" type="oval-def:AffectedType" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="reference" type="oval-def:ReferenceType" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="description" type="xsd:string" minOccurs="1" maxOccurs="1" />
			<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="AffectedType">
		<xsd:sequence>
			<xsd:element name="platform" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="product" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="family" type="oval:FamilyEnumeration" use="required" />
	</xsd:complexType>
	<xsd:complexType name="ReferenceType">
		<xsd:attribute name="source" type="xsd:string" use="required" />
		<xsd:attribute name="ref_id" type="xsd:string" use="required" />
		<xsd:attribute name="ref_url" type="xsd:anyURI" use="optional" />
	</xsd:complexType>
	<xsd:complexType name="NotesType">
		<xsd:sequence>
			<xsd:element name="note" type="xsd:string" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="CriteriaType">
		<xsd:choice minOccurs="1" maxOccurs="unbounded">
			<xsd:element name="criteria" type="oval-def:CriteriaType" />
			<xsd:element name="criterion" type="oval-def:CriterionType" />
			<xsd:element name="extend_definition" type="oval-def:ExtendDefinitionType" />
		</xsd:choice>
		<xsd:attribute name="operator" type="oval:OperatorEnumeration" use="optional" default="AND" />
		<xsd:attribute name="negate" type="xsd:boolean" use="optional" default="false" />
		<xsd:attribute name="comment" type="xsd:string" use="optional" />
	</xsd:complexType>
	<xsd:complexType name="CriterionType">
		<xsd:attribute name="test_ref" type="oval:TestIDPattern" use="required" />
		<xsd:attribute name="negate" type="xsd:boolean" use="optional" default="false" />
		<xsd:attribute name="comment" type="xsd:string" use="optional" />
	</xsd:complexType>
	<xsd:complexType name="ExtendDefinitionType">
		<xsd:attribute name="definition_ref" type="oval:DefinitionIDPattern" use="required" />
		<xsd:attribute name="negate" type="xsd:boolean" use="optional" default="false" />
		<xsd:attribute name="comment" type="xsd:string" use="optional" />
	</xsd:complexType>
	<!-- =============================================================================== -->
	<!-- ===================================  TESTS  =================================== -->
	<!-- =============================================================================== -->
	<xsd:complexType name="TestsType">
		<xsd:sequence>
			<xsd:element ref="oval-def:test" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="test" type="oval-def:TestType" abstract="true" />
	<xsd:complexType name="TestType">
		<xsd:sequence>
			<xsd:element name="notes" type="oval-def:NotesType" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
		<xsd:attribute name="id" type="oval:TestIDPattern" use="required" />
		<xsd:attribute name="version" type="xsd:integer" use="required" />
		<xsd:attribute name="check" type="oval:CheckEnumeration" use="required" />
		<xsd:attribute name="comment" type="xsd:string" use="required" />
		<xsd:attribute name="deprecated" type="xsd:boolean" use="optional" default="false" />
	</xsd:complexType>
	<xsd:complexType name="ObjectRefType">
		<xsd:attribute name="object_ref" type="oval:ObjectIDPattern" use="required" />
	</xsd:complexType>
	<xsd:complexType name="StateRefType">
		<xsd:attribute name="state_ref" type="oval:StateIDPattern" use="required" />
	</xsd:complexType>
	<!-- =============================================================================== -->
	<!-- ==================================  OBJECTS  ================================== -->
	<!-- =============================================================================== -->
	<xsd:complexType name="ObjectsType">
		<xsd:sequence>
			<xsd:element ref="oval-def:object" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="object" type="oval-def:ObjectType" abstract="true" />
	<xsd:complexType name="ObjectType">
		<xsd:sequence>
			<xsd:element name="notes" type="oval-def:NotesType" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
		<xsd:attribute name="id" type="oval:ObjectIDPattern" use="required" />
		<xsd:attribute name="version" type="xsd:integer" use="required" />
		<xsd:attribute name="deprecated" type="xsd:boolean" use="optional" default="false" />
	</xsd:complexType>
	<xsd:element name="set">
		<xsd:complexType>
			<xsd:choice>
				<xsd:sequence>
					<xsd:element ref="oval-def:set" minOccurs="1" maxOccurs="2" />
				</xsd:sequence>
				<xsd:sequence>
					<xsd:element name="object_reference" type="oval:ObjectIDPattern" minOccurs="1" maxOccurs="2" />
					<xsd:element name="filter" type="oval:StateIDPattern" minOccurs="0" maxOccurs="unbounded" />
				</xsd:sequence>
			</xsd:choice>
			<xsd:attribute name="set_operator" type="oval-def:SetOperatorEnumeration" use="optional" default="UNION" />
		</xsd:complexType>
	</xsd:element>
	<!-- =============================================================================== -->
	<!-- ==================================  STATES  =================================== -->
	<!-- =============================================================================== -->
	<xsd:complexType name="StatesType">
		<xsd:sequence>
			<xsd:element ref="oval-def:state" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="state" type="oval-def:StateType" abstract="true" />
	<xsd:complexType name="StateType">
		<xsd:sequence>
			<xsd:element name="notes" type="oval-def:NotesType" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
		<xsd:attribute name="id" type="oval:StateIDPattern" use="required" />
		<xsd:attribute name="version" type="xsd:integer" use="required" />
		<xsd:attribute name="operator" type="oval:OperatorEnumeration" use="optional" default="AND" />
		<xsd:attribute name="deprecated" type="xsd:boolean" use="optional" default="false" />
	</xsd:complexType>
	<!-- =============================================================================== -->
	<!-- =================================  VARIABLES  ================================= -->
	<!-- =============================================================================== -->
	<xsd:complexType name="VariablesType">
		<xsd:sequence>
			<xsd:element ref="oval-def:variable" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="variable" type="oval-def:VariableType" abstract="true" />
	<xsd:complexType name="VariableType">
		<xsd:attribute name="id" type="oval:VariableIDPattern" use="required" />
		<xsd:attribute name="version" type="xsd:integer" use="required" />
		<xsd:attribute name="datatype" type="oval:DatatypeEnumeration" use="required" />
		<xsd:attribute name="comment" type="xsd:string" use="required" />
		<xsd:attribute name="deprecated" type="xsd:boolean" use="optional" default="false" />
	</xsd:complexType>
	<xsd:element name="external_variable" substitutionGroup="oval-def:variable">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="oval-def:VariableType">
					<xsd:sequence>
						<xsd:element name="possible" type="oval-def:PossibleType" minOccurs="0" maxOccurs="unbounded" />
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="PossibleType">
		<xsd:choice>
			<xsd:element name="possible" type="oval-def:PossibleType" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element name="restriction" type="oval-def:RestrictionType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:choice>
	</xsd:complexType>
	<xsd:complexType name="RestrictionType">
		<xsd:simpleContent>
			<xsd:extension base="xsd:anySimpleType">
				<xsd:attribute name="hint" type="xsd:string" use="required" />
				<xsd:attribute name="operation" type="oval:OperationEnumeration" use="required" />
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:element name="constant_variable" substitutionGroup="oval-def:variable">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="oval-def:VariableType">
					<xsd:sequence>
						<xsd:element name="value" type="oval-def:ValueType" minOccurs="1" maxOccurs="unbounded" />
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="ValueType">
		<xsd:simpleContent>
			<xsd:extension base="xsd:anySimpleType" />
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:element name="local_variable" substitutionGroup="oval-def:variable">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="oval-def:VariableType">
					<xsd:sequence>
						<xsd:group ref="oval-def:ComponentGroup" minOccurs="1" maxOccurs="1" />
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:group name="ComponentGroup">
		<xsd:choice>
			<xsd:element name="object_component" type="oval-def:ObjectComponentType" />
			<xsd:element name="variable_component" type="oval-def:VariableComponentType" />
			<xsd:element name="literal_component" type="xsd:anySimpleType" />
			<xsd:group ref="oval-def:FunctionGroup" />
		</xsd:choice>
	</xsd:group>
	<xsd:complexType name="ObjectComponentType">
		<xsd:attribute name="object_ref" type="oval:ObjectIDPattern" use="required" />
		<xsd:attribute name="item_field" type="xsd:string" use="required" />
	</xsd:complexType>
	<xsd:complexType name="VariableComponentType">
		<xsd:attribute name="var_ref" type="oval:VariableIDPattern" use="required" />
	</xsd:complexType>
	<xsd:group name="FunctionGroup">
		<xsd:choice>
			<xsd:element name="begin" type="oval-def:BeginFunctionType" />
			<xsd:element name="concat" type="oval-def:ConcatFunctionType" />
			<xsd:element name="end" type="oval-def:BeginFunctionType" />
			<xsd:element name="escape_regex" type="oval-def:EscapeRegexFunctionType" />
			<xsd:element name="split" type="oval-def:SplitFunctionType" />
			<xsd:element name="substring" type="oval-def:SubstringFunctionType" />
		</xsd:choice>
	</xsd:group>
	<xsd:complexType name="BeginFunctionType">
		<xsd:sequence minOccurs="1" maxOccurs="1">
			<xsd:group ref="oval-def:ComponentGroup" />
		</xsd:sequence>
		<xsd:attribute name="character" type="xsd:string" use="required" />
	</xsd:complexType>
	<xsd:complexType name="ConcatFunctionType">
		<xsd:sequence minOccurs="2" maxOccurs="unbounded">
			<xsd:group ref="oval-def:ComponentGroup" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="EndFunctionType">
		<xsd:sequence minOccurs="1" maxOccurs="1">
			<xsd:group ref="oval-def:ComponentGroup" />
		</xsd:sequence>
		<xsd:attribute name="character" type="xsd:string" use="required" />
	</xsd:complexType>
	<xsd:complexType name="EscapeRegexFunctionType">
		<xsd:sequence minOccurs="1" maxOccurs="1">
			<xsd:group ref="oval-def:ComponentGroup" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="SplitFunctionType">
		<xsd:sequence minOccurs="1" maxOccurs="1">
			<xsd:group ref="oval-def:ComponentGroup" />
		</xsd:sequence>
		<xsd:attribute name="delimiter" type="xsd:string" use="required" />
	</xsd:complexType>
	<xsd:complexType name="SubstringFunctionType">
		<xsd:sequence minOccurs="1" maxOccurs="1">
			<xsd:group ref="oval-def:ComponentGroup" />
		</xsd:sequence>
		<xsd:attribute name="substring_start" type="xsd:int" use="required" />
		<xsd:attribute name="substring_length" type="xsd:int" use="required" />
	</xsd:complexType>
	<!-- =============================================================================== -->
	<!-- =================================  SIGNATURE  ================================= -->
	<!-- =============================================================================== -->
	<!--
		The signature element is defined by the xmldsig schema.  Please refer to that
		documentation for a description of the valid elements and types.
	 -->
	<!-- =============================================================================== -->
	<!-- ===============================  ENUMERATIONS  ================================ -->
	<!-- =============================================================================== -->
	<xsd:simpleType name="ActionEnumeration">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="concat" />
			<xsd:enumeration value="maximum" />
			<xsd:enumeration value="minimum" />
			<xsd:enumeration value="throw error" />
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="ClassEnumeration">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="compliance" />
			<xsd:enumeration value="inventory" />
			<xsd:enumeration value="miscellaneous" />
			<xsd:enumeration value="patch" />
			<xsd:enumeration value="vulnerability" />
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="SetOperatorEnumeration">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="COMPLEMENT" />
			<xsd:enumeration value="INTERSECTION" />
			<xsd:enumeration value="UNION" />
		</xsd:restriction>
	</xsd:simpleType>
	<!-- =============================================================================== -->
	<!-- ===============================  ENTITY TYPES  ================================ -->
	<!-- =============================================================================== -->
	<xsd:complexType name="EntityBaseType" abstract="true">
		<xsd:simpleContent>
			<xsd:extension base="xsd:anySimpleType">
				<xsd:attribute name="datatype" type="oval:DatatypeEnumeration" use="optional" default="string" />
				<xsd:attribute name="operation" type="oval:OperationEnumeration" use="optional" default="equals" />
				<xsd:attribute name="var_ref" type="oval:VariableIDPattern" use="optional" />
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityObjectBaseType" abstract="true">
		<xsd:simpleContent>
			<xsd:extension base="oval-def:EntityBaseType">
				<xsd:attribute name="var_check" type="oval:CheckEnumeration" use="optional" default="all" />
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityObjectAnyType">
		<xsd:simpleContent>
			<xsd:extension base="oval-def:EntityObjectBaseType" />
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityObjectBoolType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityObjectBaseType">
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:boolean oval:EmptyStringType" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityObjectFloatType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityObjectBaseType">
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:float oval:EmptyStringType" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityObjectIntType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityObjectBaseType">
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:integer oval:EmptyStringType" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityObjectStringType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityObjectBaseType">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityStateBaseType" abstract="true">
		<xsd:simpleContent>
			<xsd:extension base="oval-def:EntityBaseType">
				<xsd:attribute name="entity_check" type="oval:CheckEnumeration" use="optional" default="all" />
				<xsd:attribute name="var_check" type="oval:CheckEnumeration" use="optional" default="all" />
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityStateAnyType">
		<xsd:simpleContent>
			<xsd:extension base="oval-def:EntityStateBaseType" />
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityStateBoolType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityStateBaseType">
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:boolean oval:EmptyStringType" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityStateFloatType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityStateBaseType">
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:float oval:EmptyStringType" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityStateIntType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityStateBaseType">
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:integer oval:EmptyStringType" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="EntityStateStringType">
		<xsd:simpleContent>
			<xsd:restriction base="oval-def:EntityStateBaseType">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string" />
				</xsd:simpleType>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
</xsd:schema>
