<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ai="http://scap.nist.gov/schema/asset-identification/1.1"
    xmlns:core="http://scap.nist.gov/schema/reporting-core/1.1" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
    xmlns:xnl="urn:oasis:names:tc:ciq:xsdschema:xNL:2.0"
    targetNamespace="http://scap.nist.gov/schema/asset-identification/1.1" elementFormDefault="qualified"
    attributeFormDefault="unqualified" version="1.1.1" xmlns:cpe-name="http://cpe.mitre.org/naming/2.0">
    <xs:annotation>
        <xs:appinfo>
            <schema>Asset Identification</schema>
            <author>David Waltermire, Adam Halbardier, John Wunder</author>
            <version>1.1.1</version>
            <date>2012-02-13</date>
        </xs:appinfo>
    </xs:annotation>
    <xs:import namespace="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
        schemaLocation="xAL.xsd"/>
    <xs:import namespace="urn:oasis:names:tc:ciq:xsdschema:xNL:2.0"
        schemaLocation="xNL.xsd"/>
    <xs:import namespace="http://scap.nist.gov/schema/reporting-core/1.1"
        schemaLocation="reporting-core_1.1.0.xsd"/>
    <xs:import namespace="http://cpe.mitre.org/naming/2.0"
        schemaLocation="../../cpe/2.3/cpe-naming_2.3.xsd"/>
    <!--The following elements are first-order citizens of this model-->
    <xs:element name="asset-related" type="ai:asset-identification-type">
        <xs:key name="assetRelKey">
            <xs:selector xpath="ai:asset"/>
            <xs:field xpath="@id"/>
        </xs:key>
        <xs:keyref refer="ai:assetRelKey" name="assetRelKeyRef">
            <xs:selector xpath="."/>
            <xs:field xpath="@asset-ref"/>
        </xs:keyref>
        <xs:keyref refer="ai:assetRelKey" name="assetRelRefSubjKeyRef">
            <xs:selector xpath="core:relationships/core:relationship"/>
            <xs:field xpath="@subject"/>
        </xs:keyref>
        <xs:keyref refer="ai:assetRelKey" name="assetRelRefObjKeyRef">
            <xs:selector xpath="core:relationships/core:relationship/core:ref"/>
            <xs:field xpath="."/>
        </xs:keyref>
    </xs:element>
    <xs:complexType name="asset-identification-type">
        <xs:complexContent>
            <xs:extension base="ai:assets-type">
                <xs:attribute name="asset-ref" type="xs:NCName" use="required"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="assets" type="ai:assets-type">
        <xs:key name="assetsRelKey">
            <xs:selector xpath="ai:asset"/>
            <xs:field xpath="@id"/>
        </xs:key>
        <xs:keyref refer="ai:assetsRelKey" name="assetsRelRefSubjKeyRef">
            <xs:selector xpath="core:relationships/core:relationship"/>
            <xs:field xpath="@subject"/>
        </xs:keyref>
        <xs:keyref refer="ai:assetsRelKey" name="assetsRelRefObjKeyRef">
            <xs:selector xpath="core:relationships/core:relationship/core:ref"/>
            <xs:field xpath="."/>
        </xs:keyref>
    </xs:element>
    <xs:complexType name="assets-type">
        <xs:complexContent>
            <xs:extension base="core:relationships-container-type">
                <xs:sequence>
                    <xs:element name="asset" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element ref="ai:asset"/>
                            </xs:sequence>
                            <xs:attribute name="id" type="xs:NCName" use="required">
                                <xs:annotation>
                                    <xs:documentation>An internal ID to identify this asset.</xs:documentation>
                                </xs:annotation>
                            </xs:attribute>
                            <xs:anyAttribute namespace="##other">
                                <xs:annotation>
                                    <xs:documentation>A placeholder so that content creators can add attributes as
                                        desired.</xs:documentation>
                                </xs:annotation>
                            </xs:anyAttribute>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="asset" type="ai:asset-type" abstract="true">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes that are common to all assets.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="it-asset" type="ai:it-asset-type" abstract="true" substitutionGroup="ai:asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes that are common to all IT assets</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="circuit" type="ai:circuit-type" substitutionGroup="ai:it-asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a circuit.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="computing-device" type="ai:computing-device-type" substitutionGroup="ai:it-asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a computing device.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="data" type="ai:data-type" substitutionGroup="ai:asset">
        <xs:annotation>
            <xs:documentation>A stub element to represent the identification of data. This element can be extended in
                the future for specific types of data.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="database" substitutionGroup="ai:it-asset" type="ai:database-type">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a database.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="network" type="ai:network-type" substitutionGroup="ai:it-asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a network.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <!-- This element leverages the OASIS xNL specification which spells it as "organisation" -->
    <xs:element name="organization" type="ai:organization-type" substitutionGroup="ai:asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for an organization.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="person" type="ai:person-type" substitutionGroup="ai:asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a person.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="service" substitutionGroup="ai:it-asset" type="ai:service-type">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a service.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="software" type="ai:software-type" substitutionGroup="ai:it-asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a software installation</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="system" type="ai:system-type" substitutionGroup="ai:it-asset">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a system.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="website" substitutionGroup="ai:it-asset" type="ai:website-type">
        <xs:annotation>
            <xs:documentation>Holds identifying attributes for a website.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <!--The following types correspond directly to the elements above-->
    <xs:complexType name="asset-type" abstract="true">
        <xs:sequence>
            <xs:element ref="ai:synthetic-id" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="ai:locations" minOccurs="0"/>
            <xs:element name="extended-information" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>This is a container to hold any addtional identifying information for an asset, as
                        specified by the content creator.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:any namespace="##other" processContents="lax" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute ref="ai:timestamp"/>
    </xs:complexType>
    <xs:complexType name="it-asset-type" abstract="true">
        <xs:complexContent>
            <xs:extension base="ai:asset-type"/>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="circuit-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element name="circuit-name" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The common name for the circult.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:token">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="computing-device-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element name="distinguished-name" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The full X.500 distinguished name for the device.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:token">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:element ref="ai:cpe" minOccurs="0" maxOccurs="unbounded">
                        <xs:annotation>
                            <xs:documentation>The hardware CPE name for the device (CPE 2.2 URI or CPE 2.3 Formatted String).</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="connections" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The IP network interface connections that exist for the device (regardless
                                of if the network interface is connected to a network or not).</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="connection" type="ai:network-interface-type" maxOccurs="unbounded">
                                    <xs:annotation>
                                        <xs:documentation>An IP network interface connection.</xs:documentation>
                                    </xs:annotation>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" ref="ai:fqdn"/>
                    <xs:element name="hostname" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The hostname of the computing device.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="ai:hostname-type">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" name="motherboard-guid">
                        <xs:annotation>
                            <xs:documentation>The motherboard globally unique identifier of the computing
                                device.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:string">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="data-type">
        <xs:complexContent>
            <xs:extension base="ai:asset-type"/>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="database-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element minOccurs="0" name="instance-name">
                        <xs:annotation>
                            <xs:documentation>The name of the database instance being identified.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:token">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="network-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element name="network-name" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The name of the network as commonly referred to.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:normalizedString">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:choice minOccurs="0">
                        <xs:element name="ip-net-range">
                            <xs:annotation>
                                <xs:documentation>The start and end IP addresses to indicate the range of IP addresses
                                    covered by this network.</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="ip-net-range-start" type="ai:ip-address-type">
                                        <xs:annotation>
                                            <xs:documentation>The starting IP address in the network.</xs:documentation>
                                        </xs:annotation>
                                    </xs:element>
                                    <xs:element name="ip-net-range-end" type="ai:ip-address-type">
                                        <xs:annotation>
                                            <xs:documentation>The ending IP address in the network.</xs:documentation>
                                        </xs:annotation>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="cidr">
                            <xs:annotation>
                                <xs:documentation>The classless inter-domain routing notation for the
                                    network.</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:extension base="ai:cidr-type">
                                        <xs:attribute ref="ai:source"/>
                                        <xs:attribute ref="ai:timestamp"/>
                                        <xs:anyAttribute namespace="##other"/>
                                    </xs:extension>
                                </xs:simpleContent>
                            </xs:complexType>
                        </xs:element>
                    </xs:choice>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="organization-type">
        <xs:complexContent>
            <xs:extension base="ai:asset-type">
                <xs:sequence>
                    <xs:element ref="xnl:OrganisationNameDetails" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element ref="ai:email-address" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element ref="ai:telephone-number" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element ref="ai:website-url" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="person-type">
        <xs:complexContent>
            <xs:extension base="ai:asset-type">
                <xs:sequence>
                    <xs:element ref="xnl:PersonName" minOccurs="0"/>
                    <xs:element ref="ai:email-address" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element ref="ai:telephone-number" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="birthdate" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The birthdate of the person.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:date">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="service-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element minOccurs="0" name="host">
                        <xs:annotation>
                            <xs:documentation>The hostname or IP address where the service is hosted.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:choice>
                                <xs:element ref="ai:fqdn"/>
                                <xs:element ref="ai:ip-address"/>
                            </xs:choice>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="port" maxOccurs="unbounded" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The port to which the service is bound.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="ai:port-type">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="port-range" maxOccurs="unbounded" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The inclusive port range to which the service is
                                    bound.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:attribute name="lower-bound" type="ai:port-type" use="required"/>
                            <xs:attribute name="upper-bound" type="ai:port-type" use="required"/>
                            <xs:attribute ref="ai:source"/>
                            <xs:attribute ref="ai:timestamp"/>
                            <xs:anyAttribute namespace="##other"/>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="protocol" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The protocol used to interact with the service.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:string">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="software-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element name="installation-id" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>Any identifier for the software instance (installation)</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:token">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:element ref="ai:cpe" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The CPE name for the software (CPE 2.2 URI or CPE 2.3 Formatted String).</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="license" minOccurs="0" maxOccurs="unbounded">
                        <xs:annotation>
                            <xs:documentation>The license key for the software.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:string">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="system-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element name="system-name" minOccurs="0" maxOccurs="unbounded">
                        <xs:annotation>
                            <xs:documentation>The name of the system. It is possible that a system have multiple names,
                                or even abbreviated names. Each one of those names may be captured
                                here.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:token">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="version" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The version of the system.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:token">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="website-type">
        <xs:complexContent>
            <xs:extension base="ai:it-asset-type">
                <xs:sequence>
                    <xs:element name="document-root" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The absolute path to the document root location of the website on the
                                host.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:token">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="locale" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>The locale of the website represented as an RFC 5646 language, and optionally, region code.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="ai:locale-type">
                                    <xs:attribute ref="ai:source"/>
                                    <xs:attribute ref="ai:timestamp"/>
                                    <xs:anyAttribute namespace="##other"/>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!--The follow elements support the first-order citizen elements defined above-->
    <xs:element name="cpe">
        <xs:annotation>
            <xs:documentation>A Common Platform Enumeration (CPE) name (CPE 2.2 URI or CPE 2.3 Formatted String).</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="ai:cpe-type">
                    <xs:attribute ref="ai:source"/>
                    <xs:attribute ref="ai:timestamp"/>
                    <xs:anyAttribute namespace="##other"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="synthetic-id">
        <xs:annotation>
            <xs:documentation>Holds the synthetic ID for the asset</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="resource" type="xs:anyURI" use="required">
                <xs:annotation>
                    <xs:documentation>The namespace governing this synthetic ID.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="id" type="xs:token" use="required">
                <xs:annotation>
                    <xs:documentation>The ID of the asset within the resource namespace.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="email-address">
        <xs:annotation>
            <xs:documentation>An email address</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:token">
                    <xs:attribute ref="ai:source"/>
                    <xs:attribute ref="ai:timestamp"/>
                    <xs:anyAttribute namespace="##other"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="fqdn">
        <xs:annotation>
            <xs:documentation>The fully qualified domain name for the object.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:token">
                    <xs:attribute ref="ai:source"/>
                    <xs:attribute ref="ai:timestamp"/>
                    <xs:anyAttribute namespace="##other"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="ip-address" type="ai:ip-address-type">
        <xs:annotation>
            <xs:documentation>An IP address</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="location" abstract="true"/>
    <xs:element name="location-address" type="xal:AddressDetails" substitutionGroup="ai:location">
        <xs:annotation>
            <xs:documentation>The address where an asset is located.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="location-point" substitutionGroup="ai:location">
        <xs:annotation>
            <xs:documentation>The geographic point where an asset is located.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="latitude" use="required">
                <xs:annotation>
                    <xs:documentation>The latitude of the asset, defined between -90 (90 degrees South, inclusive) and
                        90 (90 degrees North, inclusive).</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:double">
                        <xs:minInclusive value="-90"/>
                        <xs:maxInclusive value="90"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="longitude" use="required">
                <xs:annotation>
                    <xs:documentation>The longitude of the asset, defined between -180 (180 degrees West, exclusive) and
                        180 (180 degrees East, inclusive).</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:double">
                        <xs:minExclusive value="-180"/>
                        <xs:maxInclusive value="180"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="elevation" type="xs:double">
                <xs:annotation>
                    <xs:documentation>The elevation of the asset, specified in meters from sea level.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="radius">
                <xs:annotation>
                    <xs:documentation>The radius of a horizontal circle centered on the point within which the asset
                        resides.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:double">
                        <xs:minInclusive value="0"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute ref="ai:source"/>
            <xs:attribute ref="ai:timestamp"/>
            <xs:anyAttribute namespace="##other"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="location-region" substitutionGroup="ai:location">
        <xs:annotation>
            <xs:documentation>The region where an asset is located.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:normalizedString">
                    <xs:attribute ref="ai:source"/>
                    <xs:attribute ref="ai:timestamp"/>
                    <xs:anyAttribute namespace="##other"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="locations">
        <xs:annotation>
            <xs:documentation>One or more locations where this asset resides</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ai:location" maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>The base for a subtitution group for elements that contain location
                            information.</xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="served-by" type="ai:service-type">
        <xs:annotation>
            <xs:documentation>The service that is serving up the asset.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="telephone-number">
        <xs:annotation>
            <xs:documentation>The telephone number. For a North American number, the number must be valid and the format
                must be XXX-XXX-XXXX where X is a digit. For an international number, the number must begin with a '+'
                symbol, followed by 7 to 15 digits. A space may be used between digits, as appropriate. For example: +88
                888 888 8 (this is following the ITU-T E.123 notation).</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="ai:telephone-number-type">
                    <xs:attribute ref="ai:source"/>
                    <xs:attribute ref="ai:timestamp"/>
                    <xs:anyAttribute namespace="##other"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="website-url">
        <xs:annotation>
            <xs:documentation>The URL to the website.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:anyURI">
                    <xs:attribute ref="ai:source"/>
                    <xs:attribute ref="ai:timestamp"/>
                    <xs:anyAttribute namespace="##other"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <!--The following types support the supporting elements above-->
    <xs:attribute name="source" type="xs:string">
        <xs:annotation>
            <xs:documentation>Contains the source of the information. The value of this field is left open to the
                content producer, but MAY include a synthetic ID of the asset which sourced the information, another ID
                of the source, or a description of the source.</xs:documentation>
        </xs:annotation>
    </xs:attribute>
    <xs:attribute name="timestamp" type="xs:dateTime">
        <xs:annotation>
            <xs:documentation>Indicates when the data was last known to be correct.</xs:documentation>
        </xs:annotation>
    </xs:attribute>
    <xs:complexType name="ip-address-type">
        <xs:sequence>
            <xs:element name="ip-v4" minOccurs="0">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="ai:ipv4-type">
                            <xs:attribute ref="ai:source"/>
                            <xs:attribute ref="ai:timestamp"/>
                            <xs:anyAttribute namespace="##other"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="ip-v6" minOccurs="0">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="ai:ipv6-type">
                            <xs:attribute ref="ai:source"/>
                            <xs:attribute ref="ai:timestamp"/>
                            <xs:anyAttribute namespace="##other"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="network-interface-type">
        <xs:sequence>
            <xs:element ref="ai:ip-address" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>The IP address for this network interface.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="mac-address" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>The MAC address associated with this network interface.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="ai:mac-address-type">
                            <xs:attribute ref="ai:source"/>
                            <xs:attribute ref="ai:timestamp"/>
                            <xs:anyAttribute namespace="##other"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="url" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>A URL in a relevant DNS server for this IP address.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:anyURI">
                            <xs:attribute ref="ai:source"/>
                            <xs:attribute ref="ai:timestamp"/>
                            <xs:anyAttribute namespace="##other"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="subnet-mask" type="ai:ip-address-type" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>The subnet mask address for this network interface.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="default-route" type="ai:ip-address-type" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>The IP address for the default gateway of this connection.</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="cidr-type">
        <xs:restriction base="xs:token">
            <xs:pattern
                value="([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))/([0-9]|[1-2][0-9]|3[0-2])"
            />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="cpe-type">
        <xs:union memberTypes="cpe-name:cpe22Type cpe-name:cpe23Type"/>
    </xs:simpleType>
    <xs:simpleType name="hostname-type">
        <xs:restriction base="xs:token">
            <xs:pattern value="[\w\-]+(\.[\w\-]+){0,}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ipv4-type">
        <xs:restriction base="xs:token">
            <xs:pattern
                value="([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))"
            />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ipv6-type">
        <xs:restriction base="xs:token">
            <xs:pattern value="([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="locale-type">
        <xs:restriction base="xs:token">
            <xs:pattern value="[a-zA-Z]{2,3}(-([a-zA-Z]{2}|[0-9]{3}))?"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="mac-address-type">
        <xs:restriction base="xs:token">
            <xs:pattern value="([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="port-type">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="65535"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="telephone-number-type">
        <xs:restriction base="xs:token">
            <xs:pattern value="(([2-9][0-8]\d-[2-9]\d{2}-[0-9]{4})|(\+([0-9] ?){6,14}[0-9]))"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
<!-- CHANGELOG
  
  date           change                    remarks
  
  02/13/12       Update the version number Updated the schema version to 1.1.1
                 Update the schema date    Updated the schema date to 2012-02-13
                 Allow dashes in hostname  Hostnames are permitted to include dashes, so the regex on hostname-type was updated appropriately.
                                           
-->
