tuomur / python-odata

A simple library for read/write access to OData services
MIT License
79 stars 59 forks source link

Add support for metadata by reference / Redfish #19

Open bewing opened 6 years ago

bewing commented 6 years ago

This may be out of scope, but I'm working with Redfish data from Dell, and reflect_entities is not correctly loading the entities available.

From digging into this, it appears to be because DMTF/Redfish has broken their metadata up into many subfiles included by reference, and then entity containers just "extend" containers from these reference files.

Is it feasible to be able to load and cache these references when building the entities list? Or is something with a scope as large as this better off with an offline generation of service specific python classes?

Example data: $metadata

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2014-2016 Distributed Management Task Force, Inc. (DMTF). All rights reserved.
-->
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
   <edmx:Reference Uri="/redfish/v1/Schemas/ServiceRoot_v1.xml">
      <edmx:Include Namespace="ServiceRoot" />
      <edmx:Include Namespace="ServiceRoot.v1_0_0" />
      <edmx:Include Namespace="ServiceRoot.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/AccountService_v1.xml">
      <edmx:Include Namespace="AccountService" />
      <edmx:Include Namespace="AccountService.v1_0_0" />
      <edmx:Include Namespace="AccountService.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Chassis_v1.xml">
      <edmx:Include Namespace="Chassis" />
      <edmx:Include Namespace="Chassis.v1_0_0" />
      <edmx:Include Namespace="Chassis.v1_0_1" />
      <edmx:Include Namespace="Chassis.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ChassisCollection_v1.xml">
      <edmx:Include Namespace="ChassisCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ComputerSystem_v1.xml">
      <edmx:Include Namespace="ComputerSystem" />
      <edmx:Include Namespace="ComputerSystem.v1_0_0" />
      <edmx:Include Namespace="ComputerSystem.v1_0_1" />
      <edmx:Include Namespace="ComputerSystem.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ComputerSystemCollection_v1.xml">
      <edmx:Include Namespace="ComputerSystemCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/EthernetInterface_v1.xml">
      <edmx:Include Namespace="EthernetInterface" />
      <edmx:Include Namespace="EthernetInterface.v1_0_0" />
      <edmx:Include Namespace="EthernetInterface.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/EthernetInterfaceCollection_v1.xml">
      <edmx:Include Namespace="EthernetInterfaceCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Event_v1.xml">
      <edmx:Include Namespace="Event" />
      <edmx:Include Namespace="Event.v1_0_0" />
      <edmx:Include Namespace="Event.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/EventService_v1.xml">
      <edmx:Include Namespace="EventService" />
      <edmx:Include Namespace="EventService.v1_0_0" />
      <edmx:Include Namespace="EventService.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/IPAddresses_v1.xml">
      <edmx:Include Namespace="IPAddresses" />
      <edmx:Include Namespace="IPAddresses.v1_0_0" />
      <edmx:Include Namespace="IPAddresses.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/JsonSchemaFile_v1.xml">
      <edmx:Include Namespace="JsonSchemaFile" />
      <edmx:Include Namespace="JsonSchemaFile.v1_0_0" />
      <edmx:Include Namespace="JsonSchemaFile.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/JsonSchemaFileCollection_v1.xml">
      <edmx:Include Namespace="JsonSchemaFileCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/EventDestination_v1.xml">
      <edmx:Include Namespace="EventDestination" />
      <edmx:Include Namespace="EventDestination.v1_0_0" />
      <edmx:Include Namespace="EventDestination.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/EventDestinationCollection_v1.xml">
      <edmx:Include Namespace="EventDestinationCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/LogEntry_v1.xml">
      <edmx:Include Namespace="LogEntry" />
      <edmx:Include Namespace="LogEntry.v1_0_0" />
      <edmx:Include Namespace="LogEntry.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/LogEntryCollection_v1.xml">
      <edmx:Include Namespace="LogEntryCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Role_v1.xml">
      <edmx:Include Namespace="Role" />
      <edmx:Include Namespace="Role.v1_0_0" />
      <edmx:Include Namespace="Role.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/RoleCollection_v1.xml">
      <edmx:Include Namespace="RoleCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/LogService_v1.xml">
      <edmx:Include Namespace="LogService" />
      <edmx:Include Namespace="LogService.v1_0_0" />
      <edmx:Include Namespace="LogService.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/LogServiceCollection_v1.xml">
      <edmx:Include Namespace="LogServiceCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Manager_v1.xml">
      <edmx:Include Namespace="Manager" />
      <edmx:Include Namespace="Manager.v1_0_0" />
      <edmx:Include Namespace="Manager.v1_0_1" />
      <edmx:Include Namespace="Manager.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ManagerCollection_v1.xml">
      <edmx:Include Namespace="ManagerCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ManagerAccount_v1.xml">
      <edmx:Include Namespace="ManagerAccount" />
      <edmx:Include Namespace="ManagerAccount.v1_0_0" />
      <edmx:Include Namespace="ManagerAccount.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ManagerAccountCollection_v1.xml">
      <edmx:Include Namespace="ManagerAccountCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ManagerNetworkProtocol_v1.xml">
      <edmx:Include Namespace="ManagerNetworkProtocol" />
      <edmx:Include Namespace="ManagerNetworkProtocol.v1_0_0" />
      <edmx:Include Namespace="ManagerNetworkProtocol.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Message_v1.xml">
      <edmx:Include Namespace="Message" />
      <edmx:Include Namespace="Message.v1_0_0" />
      <edmx:Include Namespace="Message.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/MessageRegistry_v1.xml">
      <edmx:Include Namespace="MessageRegistry" />
      <edmx:Include Namespace="MessageRegistry.v1_0_0" />
      <edmx:Include Namespace="MessageRegistry.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/MessageRegistryCollection_v1.xml">
      <edmx:Include Namespace="MessageRegistryCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/MessageRegistryFile_v1.xml">
      <edmx:Include Namespace="MessageRegistryFile" />
      <edmx:Include Namespace="MessageRegistryFile.v1_0_0" />
      <edmx:Include Namespace="MessageRegistryFile.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/MessageRegistryFileCollection_v1.xml">
      <edmx:Include Namespace="MessageRegistryFileCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/PhysicalContext_v1.xml">
      <edmx:Include Namespace="PhysicalContext" />
      <edmx:Include Namespace="PhysicalContext.v1_0_0" />
      <edmx:Include Namespace="PhysicalContext.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Power_v1.xml">
      <edmx:Include Namespace="Power" />
      <edmx:Include Namespace="Power.v1_0_0" />
      <edmx:Include Namespace="Power.v1_0_1" />
      <edmx:Include Namespace="Power.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Privileges_v1.xml">
      <edmx:Include Namespace="Privileges" />
      <edmx:Include Namespace="Privileges.v1_0_0" />
      <edmx:Include Namespace="Privileges.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Redundancy_v1.xml">
      <edmx:Include Namespace="Redundancy" />
      <edmx:Include Namespace="Redundancy.v1_0_0" />
      <edmx:Include Namespace="Redundancy.v1_0_1" />
      <edmx:Include Namespace="Redundancy.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Processor_v1.xml">
      <edmx:Include Namespace="Processor" />
      <edmx:Include Namespace="Processor.v1_0_0" />
      <edmx:Include Namespace="Processor.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ProcessorCollection_v1.xml">
      <edmx:Include Namespace="ProcessorCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SerialInterface_v1.xml">
      <edmx:Include Namespace="SerialInterface" />
      <edmx:Include Namespace="SerialInterface.v1_0_0" />
      <edmx:Include Namespace="SerialInterface.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SerialInterfaceCollection_v1.xml">
      <edmx:Include Namespace="SerialInterfaceCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Session_v1.xml">
      <edmx:Include Namespace="Session" />
      <edmx:Include Namespace="Session.v1_0_0" />
      <edmx:Include Namespace="Session.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SessionCollection_v1.xml">
      <edmx:Include Namespace="SessionCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SessionService_v1.xml">
      <edmx:Include Namespace="SessionService" />
      <edmx:Include Namespace="SessionService.v1_0_0" />
      <edmx:Include Namespace="SessionService.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SimpleStorage_v1.xml">
      <edmx:Include Namespace="SimpleStorage" />
      <edmx:Include Namespace="SimpleStorage.v1_0_0" />
      <edmx:Include Namespace="SimpleStorage.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SimpleStorageCollection_v1.xml">
      <edmx:Include Namespace="SimpleStorageCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Task_v1.xml">
      <edmx:Include Namespace="Task" />
      <edmx:Include Namespace="Task.v1_0_0" />
      <edmx:Include Namespace="Task.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/TaskCollection_v1.xml">
      <edmx:Include Namespace="TaskCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/TaskService_v1.xml">
      <edmx:Include Namespace="TaskService" />
      <edmx:Include Namespace="TaskService.v1_0_0" />
      <edmx:Include Namespace="TaskService.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Thermal_v1.xml">
      <edmx:Include Namespace="Thermal" />
      <edmx:Include Namespace="Thermal.v1_0_0" />
      <edmx:Include Namespace="Thermal.v1_0_1" />
      <edmx:Include Namespace="Thermal.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/VirtualMedia_v1.xml">
      <edmx:Include Namespace="VirtualMedia" />
      <edmx:Include Namespace="VirtualMedia.v1_0_0" />
      <edmx:Include Namespace="VirtualMedia.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/VirtualMediaCollection_v1.xml">
      <edmx:Include Namespace="VirtualMediaCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/VLanNetworkInterface_v1.xml">
      <edmx:Include Namespace="VLanNetworkInterface" />
      <edmx:Include Namespace="VLanNetworkInterface.v1_0_0" />
      <edmx:Include Namespace="VLanNetworkInterface.v1_0_1" />
      <edmx:Include Namespace="VLanNetworkInterface.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/VLanNetworkInterfaceCollection_v1.xml">
      <edmx:Include Namespace="VLanNetworkInterfaceCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/RedfishExtensions_v1.xml">
      <edmx:Include Namespace="RedfishExtensions.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/OemManager_v1.xml">
      <edmx:Include Namespace="EID_674_Manager" />
      <edmx:Include Namespace="EID_674_Manager.v1_0_0" />
      <edmx:Include Namespace="EID_674_Manager.v1_1_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/AttributeRegistry_v1.xml">
      <edmx:Include Namespace="AttributeRegistry" />
      <edmx:Include Namespace="AttributeRegistry.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Bios_v1.xml">
      <edmx:Include Namespace="Bios" />
      <edmx:Include Namespace="Bios.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Settings_v1.xml">
      <edmx:Include Namespace="Settings" />
      <edmx:Include Namespace="Settings.v1_0_0" />
      <edmx:Include Namespace="Settings.v1_0_2" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SecureBoot_v1.xml">
      <edmx:Include Namespace="SecureBoot" />
      <edmx:Include Namespace="SecureBoot.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/DellBootSources_v1.xml">
      <edmx:Include Namespace="DellBootSources" />
      <edmx:Include Namespace="DellBootSources.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/DellBootSourcesRegistry_v1.xml">
      <edmx:Include Namespace="DellBootSourcesRegistry" />
      <edmx:Include Namespace="DellBootSourcesRegistry.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/DellComputerSystem_v1.xml">
      <edmx:Include Namespace="DellComputerSystem" />
      <edmx:Include Namespace="DellComputerSystem.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/DellJob_v1.xml">
      <edmx:Include Namespace="DellJob" />
      <edmx:Include Namespace="DellJob.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/DellJobCollection_v1.xml">
      <edmx:Include Namespace="DellJobCollection" />
      <edmx:Include Namespace="DellJobCollection.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/DellManager_v1.xml">
      <edmx:Include Namespace="DellManager" />
      <edmx:Include Namespace="DellManager.v1_0_0" />
   </edmx:Reference>
   <edmx:DataServices>
      <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Service">
         <EntityContainer Name="Service" Extends="ServiceRoot.v1_0_0.ServiceContainer" />
      </Schema>
   </edmx:DataServices>
</edmx:Edmx>

ServiceRoot_v1.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--  -->
<!--
################################################################################       
-->
<!-- # Redfish Schema:  ServiceRoot  v1.0.2 -->
<!-- #                                                                                       -->
<!--
# For a detailed change log, see the README file contained in the DSP8010 bundle,      
-->
<!--
# available at http://www.dmtf.org/standards/redfish                                   
-->
<!--
# Copyright 2014-2016 Distributed Management Task Force, Inc. (DMTF).                  
-->
<!--
# For the full DMTF copyright policy, see http://www.dmtf.org/about/policies/copyright 
-->
<!--
################################################################################       
-->
<!--  -->
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
   <edmx:Reference Uri="http://docs.oasis-open.org/odata/odata/v4.0/cs01/vocabularies/Org.OData.Core.V1.xml">
      <edmx:Include Namespace="Org.OData.Core.V1" Alias="OData" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Resource_v1.xml">
      <edmx:Include Namespace="Resource" />
      <edmx:Include Namespace="Resource.v1_0_0" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/RedfishExtensions_v1.xml">
      <edmx:Include Namespace="RedfishExtensions.v1_0_0" Alias="Redfish" />
      <edmx:Include Namespace="Validation.v1_0_0" Alias="Validation" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/EventService_v1.xml">
      <edmx:Include Namespace="EventService" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/AccountService_v1.xml">
      <edmx:Include Namespace="AccountService" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ComputerSystemCollection_v1.xml">
      <edmx:Include Namespace="ComputerSystemCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ChassisCollection_v1.xml">
      <edmx:Include Namespace="ChassisCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/ManagerCollection_v1.xml">
      <edmx:Include Namespace="ManagerCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/TaskService_v1.xml">
      <edmx:Include Namespace="TaskService" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SessionService_v1.xml">
      <edmx:Include Namespace="SessionService" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/Message_v1.xml">
      <edmx:Include Namespace="Message" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/JsonSchemaFileCollection_v1.xml">
      <edmx:Include Namespace="JsonSchemaFileCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/MessageRegistryFileCollection_v1.xml">
      <edmx:Include Namespace="MessageRegistryFileCollection" />
   </edmx:Reference>
   <edmx:Reference Uri="/redfish/v1/Schemas/SessionCollection_v1.xml">
      <edmx:Include Namespace="SessionCollection" />
   </edmx:Reference>
   <edmx:DataServices>
      <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="ServiceRoot">
         <EntityType Name="ServiceRoot" BaseType="Resource.v1_0_0.Resource" Abstract="true">
            <Annotation Term="OData.Description" String="This resource represents the root of the Redfish service, located at the \redfish\v1 URI. As a hypermedia API, all other resources accessible through the Redfish interface on this device are linked directly or indirectly from the Service Root." />
            <Annotation Term="OData.LongDescription" String="This object represents the root Redfish service. All values for resources described by this schema shall comply to the requirements as described in the Redfish specification." />
         </EntityType>
      </Schema>
      <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="ServiceRoot.v1_0_0">
         <EntityContainer Name="ServiceContainer">
            <Singleton Name="Service" Type="ServiceRoot.ServiceRoot" />
            <Singleton Name="Systems" Type="ComputerSystemCollection.ComputerSystemCollection" />
            <Singleton Name="Chassis" Type="ChassisCollection.ChassisCollection" />
            <Singleton Name="Managers" Type="ManagerCollection.ManagerCollection" />
            <Singleton Name="Tasks" Type="TaskService.TaskService" />
            <Singleton Name="AccountService" Type="AccountService.AccountService" />
            <Singleton Name="SessionService" Type="SessionService.SessionService" />
            <Singleton Name="EventService" Type="EventService.EventService" />
            <Singleton Name="Registries" Type="MessageRegistryFileCollection.MessageRegistryFileCollection" />
            <Singleton Name="JsonSchemas" Type="JsonSchemaFileCollection.JsonSchemaFileCollection" />
            <Singleton Name="Sessions" Type="SessionCollection.SessionCollection" />
         </EntityContainer>
         <EntityType Name="ServiceRoot" BaseType="ServiceRoot.ServiceRoot">
            <Annotation Term="OData.Description" String="This object represents the root Redfish service." />
            <Annotation Term="OData.LongDescription" String="This object represents the root Redfish service. All values for resources described by this schema shall comply to the requirements as described in the Redfish specification." />
            <Property Name="RedfishVersion" Type="Edm.String" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="The version of the Redfish service" />
               <Annotation Term="OData.LongDescription" String="The value of this string shall represent the version of the Redfish service. The format of this string shall be of the format majorversion.minorversion.errata in compliance with Protocol Version section of the Redfish specification. " />
               <Annotation Term="Validation.Pattern" String="^\\d+\\.\\d+\\.\\d+$" />
            </Property>
            <Property Name="UUID" Type="Resource.UUID">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="Unique identifier for a service instance. When SSDP is used, this value should be an exact match of the UUID value returned in a 200OK from an SSDP M-SEARCH request during discovery. " />
               <Annotation Term="OData.LongDescription" String="The value of this string shall represent the id of the Redfish service instance. The format of this string shall be a 32-byte value in the form 8-4-4-4-12. If SSDP is used, this value shall be an exact match of the UUID value returned in a 200OK from an SSDP M-SEARCH request during discovery. RFC4122 describes methods that can be used to create a UUID value. The value should be considered to be opaque. Client software should only treat the overall value as a universally unique identifier and should not interpret any sub-fields within the UUID." />
            </Property>
            <NavigationProperty Name="Systems" Type="ComputerSystemCollection.ComputerSystemCollection" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to a collection of Systems." />
               <Annotation Term="OData.LongDescription" String="This object shall only contain a reference to a collection of resources that comply to the Systems schema." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="Chassis" Type="ChassisCollection.ChassisCollection" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to a collection of Chassis." />
               <Annotation Term="OData.LongDescription" String="This object shall only contain a reference to a collection of resources that comply to the Chassis schema." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="Managers" Type="ManagerCollection.ManagerCollection" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to a collection of Managers." />
               <Annotation Term="OData.LongDescription" String="This object shall only contain a reference to a collection of resources that comply to the Managers schema." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="Tasks" Type="TaskService.TaskService" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to the Task Service." />
               <Annotation Term="OData.LongDescription" String="The classes structure shall only contain a reference to a resource that complies to the TaskService schema." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="SessionService" Type="SessionService.SessionService" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to the Sessions Service." />
               <Annotation Term="OData.LongDescription" String="The classes structure shall only contain a reference to a resource that complies to the SessionService schema." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="AccountService" Type="AccountService.AccountService" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to the Account Service." />
               <Annotation Term="OData.LongDescription" String="The classes structure shall only contain a reference to a resource that complies to the AccountService schema." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="EventService" Type="EventService.EventService" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to the EventService." />
               <Annotation Term="OData.LongDescription" String="The classes structure shall only contain a reference to a resource that complies to the EventService schema." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="Registries" Type="MessageRegistryFileCollection.MessageRegistryFileCollection" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to a collection of Registries." />
               <Annotation Term="OData.LongDescription" String="This object shall contain a reference to Message Registry." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <NavigationProperty Name="JsonSchemas" Type="JsonSchemaFileCollection.JsonSchemaFileCollection" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="This is a link to a collection of Json-Schema files." />
               <Annotation Term="OData.LongDescription" String="This object shall only contain a reference to a collection of resources that comply to the SchemaFile schema where the files are Json-Schema files." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
            <Property Name="Links" Type="ServiceRoot.v1_0_0.Links" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="Contains references to other resources that are related to this resource." />
               <Annotation Term="OData.LongDescription" String="The Links property, as described by the Redfish Specification, shall contain references to resources that are related to, but not contained by (subordinate to), this resource." />
               <Annotation Term="Redfish.Required" />
            </Property>
         </EntityType>
         <ComplexType Name="Links" BaseType="Resource.Links">
            <NavigationProperty Name="Sessions" Type="SessionCollection.SessionCollection" Nullable="false">
               <Annotation Term="OData.Permissions" EnumMember="OData.Permission/Read" />
               <Annotation Term="OData.Description" String="Link to a collection of Sessions" />
               <Annotation Term="OData.LongDescription" String="This property shall contain the link to a collection of Sessions." />
               <Annotation Term="OData.AutoExpandReferences" />
            </NavigationProperty>
         </ComplexType>
      </Schema>
      <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="ServiceRoot.v1_0_2">
         <EntityType Name="ServiceRoot" BaseType="ServiceRoot.v1_0_0.ServiceRoot" />
      </Schema>
   </edmx:DataServices>
</edmx:Edmx>