<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5"
            xmlns:oval-sc="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5"
            xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
            xmlns:sch="http://purl.oclc.org/dsdl/schematron"
            targetNamespace="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5"
            elementFormDefault="qualified"
            version="5.8">
   <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_system_characteristics">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="generator" type="oval:GeneratorType"/>
            <xsd:element name="system_info" type="oval-sc:SystemInfoType"/>
            <xsd:element name="collected_objects" type="oval-sc:CollectedObjectsType" minOccurs="0"
                         maxOccurs="1"/>
            <xsd:element name="system_data" type="oval-sc:SystemDataType" minOccurs="0" maxOccurs="1"/>
            <xsd:element ref="ds:Signature" minOccurs="0" maxOccurs="1"/>
         </xsd:sequence>
      </xsd:complexType>
      <xsd:key name="objectKey">
         <xsd:selector xpath="oval-sc:collected_objects/oval-sc:object"/>
         <xsd:field xpath="@id"/>
         <xsd:field xpath="@version"/>
         <xsd:field xpath="@variable_instance"/>
      </xsd:key>
      <xsd:key name="itemKey">
         <xsd:selector xpath="oval-sc:system_data/*"/>
         <xsd:field xpath="@id"/>
      </xsd:key>
      <xsd:keyref name="itemKeyRef" refer="oval-sc:itemKey">
         <xsd:selector xpath="oval-sc:collected_objects/oval-sc:object/oval-sc:reference"/>
         <xsd:field xpath="@item_ref"/>
      </xsd:keyref>
   </xsd:element>
   <xsd:complexType name="SystemInfoType">
      <xsd:sequence>
         <xsd:element name="os_name" type="xsd:string"/>
         <xsd:element name="os_version" type="xsd:string"/>
         <xsd:element name="architecture" type="xsd:string"/>
         <xsd:element name="primary_host_name" type="xsd:string"/>
         <xsd:element name="interfaces" type="oval-sc:InterfacesType"/>
         <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="InterfacesType">
      <xsd:sequence>
         <xsd:element name="interface" type="oval-sc:InterfaceType" minOccurs="0"
                      maxOccurs="unbounded"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="InterfaceType">
      <xsd:sequence>
         <xsd:element name="interface_name" type="xsd:string"/>
         <xsd:element name="ip_address" type="oval-sc:EntityItemIPAddressStringType"/>
         <xsd:element name="mac_address" type="xsd:string"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="CollectedObjectsType">
      <xsd:sequence>
         <xsd:element name="object" type="oval-sc:ObjectType" minOccurs="1" maxOccurs="unbounded"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="ObjectType">
      <xsd:sequence>
         <xsd:element name="message" type="oval:MessageType" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element name="variable_value" type="oval-sc:VariableValueType" minOccurs="0"
                      maxOccurs="unbounded"/>
         <xsd:element name="reference" type="oval-sc:ReferenceType" minOccurs="0"
                      maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="oval:ObjectIDPattern" use="required"/>
      <xsd:attribute name="version" type="xsd:nonNegativeInteger" use="required"/>
      <xsd:attribute name="variable_instance" type="xsd:nonNegativeInteger" use="optional"
                     default="1"/>
      <xsd:attribute name="comment" type="xsd:string" use="optional"/>
      <xsd:attribute name="flag" type="oval-sc:FlagEnumeration" use="required"/>
   </xsd:complexType>
   <xsd:complexType name="VariableValueType">
      <xsd:simpleContent>
         <xsd:extension base="xsd:anySimpleType">
            <xsd:attribute name="variable_id" type="oval:VariableIDPattern" use="required"/>
         </xsd:extension>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="ReferenceType">
      <xsd:attribute name="item_ref" type="oval:ItemIDPattern" use="required"/>
   </xsd:complexType>
   <xsd:complexType name="SystemDataType">
      <xsd:sequence>
         <xsd:element ref="oval-sc:item" minOccurs="1" maxOccurs="unbounded"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:element name="item" type="oval-sc:ItemType" abstract="true"/>
   <xsd:complexType name="ItemType">
      <xsd:sequence>
         <xsd:element name="message" type="oval:MessageType" minOccurs="0" maxOccurs="50"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="oval:ItemIDPattern" use="required"/>
      <xsd:attribute name="status" type="oval-sc:StatusEnumeration" use="optional" default="exists"/>
   </xsd:complexType>
   <xsd:simpleType name="FlagEnumeration">
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="error"/>
         <xsd:enumeration value="complete"/>
         <xsd:enumeration value="incomplete"/>
         <xsd:enumeration value="does not exist"/>
         <xsd:enumeration value="not collected"/>
         <xsd:enumeration value="not applicable"/>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="StatusEnumeration">
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="error"/>
         <xsd:enumeration value="exists"/>
         <xsd:enumeration value="does not exist"/>
         <xsd:enumeration value="not collected"/>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:complexType name="EntityItemBaseType" abstract="true">
      <xsd:complexContent>
         <xsd:extension base="xsd:anyType">
            <xsd:attribute name="datatype" type="oval:DatatypeEnumeration" use="optional" default="string"/>
            <xsd:attribute name="mask" type="xsd:boolean" use="optional" default="false"/>
            <xsd:attribute name="status" type="oval-sc:StatusEnumeration" use="optional" default="exists"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemIPAddressType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype">
               <xsd:simpleType>
                  <xsd:restriction base="oval:SimpleDatatypeEnumeration">
                     <xsd:enumeration value="ipv4_address"/>
                     <xsd:enumeration value="ipv6_address"/>
                  </xsd:restriction>
               </xsd:simpleType>
            </xsd:attribute>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemIPAddressStringType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype">
               <xsd:simpleType>
                  <xsd:restriction base="oval:SimpleDatatypeEnumeration">
                     <xsd:enumeration value="ipv4_address"/>
                     <xsd:enumeration value="ipv6_address"/>
                     <xsd:enumeration value="string"/>
                  </xsd:restriction>
               </xsd:simpleType>
            </xsd:attribute>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemAnySimpleType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemBinaryType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:union memberTypes="xsd:hexBinary oval:EmptyStringType"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="binary"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemBoolType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:union memberTypes="xsd:boolean oval:EmptyStringType"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="boolean"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemFloatType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:union memberTypes="xsd:float oval:EmptyStringType"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="float"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemIntType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:union memberTypes="xsd:integer oval:EmptyStringType"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="int"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemStringType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="optional"
                           fixed="string"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemRecordType">
      <xsd:complexContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:sequence>
               <xsd:element name="field" type="oval-sc:EntityItemFieldType" minOccurs="0"
                            maxOccurs="unbounded"/>
            </xsd:sequence>
            <xsd:attribute name="datatype" type="oval:ComplexDatatypeEnumeration" use="required"
                           fixed="record"/>
         </xsd:restriction>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemFieldType">
      <xsd:simpleContent>
         <xsd:extension base="xsd:anySimpleType">
            <xsd:attribute name="name" use="required">
               <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                     <xsd:pattern value="[^A-Z]+"/>
                  </xsd:restriction>
               </xsd:simpleType>
            </xsd:attribute>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="optional"
                           default="string"/>
            <xsd:attribute name="mask" type="xsd:boolean" use="optional" default="false"/>
            <xsd:attribute name="status" type="oval-sc:StatusEnumeration" use="optional" default="exists"/>
         </xsd:extension>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemVersionType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="version"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemFilesetRevisionType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="fileset_revision"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemIOSVersionType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="ios_version"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="EntityItemEVRStringType">
      <xsd:simpleContent>
         <xsd:restriction base="oval-sc:EntityItemBaseType">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
            <xsd:attribute name="datatype" type="oval:SimpleDatatypeEnumeration" use="required"
                           fixed="evr_string"/>
         </xsd:restriction>
      </xsd:simpleContent>
   </xsd:complexType>
</xsd:schema>