我正在使用Common Information Model (CIM)来建模基础架构。该模型描述了不同IT系统的许多类。它是全面的,因此它由一系列层次结构而不是一个层次结构组成。例如,要表示物理服务器机箱,请定义CIM_Chassis的实例。然后,为了表示将在该硬件上运行的逻辑服务器,您可以定义CIM_ComputerSystem的实例。然后,您应该将两者与CIM_SystemPackaging的实例相关联,以注意一个是由另一个提供的。在任何一个类中都没有属性,您可以将其中一个属性设置为另一个属性。它们是两个独立的类,由第三个类关联。该模型将以XML格式描述,并由当前的CIM XML Schema验证。我不明白XSD中的CIM_SystemPackaging,它应该包含哪些内容。
此XML演示了此问题(机箱是CIM_Chassis.xsd的别名等):
<chassis:CIM_Chassis>
<chassis:CreationClassName>CIM_Chassis</chassis:CreationClassName>
<chassis:Manufacturer>Cisco</chassis:Manufacturer>
<chassis:Model>Catalyst 6000</chassis:Model>
<chassis:Tag>6548431</chassis:Tag>
</chassis:CIM_Chassis>
<computer:CIM_ComputerSystem>
<computer:CreationClassName>CIM_ComputerSystem</computer:CreationClassName>
<computer:Name>Switch1</computer:Name>
</computer:CIM_ComputerSystem>
<sp:CIM_SystemPackaging>
<sp:Antecedent>?</sp:Antecedent>
<sp:Dependent>?</sp:Dependent>
</sp:CIM_SystemPackaging>
我应该把它放在哪里?是?架构文档对此事件保持沉默,并且Web上似乎没有XML示例。这不会验证:
E [Xerces] cvc-complex-type.2.4.b: The content of element 'sp:Antecedent' is not complete. One of '{WC[##other:"http://schemas.dmtf.org/wbem/wscim/1/common",""]}' is expected.
在Schema中,Dependent和Antecedent属于cimReference类型,它是:
<xs:complexType name="cimReference">
<xs:sequence>
<xs:any namespace="##other" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>
所以这对我没什么帮助。我想知道我是否打算将实例嵌入到先行词中:
<sp:CIM_SystemPackaging>
<sp:Antecedent>
<chassis:CIM_Chassis>
...etc...
</chassis:CIM_Chassis>
</sp:Antecedent>
<sp:Dependent>
<computer:CIM_ComputerSystem>
...etc...
</computer:CIM_ComputerSystem>
</sp:Dependent>
</sp:CIM_SystemPackaging>
这验证确定,但似乎无法扩展。由于机箱内的每个硬件都可能有一个对象,并且它们都需要与具有类似关联类的机箱相关联,因此很快就会变得不可能。它似乎也违背了整个协会模式。是否有人熟悉CIM来解释它应该如何工作?
答案 0 :(得分:1)
我最终在DSP0230中找到了以下内容:
“xs:此定义中的任何元素[cim:cimReference]表示唯一的传输引用的结构 标识可以为引用的实体定向消息的位置。这种结构可能是 表示完整传输引用的单个元素或元素序列,如果是 传输参考需要多个元素来唯一地标识位置。“
举个例子:
<AssociatedComponent xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Address>. . .</wsa:Address>
</AssociatedComponent>
鉴于CIM旨在用于网络管理而不是静态表示,因此有必要将其作为对其他地方的引用而不是其他内容。我得出结论,我可以放入任何我喜欢的东西,并且在我的应用程序逻辑中需要处理引用。由于大多数对象都有InstanceID元素,因此我将其用作参考目标:
<chassis:CIM_Chassis>
<chassis:CreationClassName>CIM_Chassis</chassis:CreationClassName>
<chassis:InstanceID>uniqueid1</chassis:InstanceID>
<chassis:Manufacturer>Cisco</chassis:Manufacturer>
<chassis:Model>Catalyst 6000</chassis:Model>
<chassis:Tag>6548431</chassis:Tag>
</chassis:CIM_Chassis>
<computer:CIM_ComputerSystem>
<computer:CreationClassName>CIM_ComputerSystem</computer:CreationClassName>
<computer:InstanceID>uniqueid2</computer:InstanceID>
<computer:Name>Switch1</computer:Name>
</computer:CIM_ComputerSystem>
<sp:CIM_SystemPackaging>
<sp:Antecedent>
<chassis:InstanceID>unqiueid1</chassis:InstanceID>
</sp:Antecedent>
<sp:Dependent>
<computer:InstanceID>unqiueid2</computer:InstanceID>
</sp:Dependent>
</sp:CIM_SystemPackaging>
答案 1 :(得分:0)
尽管你放弃了CIM,我觉得我应该为了别人的利益而回答这个问题。
(1)关于你的问题什么值放入关联:你找到了正确的答案,该值是对CIM实例的引用,如果在DSP0230中定义的XML使用WS-Addressing。 DSP0004中描述了CIM的一般概念,包括引用。
(2)使用CIM进行IT元素的静态表示:CIM(模型)能够做到这一点。但是,您需要为表示的CIM实例分配键值(就像您所做的那样)。您基本上可以模拟从WBEM服务器(例如WMI或其他服务器)检索CIM实例时在运行时发生的情况。
(3)您可以选择表示格式。您使用了DSP0230中描述的WS-CIM,它具有XSD与模型相关的特性。这可能对你有好处或坏处,取决于你想做什么。还有CIM-XML(DSP0201,DSP8044),它具有固定的XML模式(但当然比WS-CIM更臃肿,因此)。 DSP0211中描述的最新JSON表示仅用于WBEM操作的协议表示,它不支持表示CIM模式。
(4)关于答案的评论说明,你说CIM是复杂的:如果你试图从他们的CIM Schema定义中理解CIM模型,那可能有它自己的困难。有一个称为“管理概况”的概念。它们确切地定义了CIM模式中的类如何用于特定的管理领域。请参阅management profiles published by DMTF。
安迪