3.1.1.1 Populating the Data Model

The server implementation extracts information for the data model from the update metadata. Except as specified below, the update metadata does not need to be interpreted by the server. Because the metadata is well-formed XML, the properties specified below can all be extracted using XPATH queries, as specified in [XPATH]. The manner in which the server obtains the update metadata is specified in [MS-WSUSSS] (section 3.1.4.6, GetUpdateData).

Revision Table

There is one entry in the revision table for each metadata revision in the server. The RevisionID element is populated with a unique server-assigned value. The remaining elements are populated from the revision metadata using the following unqualified XPATHs.

Property

XPATH

UpdateID

/Update/UpdateIdentity/@UpdateID

RevisionNumber

/Update/UpdateIdentity/@RevisionNumber

UpdateType

/Update/Properties/@UpdateType

Driver Table

There is at least one entry in the driver table for each entry in the revision table with UpdateType=Driver. The RevisionID element is populated with a reference to the associated entry in the revision table. The remaining elements are populated from the revision metadata using the following unqualified XPATHs.

Property

XPATH

HardwareID

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@HardwareID

DriverVerDate

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@DriverVerDate

DriverVerVersion

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@DriverVerVersion

Class

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@Class

Manufacturer

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@Manufacturer

Provider

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@Provider

Model

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@Model

WhqlDriverID

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@WhqlDriverID

Driver FeatureScore Table

There can be anywhere from 0 to an unlimited number of FeatureScore entries per RevisionID/HardwareID. The RevisionID element is populated with a reference to the associated entry in the revision table. The remaining elements are populated from the revision metadata using the following unqualified XPATHs.

Property

XPATH

HardwareID

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@HardwareID

OperatingSystem

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/FeatureScore/@OperatingSystem

FeatureScore

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/FeatureScore/@FeatureScore

Driver Distribution ComputerHardwareID Table

There can be anywhere from 0 to an unlimited number of Distribution ComputerHardwareID entries per RevisionID/HardwareID. The RevisionID element is populated with a reference to the associated entry in the revision table. The remaining elements are populated from the revision metadata using the following unqualified XPATHs.

Property

XPATH

HardwareID

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@HardwareID

DistributionComputerHardwareId

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/

DistributionComputerHardwareId/text()

Driver Target ComputerHardwareID Table

There can be anywhere from 0 to an unlimited number of Target ComputerHardwareID entries per RevisionID/HardwareID. The RevisionID element is populated with a reference to the associated entry in the revision table. The remaining elements are populated from the revision metadata using the following unqualified XPATHs.

Property

XPATH

HardwareID

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/@HardwareID

TargetComputerHardwareId

/Update/ApplicabilityRules/Metadata/WindowsDriverMetaData/

TargetComputerHardwareId/text()

Prerequisite Table

There is one entry in the prerequisite table for each prerequisite relationship declared in the revision metadata. The RevisionID element is populated with a reference to an entry in the revision table corresponding to the revision metadata declaring the prerequisite relationship. The PrerequisiteUpdateID element is populated by using one of the following unqualified XPATHs.

Property

XPATH

PrerequisiteUpdateID

/Update/Relationships/Prerequisites/AtLeastOne/UpdateIdentity/@UpdateID

PrerequisiteUpdateID

/Update/Relationships/Prerequisites/UpdateIdentity/@UpdateID

The server-assigned ClauseID element is the same between different entries in the table if and only if:

  • The entries have the same RevisionID element, and

  • The entries were populated from the same AtLeastOne XML element from the revision metadata as defined by the following XPATH: /Update/Relationships/Prerequisites/AtLeastOne/UpdateIdentity/@UpdateID.

If the PrerequisiteUpdateID element was populated with the first XPATH query in the preceding table, then the IsCategory element is populated using the following XPATH query:

/Update/Relationships/Prerequisites/AtLeastOne/@IsCategory

Otherwise, the IsCategory element is populated with FALSE.

Bundle Table

There is one entry in the bundle table for each bundle relationship declared in the revision metadata. Each entry has the RevisionID element populated with a reference to the entry in the revision table corresponding to the revision metadata that declares the prerequisite relationship.

There is one entry in the table for each node returned from the following XPATH query:

/Update/Relationships/BundledUpdates/AtLeastOne/UpdateIdentity

The entry has the following elements:

RevisionID: Set to the RevisionID of the metadata declaring the bundle relationship.

BundledRevisionID: Set to the RevisionID of the entry in the revision table whose UpdateID and RevisionNumber match the values in the XPATH query above.

ClauseID: This server-assigned element is the same between different entries in the table if and only if:

  • The entries have the same RevisionID element, and

  • The entries were populated from the same AtLeastOne XML element from the revision metadata as defined by the following XPATH: /Update/Relationships/ BundledUpdates/AtLeastOne/UpdateIdentity.

Metadata Table

The metadata table is populated with metadata fragments generated from the original metadata. For each revision, the server generates the following entries in the metadata table.

Core: There is exactly one "Core" entry created from the revisions metadata.

RevisionID: References the entry in the revision table for the revisions metadata.

FragmentType: Core.

Locale: NULL.

XmlFragment: MUST be derived from the original metadata by:

  • Collecting the following XmlNodes:

    • The XmlNode identified by XPATH /Update/UpdateIdentity

    • The XmlNode identified by XPATH /Update/Properties, all attributes removed except: UpdateType, ExplicitlyDeployable, AutoSelectOnWebSites, OSUpgrade, and EulaID

    • The XmlNode identified by XPATH /Update/Relationships

    • The XmlNode identified by XPATH /Update/ApplicabilityRules

  • Then, for each XmlNode, it MUST transform element names as follows:

    • Prepend "b." to any element in namespace http://schemas.microsoft.com/msus/2002/12/BaseApplicabilityRules

    • Prepend "m." to any element in namespace http://schemas.microsoft.com/msus/2002/12/MsiApplicabilityRules

    • Prepend "d." to any element in namespace http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/WindowsDriver <35>

  • Next, strip all namespace definitions.

    Note The resulting fragment is not well-formed XML.

Extended: There is exactly one "Extended" entry created from the revisions metadata.

RevisionID: References the entry in the revision table for the revisions metadata.

FragmentType: Extended.

Locale: NULL.

XmlFragment: MUST be derived from the original metadata by concatenating the following strings together after removing all XML namespace definitions from each string (the result of which is not well-formed XML):

  • The XmlNode identified by XPATH /Update/Properties, with the following attributes removed: UpdateType, ExplicitlyDeployable, AutoSelectOnWebSites, EulaID, PublicationState, PublisherID, CreationDate, IsPublic, LegacyName, DetectoidType, OSUpgrade.

  • The XmlNode identified by XPATH /Update/Files.

  • The XmlNode identified by XPATH /Update/HandlerSpecificData.

LocalizedProperties: There are one or more "LocalizedProperties" entries that are created from the revision's metadata: one for each XmlNode, N, with unqualified XPATH /Update/LocalizedPropertiesCollection/LocalizedProperties.

RevisionID: References the entry in the revision table for the revisions metadata.

FragmentType: LocalizedProperties.

XmlFragment: Strip namespaces from the XmlNode.

Locale: The "Language" sub-element of the XmlNode.

Eula: There are zero or more "Eula" entries created from the revision's metadata: one for each XmlNode, N, with unqualified XPATH /Update/LocalizedPropertiesCollection/EulaFile.

RevisionID: References the entry in the revision table for the revision's metadata.

FragmentType: Eula.

XmlFragment: Strip namespaces from the XmlNode.

Locale: The "Language" attribute of the XmlNode.

GeoId: Specifies the geographic region for which the end user license agreement (EULA) XML fragment is intended, if any. No GeoId or an empty GeoId indicates that the EULA is a “Rest of World” EULA with no region-specific targeting, as specified in the [ISO-3166] three-letter region codes.<36>

Note Clients don't use the EULA fragments obtained from a Windows Server Update Services (WSUS) server (this fragment is only used by clients talking to the WSUS). Instead, a WSUS server administrator MUST accept EULAs on behalf of clients.<37>

Client Table

This protocol does not mandate a specific mechanism for populating this table. Implementations can do so via administrative configuration , at runtime, or by other means.<38>

Target Group Table

This protocol does not mandate a specific mechanism for populating this table. Implementations can do so by implementation-specific<39> means.

Deployment Table

This protocol does not mandate a specific mechanism for populating this table. Implementations can do so by implementation-specific<40> means.