﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema targetNamespace="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5" elementFormDefault="qualified" version="5.5" 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">
  <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" minOccurs="1" maxOccurs="1" />
        <xsd:element name="system_info" type="oval-sc:SystemInfoType" minOccurs="1" maxOccurs="1" />
        <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" minOccurs="1" maxOccurs="1" />
      <xsd:element name="os_version" type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="architecture" type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="primary_host_name" type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="interfaces" type="oval-sc:InterfacesType" minOccurs="1" maxOccurs="1" />
      <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" minOccurs="1" maxOccurs="1" />
      <xsd:element name="ip_address" type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="mac_address" type="xsd:string" minOccurs="1" maxOccurs="1" />
    </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:integer" 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="1" />
    </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:simpleContent>
      <xsd:extension base="xsd:anySimpleType">
        <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:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="EntityItemAnyType">
    <xsd:simpleContent>
      <xsd:extension base="oval-sc:EntityItemBaseType" />
    </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: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: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: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: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:restriction>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:schema>