<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:crf="http://crf.mitre.org/crf-0.xsd" 
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
    xmlns:sch="http://purl.oclc.org/dsdl/schematron" 
    targetNamespace="http://crf.mitre.org/crf-0.xsd" 
    elementFormDefault="qualified" version="0.2">
    <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
    <xsd:annotation>
        <xsd:documentation>
            The following is a description of the elements, types, and 
            attributes that compose the Common Result Format (CRF). Each of the
            elements, types, and attributes that make up the CRF schema are 
            described in detail. This document is intended for developers and 
            assumes some familiarity with XML. A high level description of the
            interaction between these objects is not outlined here.
        </xsd:documentation>
        <xsd:documentation>
            This schema and the CRF specification are currently in DRAFT form.
        </xsd:documentation>
        <xsd:documentation>
            The CRF Schema is maintained by The MITRE Corporation. For more 
            information, including how to get involved in the project and how 
            to submit change requests, please visit the CRF website at 
            http://crf.mitre.org.
        </xsd:documentation>
        <xsd:appinfo>
            <schema>Common Result Format (CRF)</schema>
            <version>0.2</version>
            <date>9/10/2007 11:30:00 AM</date>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:element name="CommonResultSet">
        <xsd:annotation>
            <xsd:documentation>
                The CommonResultSet element is the root element of a Common 
                Result Format document. This element serves as a wrapper around
                a set of assessment results for any number of Assests where 
                those results may have compiled by any number of Assessors. 
                Each CommonResultSet has a Generator section that identifies 
                the application that compiled that document and when it was 
                complied.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Generator" type="crf:GeneratorType" minOccurs="1" maxOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>
                            The Generator element is based on the GeneratorType
                            and identifies the application that compiled the 
                            document and when the document was compiled.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="Assessors" minOccurs="1" maxOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>
                            The Assessors element identifies the set of applications
                            that were used to assess Assets in the compiled CRF
                            document. A CRF document must include at least one 
                            Assessor.  
                        </xsd:documentation>
                    </xsd:annotation>
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Assessor" type="crf:AssessorType" minOccurs="1" maxOccurs="unbounded"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="Assets" minOccurs="1" maxOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>
                            The Assets element identifies the set of Assets
                            that are compiled in the CRF document. A CRF 
                            document must include at least one Asset.
                        </xsd:documentation>
                    </xsd:annotation>
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Asset" type="crf:AssetType" minOccurs="1" maxOccurs="unbounded"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element ref="ds:Signature" minOccurs="0" maxOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>
                            The optional Signature element allows an XML Signature
                            as defined by the W3C to be attached to the document.
                            This allows authentication and data integrity to be 
                            provided to the user. Enveloped signatures are 
                            supported. More information about the official W3C
                            Recommendation regarding XML digital signatures can be
                            found at http://www.w3.org/TR/xmldsig-core/.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="GeneratorType">
        <xsd:annotation>
            <xsd:documentation>
                The GeneratorType complex type defines an element that is used
                to hold information about when a CRF document was compiled, 
                what version of the schema was used, what tool compiled the 
                document, and what version of that tools was used.
            </xsd:documentation>
            <xsd:documentation>
                Additional generator information is also allowed although it is
                not part of the official Schema. Individual generators can 
                place application specific generator information in this section.
                This information will be skipped during validation. 
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="CPEName" type="crf:CPENameType" minOccurs="1" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The CPE Name of the application that compiled the document. 
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="schema_version" type="xsd:decimal" minOccurs="1" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The required schema_version specifies the version of 
                        the CRF schema that the document has been written in
                        and that should be used for validation.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="timestamp" type="xsd:dateTime" minOccurs="1" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The required timestamp specifies when the particular 
                        CRF document was compiled. The format for the timestamp
                        is yyyy-mm-ddThh:mm:ss. 
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="skip">
                <xsd:annotation>
                    <xsd:documentation>
                        This xsd:any element allows for xml defined in any other 
                        namespace to be included in the Generator section of a 
                        document. This space allows an application to encode 
                        additional information as needed and still create valid
                        CRF documnets.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:any>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:simpleType name="CPENameType">
        <xsd:annotation>
            <xsd:documentation>
                See the CPE specification for documentation of the strucuture
                of the CPE Name. (http://cpe.mitre.org)
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="cpe:/([a](:[A-Za-z0-9\._\-~]*(:[A-Za-z0-9\._\-~]*(:[A-Za-z0-9\._\.\-~]*(:[A-Za-z0-9\._\-~]*(:[A-Za-z0-9\._\-~]*(:[A-Za-z0-9\._\-~]*)?)?)?)?)?)?)?"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="AssessorType">
        <xsd:annotation>
            <xsd:documentation>
                The AssessorType complex type defines an element that represents
                an Assessor. Each Assessor is assigned a unique integer id. 
                Each Asset in the document refers up to an Assessor, which 
                allows each Asset to indicate what application was used to 
                assess it.
            </xsd:documentation>
            <xsd:documentation>
                Additional assessor information is also allowed although it is
                not part of the official Schema. Individual applications can 
                place application specific assessor information that they feel
                is important in this section. This infomration will be skipped
                during validation. 
            </xsd:documentation>
            <xsd:documentation>
                TODO: Add in contraint to ensure assessor ids are unique in the document.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="CPEName" type="crf:CPENameType" minOccurs="1" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The CPE Name of the application that compiled the document. 
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="skip">
                <xsd:annotation>
                    <xsd:documentation>
                        This xsd:any element allows for xml defined in any other 
                        namespace to be included in the Assessor section of a 
                        document. This space allows an application to encode 
                        additional information as needed and still create valid
                        CRF documnets.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:any>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:integer" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    Each Assessor has a unique integer id. Assets refer
                    to Assessors by using their id. 
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="AssetType">
        <xsd:annotation>
            <xsd:documentation>
                The AssetType defines the structure of an Asset in CRF.
                Each asset has a set of attributes that identify it and
                an optional set of Findings. 
            </xsd:documentation>
            <xsd:documentation>
                TODO: Add in key constraint to enforce existance of assessorId in the CRF document.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="Id" type="crf:AssetIdType" minOccurs="1" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The id element contains a set of attributes that identify
                        the asset. 
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Findings" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The Findings element is a container for a set of individual
                        Findings for the Asset.
                    </xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="Finding" type="crf:FindingType" minOccurs="1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="assessorId" type="xsd:integer" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    The assessorId attribute identifies the Assessor that did
                    the assessment of the asset.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="timestamp" type="xsd:dateTime" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    The AssetType's timestamp attribute indicates the date
                    and time that the asset was assessed. Note that a given
                    asset may be included in one CRF document many times. Each
                    occurance of an asset will have a different id, and timestamp. 
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>        
    </xsd:complexType>
    <xsd:complexType name="AssetIdType">
        <xsd:annotation>
            <xsd:documentation>
                The AssetIdType defines a set of metadata that idenfies an asset. 
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="name" minOccurs="1" maxOccurs="1" type="xsd:anyURI">
                <xsd:annotation>
                    <xsd:documentation>
                        The name of an asset is its fully qualified domain name.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="interfaces" minOccurs="1" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The interfaces element is a container for one or more
                        interface elements. Each interface element is describes
                        an existing network interface on the asset.
                    </xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="interface" type="crf:InterfaceType" minOccurs="1" maxOccurs="unbounded">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Please refer to the description of the InterfaceType
                                    for more information.
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="properties" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The properties element is an optional container or properies of an asset.
                        See the definition of the Property type for more information about a Property.
                    </xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="property" type="crf:PropertyType" minOccurs="1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="skip">
                <xsd:annotation>
                    <xsd:documentation>
                        This xsd:any element allows for xml defined in any other 
                        namespace to be included in the AssetId section of an
                        Asset. This space allows an application to encode 
                        additional information as needed and still create valid
                        CRF documnets.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:any>
        </xsd:sequence>        
    </xsd:complexType>
    <xsd:complexType name="InterfaceType">
        <xsd:annotation>
            <xsd:documentation>
                The InterfaceType complex type is used to describe an existing 
                network interface on the system. This information can help identify
                a specific system on a given network. The name, ip_address, and 
                mac_address are all optional, but at a minimum an ip_address or 
                mac_address must be specified.
            </xsd:documentation>
            <xsd:documentation>
                TODO: Add in contraint to enforce ip or mac address being specified.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The interface_name element is the name of the interface.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="ip_address" type="xsd:string" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The ip_address element holds the ip address for the interface.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="mac_address" type="xsd:string" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The mac_address element holds teh mac address for the interface.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="PropertyType">
        <xsd:annotation>
            <xsd:documentation>
                The PropertyType defines an element with an name and value.
                The name is a uri that is defined in the CRF specification.
                Each name idenifies an attribute of an asset.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="xsd:string">
                <xsd:attribute name="name" type="crf:PropertyNameEnum" use="required">
                    <xsd:annotation>
                        <xsd:documentation>
                            The name of the property.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute> 
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
    <xsd:complexType name="FindingType">
        <xsd:annotation>
            <xsd:documentation>
                The FindingType defines the strucutre of a Finding on an asset. 
                Each finding is based on a type an identifer which together 
                indicate the common name of the issue being reported on for the 
                current asset.
            </xsd:documentation>
            <xsd:documentation>
                TODO: document the relationships between result value and finding type.
                Thsi is done in the specification does it need to happen here too?
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="check" type="crf:CheckType" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The check element allows Assessors to insert detailed check infomation
                        for a finding on an asset. See the description of the CheckType for 
                        more information on the structure of the check element.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="type" type="crf:FindingTypeEnum" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    The type of finding being reported on.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="id" type="xsd:string" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    The identifier of the finding beinf reported on. The format
                    of this identifier is dictated by the type of the finding.
                </xsd:documentation>
                <xsd:documentation>
                    TODO: Determine if a contraint can be added to force the 
                    id format to align with the id type.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="result" type="crf:ResultEnum" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    The result determined by the assessor for the identified 
                    issue on the asset. See the definition of the ResultEnum
                    for possible result values.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>            
    </xsd:complexType>
    <xsd:complexType name="CheckType">
        <xsd:annotation>
            <xsd:documentation>
                The CheckType defines who CRF supports the incusion of
                detailed checking information for a finding.
            </xsd:documentation>
            <xsd:documentation>
                TODO: determine how to force at least one of check or check result reference.                
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="parameter" type="crf:CheckParamaterType" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>
                        The parameter element allows assessors to encode any parameters
                        that were passed to the check durring assessment.
                    </xsd:documentation>
                    <xsd:documentation>
                        TODO: determine how to strongly encourage inclusiion of parameters
                        for CCE based findings.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="contentReference" type="crf:CheckContentReferenceType" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        A reference to the actual check content used.
                        See the description of the CheckContentReferenceType
                        for details on its structure.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="resultReference" type="crf:CheckResultReferenceType" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        A reference to the detailed results returned for the check.
                        See the description of the CheckResultReferenceType
                        for details on its structure.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="system" type="xsd:string" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    The standard checking system that the check is based on.
                </xsd:documentation>
                <xsd:documentation>
                    TODO: restirct this to just OVAL and XCCDF
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>        
    </xsd:complexType>
    <xsd:complexType name="CheckParamaterType">
        <xsd:annotation>
            <xsd:documentation>
                The CheckParamaterType defines the structure of 
                a paramter passed to a check. Each parammeter 
                has an optional name and required value.
            </xsd:documentation>
            <xsd:documentation>
                TODO: require the value to not be null.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="xsd:string">
                <xsd:attribute name="name" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>
                            The optional name of the parameter passed to the check.
                            The name should be specified if the check used identifies
                            its paramters by name. The name should match the name of the
                            paramater in the check.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute> 
            </xsd:extension>
        </xsd:simpleContent>               
    </xsd:complexType>
    <xsd:complexType name="CheckContentReferenceType">
        <xsd:annotation>
            <xsd:documentation>
                The CheckContentReferenceType defines the structure of a 
                reference out of a CRF document to a document that contains
                a check or set of checks. If the docuement contians a set of
                checks a single check must be idenitfied by name.
            </xsd:documentation>
            <xsd:documentation>
                Optionally a signature may be included. In this case the signature
                is over the contents of the referenced document.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element ref="ds:Signature" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The optional Signature element allows an XML Signature
                        as defined by the W3C to be generated foor the referenced
                        docuemnt and included along with the reference to the check.
                        Including a singature allows assessors to ensure that referenced
                        documents remain unchanged. More information about the official
                        W3C Recommendation regarding XML digital signatures can be 
                        found at http://www.w3.org/TR/xmldsig-core/.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="href" type="xsd:anyURI" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    A reference to the document that contains the check.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="name" type="xsd:string" use="optional">
            <xsd:annotation>
                <xsd:documentation>
                    The optional name of the check that was used. If
                    the document that contains the check contains more
                    than one check a name must be specified. The name 
                    identifies the single check in the set of checks in
                    the docuement.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="CheckResultReferenceType">
        <xsd:annotation>
            <xsd:documentation>
                The CheckResultReferenceType defines the structure of a 
                reference out of a CRF document to a document that contains
                detailed check results or set of check results. If the 
                docuement contians a set of check results a single check result
                must be idenitfied by name.
            </xsd:documentation>
            <xsd:documentation>
                Optionally a signature may be included. In this case the signature
                is over the contents of the referenced document.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element ref="ds:Signature" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>
                        The optional Signature element allows an XML Signature
                        as defined by the W3C to be generated foor the referenced
                        docuemnt and included along with the reference to the check results.
                        Including a singature allows assessors to ensure that referenced
                        documents remain unchanged. More information about the official
                        W3C Recommendation regarding XML digital signatures can be 
                        found at http://www.w3.org/TR/xmldsig-core/.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="href" type="xsd:anyURI" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    A reference to the document that contains the detailed check results.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="name" type="xsd:string" use="optional">
            <xsd:annotation>
                <xsd:documentation>
                    The optional name of the check result. If the document
                    that contains the check result contains more than one
                    check result a name must be specified. The name identifies
                    the single check result in the set of checks in the docuement.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>  
    <xsd:simpleType name="FindingTypeEnum">
        <xsd:annotation>
            <xsd:documentation>
                This enumeration defines the set of allowed finding types.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="CCE">
                <xsd:annotation>
                    <xsd:documentation>
                        CRF uses CCE to identify configuration items. 
                        See http://cce.mitre.org for more information 
                        about CCE and the structure of a CCE identifier.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="CPE">
                <xsd:annotation>
                    <xsd:documentation>
                        See http://cpe.mitre.org for more information
                        about CPE and the structure of a CPE Name.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="CVE">
                <xsd:annotation>
                    <xsd:documentation>
                        CRF uses CVE to name vulnerabilities. A value
                        of CVE indicates that that type of finding is
                        based on a CVE name. See http://cve.mitre.org
                        for more information about CVE and the structure
                        of a CVE name.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="CWE">
                <xsd:annotation>
                    <xsd:documentation>
                        See http://cwe.mnitre.org for more information
                        about CWE and the structure of a CWE identifier.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="Patch">
                <xsd:annotation>
                    <xsd:documentation>
                        See the “Patch Naming” section of the CRF Specification
                        for more information about the structure of a patch names.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ResultEnum">
        <xsd:annotation>
            <xsd:documentation>
                The ResultEnum defines the set of possible result values 
                for a finding.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="true">
                <xsd:annotation>
                    <xsd:documentation>
                        The meaning of a ‘true’ result varies depending on 
                        the type of Finding. See the documentation of the
                        Finding class for a table that defines the meaning
                        of a ‘true’ result for each type of Finding.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="false">
                <xsd:annotation>
                    <xsd:documentation>
                        The meaning of a ‘false’ result varies depending
                        on the type of Finding. See the documentation of
                        the Finding class for a table that defines the 
                        meaning of a ‘false’ result for each type of Finding.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="error">
                <xsd:annotation>
                    <xsd:documentation>
                        A result value of 'error' means that the assessor
                        encountered an error while assessing the asset. 
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="unknown">
                <xsd:annotation>
                    <xsd:documentation>
                        A result value of 'unknown' means that the Assessor
                        was unable to determine a ‘true’ or ‘false’ result.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="not applicable">
                <xsd:annotation>
                    <xsd:documentation>
                        The Assessor determined that the specified item is not
                        valid on the Asset.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="not evaluated">
                <xsd:annotation>
                    <xsd:documentation>
                        A choice was made not to check the asset for the
                        identified item. The actual result is in essence
                        unknown since if evaluation had occurred it could
                        have been either true or false.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="PropertyNameEnum">
        <xsd:annotation>
            <xsd:documentation>
                The PropertyNameEnum defines the set of valid property names
                and their meanings.
            </xsd:documentation>
            <xsd:documentation>
                TODO: complete this set of names.
                In a future revision find a place to put these names outside
                the crf specification since this set of names is common to 
                several standards.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:anyURI">
            <xsd:enumeration value="urn:crf:asset:identifier:mac">
                <xsd:annotation>
                    <xsd:documentation>
                        A mac address.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="urn:crf:asset:identifier:ipv4">
                <xsd:annotation>
                    <xsd:documentation>
                        A version 4 ip address.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="urn:crf:asset:identifier:ipv6">
                <xsd:annotation>
                    <xsd:documentation>
                        A version 6 ip address.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="urn:crf:asset:identifier:fqdn">
                <xsd:annotation>
                    <xsd:documentation>
                        A fully qualified domain name.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>