專利名稱::系統(tǒng)設(shè)計(jì)期間的驗(yàn)證的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及系統(tǒng)的設(shè)計(jì),更特別地涉及系統(tǒng)設(shè)計(jì)期間的驗(yàn)證。
背景技術(shù):
:過去的幾年間,互聯(lián)網(wǎng)的使用蓬勃發(fā)展并且還在繼續(xù)擴(kuò)大。人們已經(jīng)很習(xí)慣萬維網(wǎng)(或者簡稱為“網(wǎng)絡(luò)”)提供的許多服務(wù),例如電子郵件、在線購物、收集新聞和信息、聽音樂、瀏覽視頻剪輯、找工作,等等。為了跟上這種不斷擴(kuò)大的基于互聯(lián)網(wǎng)服務(wù)的需求,在致力于宿主站點(diǎn)、為這些站點(diǎn)提供的后端服務(wù)以及存儲(chǔ)相關(guān)站點(diǎn)數(shù)據(jù)的計(jì)算機(jī)系統(tǒng)方面也已經(jīng)有了很大的發(fā)展。分布式計(jì)算機(jī)系統(tǒng)的一種類型是數(shù)據(jù)中心(例如互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC)或者企業(yè)數(shù)據(jù)中心(EDC)),該中心是特殊設(shè)計(jì)的包括多個(gè)宿主基于網(wǎng)絡(luò)的服務(wù)的計(jì)算機(jī)的聯(lián)合體。也被稱為“網(wǎng)絡(luò)群”或“服務(wù)器群”的數(shù)據(jù)中心典型地在一個(gè)氣候可控的、物理上安全的建筑物中具有幾百至幾千臺(tái)計(jì)算機(jī)。典型地,數(shù)據(jù)中心提供可靠地互聯(lián)網(wǎng)訪問、可靠地電力供應(yīng)以及安全的操作環(huán)境。不同的數(shù)據(jù)中心可以對(duì)運(yùn)行在該數(shù)據(jù)中心的應(yīng)用程序有不同的要求。例如,不同的數(shù)據(jù)中心可能需要實(shí)施不同類型的安全措施,或者需要應(yīng)用程序支持不同的通信協(xié)議。另外,一些數(shù)據(jù)中心可能在一段時(shí)間后要改變這些需求。由于為了使應(yīng)用程序可以在需要的數(shù)據(jù)中心上運(yùn)行,設(shè)計(jì)員要知曉這些不同的需求并且在設(shè)計(jì)應(yīng)用程序的時(shí)候要考慮到這些,所以數(shù)據(jù)中心間的差異就使得應(yīng)用程序的設(shè)計(jì)過程變得困難。進(jìn)一步地,目前程序員在將他們的應(yīng)用程序配置在數(shù)據(jù)中心時(shí),一般僅僅可以評(píng)價(jià)他們的應(yīng)用程序是否將運(yùn)行在一個(gè)特殊的數(shù)據(jù)中心上。如果由于應(yīng)用程序不能滿足數(shù)據(jù)中心的一個(gè)或多個(gè)必要條件而使得程序運(yùn)行不成功,那么設(shè)計(jì)員就要修補(bǔ)應(yīng)用程序的問題并在數(shù)據(jù)中心上重新試驗(yàn)該應(yīng)用程序的運(yùn)行。此過程將被重復(fù)許多次,并且會(huì)造成效率低下和不如人意的設(shè)計(jì)過程的結(jié)果。這里將描述的系統(tǒng)設(shè)計(jì)期間的驗(yàn)證將解決這些和其他的問題。發(fā)明概述這里將描述系統(tǒng)設(shè)計(jì)期間的驗(yàn)證。根據(jù)系統(tǒng)設(shè)計(jì)期間的驗(yàn)證的某些方面,接收將被設(shè)計(jì)的系統(tǒng)的描述和環(huán)境的描述。這些描述都用于在設(shè)計(jì)系統(tǒng)時(shí)以及在配置系統(tǒng)之前對(duì)照環(huán)境來驗(yàn)證系統(tǒng)。附圖的簡要說明在整個(gè)附圖中,相同的附圖標(biāo)記表示相同的特征。圖1說明了一個(gè)示例性的網(wǎng)絡(luò)設(shè)置。圖2是一個(gè)說明使用系統(tǒng)定義模塊的示例性體系結(jié)構(gòu)的方框圖。圖3說明了一個(gè)示例性的分層設(shè)置。圖4是一個(gè)說明用于設(shè)計(jì)期間的驗(yàn)證的示例性過程的流程圖。圖5A和5B是一個(gè)說明創(chuàng)建一實(shí)例空間的示例性的遞歸擴(kuò)展過程的流程圖。圖6A和6B是一個(gè)說明用于評(píng)估信息流的示例性過程的流程圖。圖7A、7B、7C、7D和7E是一個(gè)說明評(píng)估約束條件的示例性過程的流程圖。圖8說明了一個(gè)示例性的SDM文檔。圖9說明了一個(gè)示例性的SDM定義。圖10說明了一個(gè)示例性的SDM成員。圖11說明了一個(gè)示例性的設(shè)置成員。圖12說明了一個(gè)示例性的約束條件的定義。圖13說明了一個(gè)示例性的描述對(duì)象。圖14說明了一個(gè)將在一層中的網(wǎng)絡(luò)應(yīng)用程序映射到另一層中的網(wǎng)絡(luò)服務(wù)器主機(jī)的實(shí)例。圖15說明了一個(gè)示例性的嵌入式數(shù)據(jù)類型的分級(jí)結(jié)構(gòu)。圖16說明了一個(gè)上投射和下投射的例子。圖17說明了一個(gè)類型變換的例子。圖18說明了一個(gè)示例性的關(guān)系樹。圖19說明了一個(gè)利用授權(quán)公開主機(jī)實(shí)現(xiàn)的例子。圖20說明了一個(gè)利用授權(quán)向父體公開一成員實(shí)現(xiàn)的例子。圖21和22說明了一個(gè)通信連接的驗(yàn)證的例子。圖23說明了一個(gè)區(qū)域邊界的例子。圖24說明了一個(gè)示例性的實(shí)體空間。圖25說明了一個(gè)示例性的可以執(zhí)行這里描述的技術(shù)的普通計(jì)算機(jī)環(huán)境。實(shí)施例的詳細(xì)描述下面公開的內(nèi)容描述了與系統(tǒng)設(shè)計(jì)期間的驗(yàn)證的結(jié)構(gòu)有關(guān)的各個(gè)方面。此公開包括系統(tǒng)定義模型(SDM)的論述,其也可以認(rèn)為是服務(wù)定義模型(SDM)。SDM向應(yīng)用程序設(shè)計(jì)者提供工具和上下文用以設(shè)計(jì)抽象的分布式計(jì)算機(jī)應(yīng)用程序和數(shù)據(jù)中心。該模塊定義了一系列表示應(yīng)用程序的功能單元的元素,該程序最終將被物理計(jì)算機(jī)資源和軟件執(zhí)行。與該模塊元素相關(guān)的是規(guī)劃表,其表示如何指定由成員表示的功能性操作。正如這里所使用,術(shù)語“接線”也可以認(rèn)為是“連接”、“通信”或者“通信關(guān)系”。術(shù)語“系統(tǒng)”也可以認(rèn)為是“模塊”并且術(shù)語“資源空間”也可以認(rèn)為是“資源”。另外,術(shù)語“應(yīng)用空間”也可以認(rèn)為是“應(yīng)用程序”,并且術(shù)語“實(shí)體空間”也可以認(rèn)為是“實(shí)體”。進(jìn)一步地,術(shù)語“類”也可以認(rèn)為是“抽象定義”,術(shù)語“端口”也可以認(rèn)為是“端點(diǎn)”,以及術(shù)語“類型”也可以認(rèn)為是“定義”。圖1說明了一個(gè)示例性的網(wǎng)絡(luò)設(shè)置100。在設(shè)置100中,多(x)計(jì)算設(shè)備102(1),102(2),...102(x)連接到網(wǎng)絡(luò)106。網(wǎng)絡(luò)106代表各種常規(guī)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和類型(包括有線和/或無線網(wǎng)絡(luò))中的任意一種,其使用各種常規(guī)網(wǎng)絡(luò)協(xié)議(包括公共和/或?qū)S袇f(xié)議)中任意一種。網(wǎng)絡(luò)106包括,例如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、互聯(lián)網(wǎng)的一部分等等。設(shè)置100表示大量不同的設(shè)置中的任意一種,各種設(shè)置包括,例如數(shù)據(jù)中心(例如互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC))、辦公或商業(yè)設(shè)置、家庭設(shè)置教育或研究設(shè)施、零售或銷售設(shè)置、數(shù)據(jù)存儲(chǔ)裝置等等。計(jì)算設(shè)備102可以是各種常規(guī)計(jì)算設(shè)備中的任意一種,包括臺(tái)式PC、工作站、大型計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、互聯(lián)網(wǎng)儀器、游戲控制臺(tái)、掌上電腦、移動(dòng)電話、個(gè)人數(shù)字助理(PDA)等等。設(shè)備102的一個(gè)或多個(gè)設(shè)備可以是相同類型的設(shè)備,或者可選擇地為不同類型的設(shè)備。另外,即使在多個(gè)設(shè)備是相同的設(shè)備類型的情況下,多個(gè)設(shè)備也可以進(jìn)行不同的配置(例如,兩個(gè)設(shè)備102可以都是服務(wù)器計(jì)算機(jī),但是可以有不同的硬件配置,諸如,不同的處理器、不同數(shù)量的RAM、不同容量的硬盤驅(qū)動(dòng)器,等等)。在添加到設(shè)置100中后,一個(gè)或多個(gè)設(shè)備102也可以進(jìn)行重新配置。例如,特殊計(jì)算設(shè)備102使用一段時(shí)間(例如,類似于分鐘、小時(shí)、天、月等)來執(zhí)行一個(gè)功能,然后管理員可以決定需要不同的功能(例如,從服務(wù)器計(jì)算機(jī)改變?yōu)楣ぷ髡居?jì)算機(jī)、從web服務(wù)器改變?yōu)楸镜匚募?wù)器,等等)。圖2是一個(gè)說明使用SDM的示例性體系結(jié)構(gòu)200的方框圖。SDM被設(shè)計(jì)成在系統(tǒng)的設(shè)計(jì)過程中使用,并且被用于在設(shè)計(jì)過程結(jié)束后使用和/或管理系統(tǒng)。一個(gè)系統(tǒng)是一組可以共同工作并完成共有的功能的相關(guān)聯(lián)的軟件和/或硬件資源。這樣的系統(tǒng)的一個(gè)例子是應(yīng)用程序,其是指一組可以被計(jì)算設(shè)備運(yùn)行或執(zhí)行來完成各種功能的指令。應(yīng)用程序的實(shí)例包括諸如游戲的娛樂應(yīng)用程序、諸如文字處理器的產(chǎn)出應(yīng)用程序、諸如電子百科全書的參考應(yīng)用程序、可以用于web服務(wù)或金融分析的分布式應(yīng)用程序,等等。此系統(tǒng)的另一個(gè)實(shí)例是可以調(diào)度一應(yīng)用程序(或另一環(huán)境)的環(huán)境。環(huán)境是指可以使用應(yīng)用程序(或另一個(gè)環(huán)境)的軟件和/或硬件資源。以上環(huán)境可彼此分層。一般地,在系統(tǒng)的設(shè)計(jì)過程或階段(也被稱為開發(fā)過程或階段)中,支持SDM的開發(fā)工具用于定義一個(gè)由通信軟件和/或硬件部件組成的系統(tǒng)。系統(tǒng)的定義包括使用和操作一個(gè)分布式系統(tǒng)必須的所有信息,其包括所需的資源、配置、可操作的特點(diǎn)、策略等。設(shè)計(jì)階段完成之后,使用階段也可以利用系統(tǒng)定義來使用該系統(tǒng)并且動(dòng)態(tài)地分配和配置所需的軟件和硬件(例如,服務(wù)器、存儲(chǔ)器和網(wǎng)絡(luò))資源。相同的系統(tǒng)定義可以針對(duì)于不同的主機(jī)環(huán)境和不同程度的使用。體系結(jié)構(gòu)200既使用SDM定義模型也使用定義了SDM定義模塊內(nèi)的函數(shù)運(yùn)算的計(jì)劃表。該定義模塊包括各種不同類型的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)整體被稱為“定義”。通過一個(gè)或多個(gè)平臺(tái)服務(wù),例如應(yīng)用程序接口(APIs),揭示了SDM的函數(shù)性。一個(gè)系統(tǒng)的設(shè)計(jì)階段期間,開發(fā)部件202產(chǎn)生一個(gè)包括系統(tǒng)定義的的文檔,例如SDM文檔204。開發(fā)部件202可以是任何不同的開發(fā)部件,諸如華盛頓州雷蒙德市的微軟公司出售的VisualStudio開發(fā)系統(tǒng)。SDM文檔204定義了所有的與系統(tǒng)的使用(和可選擇地管理)有關(guān)的信息(這里也被稱為知識(shí))。任何在使用系統(tǒng)或管理系統(tǒng)時(shí)必要或使用的信息都包含在SDM文檔204中。盡管在這里被描述為一個(gè)文檔,但是應(yīng)當(dāng)認(rèn)識(shí)到該知識(shí)也可選地被分配并保存到多個(gè)文檔中。系統(tǒng)定義定義了根據(jù)一個(gè)或多個(gè)資源、端點(diǎn)、關(guān)系和子系統(tǒng)的系統(tǒng)。在一個(gè)SDM文檔中(例如,XML文檔)說明系統(tǒng)定義。資源可以是硬件資源或軟件資源。端點(diǎn)代表跨系統(tǒng)的通信。關(guān)系定義了系統(tǒng)、資源和端點(diǎn)之間的聯(lián)系。子系統(tǒng)可以表現(xiàn)為完整的系統(tǒng)并且典型地是一個(gè)較大系統(tǒng)的一部分。系統(tǒng)定義記錄了動(dòng)態(tài)系統(tǒng)的基本結(jié)構(gòu)。它可以被看作是要在其上添加所有其他信息的框架。典型地,此結(jié)構(gòu)在開發(fā)過程中由設(shè)計(jì)者和開發(fā)者指定,并且不會(huì)頻繁改變。除了結(jié)構(gòu)外,SDM還記錄了使用信息、安裝過程、配置表、事件和儀器、自動(dòng)控制任務(wù)、完整的模型、操作策略等。由操作人員、賣主和/或貫穿分布式系統(tǒng)生命期中由管理系統(tǒng)添加其它的信息。SDM文檔204包括系統(tǒng)的一個(gè)或多個(gè)約束條件(也可以稱為必要條件),調(diào)用并/或運(yùn)行此系統(tǒng)的環(huán)境必需滿足此約束條件。利用SDM文檔,該環(huán)境本身被描述為“邏輯基礎(chǔ)結(jié)構(gòu)”(LIM)文檔206、或數(shù)據(jù)中心說明或數(shù)據(jù)中心模型。與SDM文檔204相似,LIM文檔206可以是單一的文檔或者可選地由兩個(gè)或多個(gè)文檔組成。LIM文檔206可以使用任何不同的開發(fā)部件產(chǎn)生,例如類似于開發(fā)部件202的部件。LIM文檔206也可以利用開發(fā)部件202產(chǎn)生(也就是相同的開發(fā)部件既可以用于產(chǎn)生SDM文檔204也可以用于產(chǎn)生LIM文檔206)。LIM文檔206所描述的環(huán)境可以是單一的計(jì)算設(shè)備、或可選擇的是計(jì)算設(shè)備的集合(例如,數(shù)據(jù)中心)、應(yīng)用程序主機(jī)等等。不同的系統(tǒng)甚至是相同的系統(tǒng)可以安裝到不同的環(huán)境中。例如,一個(gè)數(shù)據(jù)中心可以包括五十個(gè)計(jì)算設(shè)備,并且五個(gè)以上計(jì)算設(shè)備可調(diào)度此系統(tǒng),而三十五個(gè)以上計(jì)算設(shè)備可調(diào)度另一系統(tǒng)。這些必要條件可以采取各種形式,例如關(guān)于配置該系統(tǒng)的計(jì)算設(shè)備的硬件必要條件(例如,處理器的最低速度、存儲(chǔ)器的最小量、可用硬盤空間的最小量、有效網(wǎng)絡(luò)帶寬的最小量、有效特別安全機(jī)制,等等)、關(guān)于配置該系統(tǒng)的計(jì)算設(shè)備的軟件必要條件(例如,特定的操作系統(tǒng)、一個(gè)或多個(gè)其它必須安裝的應(yīng)用程序、關(guān)于特定系統(tǒng)和/或操作系統(tǒng)如何配置的說明、要用的安全或加密的特定類型等等)、關(guān)于配置該系統(tǒng)的計(jì)算設(shè)備的其它必要條件(例如,可靠的特定安全密鑰、必須執(zhí)行的數(shù)據(jù)中心策略、使用的驗(yàn)證機(jī)制、環(huán)境拓?fù)浣Y(jié)構(gòu)等等)。相對(duì)于不同的LIM206中所描述的多個(gè)不同的環(huán)境,在SDMA文檔204中描述的單一系統(tǒng)也是有效的。必要條件也可以用于其它的方面一也就是,環(huán)境可以具有關(guān)于要安裝的系統(tǒng)的配置的約束條件或必要條件(例如,要執(zhí)行的環(huán)境的標(biāo)準(zhǔn)或策略)。這些可以是由環(huán)境操作員創(chuàng)建的“顯式”必要條件,諸如,系統(tǒng)必須具有的特定設(shè)置或配置、系統(tǒng)必須提供或支持的特定功能、系統(tǒng)必須支持的特定安全機(jī)制等等。這些也可以是環(huán)境的特定配置所產(chǎn)生的隱式必要條件。例如,如果環(huán)境中的主計(jì)算設(shè)備使用了一個(gè)特定類型的文件系統(tǒng),那么利用此系統(tǒng)就不可能執(zhí)行某些行為(盡管利用另一個(gè)文件系統(tǒng)可以執(zhí)行那些相同的行為)。在系統(tǒng)的設(shè)計(jì)階段,SDM文檔204可以被驗(yàn)證部件208用于驗(yàn)證適合一個(gè)或多個(gè)特定環(huán)境的系統(tǒng)。這是一個(gè)兩方面的驗(yàn)證驗(yàn)證用于環(huán)境的系統(tǒng)以及驗(yàn)證用于系統(tǒng)的環(huán)境。驗(yàn)證部件208可以通過將SDM文檔204標(biāo)識(shí)的必要條件與在LIM文檔206中描述的環(huán)境進(jìn)行比較,來驗(yàn)證用于系統(tǒng)的環(huán)境,并且確定該環(huán)境是否滿足所有的必要條件。驗(yàn)證部件208可以通過將LIM文檔206標(biāo)識(shí)的必要條件與在SDM文檔204中描述的系統(tǒng)進(jìn)行比較,來驗(yàn)證用于環(huán)境的系統(tǒng),并確定該系統(tǒng)是否滿足所有的必要條件。如果系統(tǒng)和環(huán)境都滿足所有的必要條件,那么設(shè)計(jì)者或開發(fā)者就知道該系統(tǒng)可以在該環(huán)境中配置并運(yùn)行。但是,如果環(huán)境和/或系統(tǒng)并不滿足所有的必要條件,那么驗(yàn)證部件208就通知不被滿足的必要條件的設(shè)計(jì)者或開發(fā)者要作出對(duì)SDM文檔204(以及響應(yīng)的系統(tǒng))和/或環(huán)境作出改變,以便使系統(tǒng)能在該環(huán)境中配置并運(yùn)行。LIM文檔206可以用于實(shí)際環(huán)境或者可選擇地用于模擬環(huán)境。對(duì)于實(shí)際環(huán)境,LIM描述了一個(gè)存在的或者已經(jīng)描述好但還沒有建立的環(huán)境。例如,實(shí)體環(huán)境可以是現(xiàn)有的數(shù)據(jù)中心,或者數(shù)據(jù)中心已經(jīng)設(shè)計(jì)好了但是還沒有實(shí)際實(shí)現(xiàn)。對(duì)于模擬環(huán)境,LIM描述了一個(gè)不必要存在的預(yù)期中的環(huán)境。對(duì)預(yù)期中的環(huán)境可以作出各種設(shè)想,但是對(duì)于實(shí)際環(huán)境就不需要作出這樣的設(shè)想。典型地,在系統(tǒng)的設(shè)計(jì)過程期間,LIM文檔206描述了一個(gè)模擬環(huán)境。但是,當(dāng)一實(shí)際環(huán)境存在于一特殊時(shí)間點(diǎn)時(shí)描述了此環(huán)境的LIM文檔可選地用于整個(gè)設(shè)計(jì)階段。驗(yàn)證部件208可以是一個(gè)或多個(gè)與數(shù)據(jù)中心分離的計(jì)算設(shè)備,在此數(shù)據(jù)中心中將調(diào)度被開發(fā)的系統(tǒng)。例如,驗(yàn)證部件208可以是單一的計(jì)算設(shè)備,或者可選擇地將該驗(yàn)證職責(zé)分配到多個(gè)設(shè)備??商鎿Q地,驗(yàn)證部件208可以是將調(diào)度要開發(fā)的系統(tǒng)的數(shù)據(jù)中心中的一個(gè)或多個(gè)計(jì)算設(shè)備。SDM使系統(tǒng)的操作組合跨越了橫向和縱向。橫向的組合由系統(tǒng)和子系統(tǒng)實(shí)現(xiàn)??v向的組合由“層”來實(shí)現(xiàn)。應(yīng)用程序、服務(wù)站點(diǎn)、網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和硬件都在分布式系統(tǒng)中起作用,但是典型的也被單獨(dú)定義并且屬于不同的組或組織。由定義了一組主機(jī)的約束條件的成員實(shí)現(xiàn)了分層,并且反之亦然。圖3說明了一個(gè)示例性的分層設(shè)置。圖3中顯示了四層層302、層304、層306以及層308。雖然在圖3中顯示了四層,但是實(shí)際上層的數(shù)量可以改變,并且可以大于或小于四。另外,在不同實(shí)施例中不同層的內(nèi)容也可以改變。如圖3所示,不同的層可以位于其它層的上面和/或下面(例如,層306在成304的上面但是在層308的下面)。在一層中的不同的系統(tǒng)和子系統(tǒng)可以相互作用,并且也可以其它層中的系統(tǒng)和子系統(tǒng)相互作用。例如,層308中的子系統(tǒng)310既可以與層308中的子系統(tǒng)312相互作用,也可以與層306中的子系統(tǒng)314相互作用。另外,每個(gè)層可以看作是其相鄰高層的環(huán)境。例如,層306是層308中的系統(tǒng)和子系統(tǒng)的環(huán)境,而層304是層306中的系統(tǒng)和子系統(tǒng)的環(huán)境。每個(gè)層302、304、306及308都有其各自關(guān)聯(lián)的SDM文檔。不同的層302、304、306及308可以表示不同的內(nèi)容。在某些實(shí)施例中,層302是硬件層,層304是網(wǎng)絡(luò)拓?fù)浜筒僮飨到y(tǒng)層,層306是應(yīng)用程序主機(jī)層,并且層308是應(yīng)用程序?qū)?。硬件層是?gòu)建分層系統(tǒng)(例如,圖1中的設(shè)備102)的物理設(shè)備(例如計(jì)算設(shè)備)。網(wǎng)路拓?fù)浜筒僮飨到y(tǒng)層表示計(jì)算設(shè)備的網(wǎng)絡(luò)拓?fù)?例如,圖1的網(wǎng)絡(luò)設(shè)置100)和安裝在那些計(jì)算設(shè)備上的操作系統(tǒng)。應(yīng)用程序主機(jī)層表示安裝在計(jì)算設(shè)備上并可以宿主其它程序的應(yīng)用程序(例如,SQLServer、IIS等等)。應(yīng)用程序?qū)颖硎景惭b在計(jì)算設(shè)備上并且不可以宿主其它程序的應(yīng)用程序(例如,諸如游戲的娛樂軟件、諸如文字處理器的產(chǎn)品應(yīng)用程序、諸如電子百科全書的參考應(yīng)用程序、可以用于web服務(wù)或金融分析的分布式應(yīng)用程序,等等)。再參照?qǐng)D2,應(yīng)用程序開發(fā)者可以利用開發(fā)部件202設(shè)計(jì)并開發(fā)應(yīng)用程序。當(dāng)開發(fā)者定義他或她的系統(tǒng)的不同部分以及這些部分之間如何相互關(guān)聯(lián)的時(shí)候,產(chǎn)生獲得這些部分和關(guān)系的SDM文件204。依靠LIM文件206所描述的環(huán)境,開發(fā)者可以使用驗(yàn)證部件208驗(yàn)證系統(tǒng)屬性。在設(shè)計(jì)階段的這個(gè)驗(yàn)證也可以被稱為“設(shè)計(jì)期間的驗(yàn)證”。在下面的“示例性的SDM執(zhí)行”部分將詳細(xì)討論的SDM將被設(shè)計(jì),用以支持分布式系統(tǒng)(模型化系統(tǒng))中成員的配置、相互作用和改變的說明。SDM基于對(duì)象關(guān)系模型?!皩?duì)象”描述了存在于一個(gè)系統(tǒng)中的實(shí)體,并且“關(guān)系”表示不同實(shí)體間聯(lián)系。進(jìn)一步定義對(duì)象和關(guān)系是為了獲得與SDM相關(guān)的語義信息。特別地,對(duì)象被分為組件、端點(diǎn)和資源。關(guān)系被分為下面幾種連接(也被成為通信)、包含、宿主、授權(quán)和引用。有關(guān)對(duì)象和關(guān)系的進(jìn)一步的細(xì)節(jié)將在下面提供。SDM包括“抽象定義”,其提供了系統(tǒng)成員的公共分類,為大部分系統(tǒng)提供了工具支持以及為在設(shè)計(jì)期間的定義檢測(cè)提供了基礎(chǔ)。一組抽象的定義為維護(hù)設(shè)計(jì)提供了全面的基礎(chǔ)?!熬唧w定義”表示實(shí)體系統(tǒng)或數(shù)據(jù)中心的設(shè)計(jì)的各部分。通過選擇抽象定義以及提供一限定具體定義的屬性的數(shù)量和設(shè)定值的執(zhí)行過程,產(chǎn)生具體定義。利用這些具體定義的集合產(chǎn)生應(yīng)用程序。SDM也包括“約束條件”,即基于所允許地多組關(guān)系實(shí)例可參與的關(guān)系的模型限制。約束條件用于描述依賴于包含在一關(guān)系中的對(duì)象配置的必要條件。例如,約束條件可以用于確定在通信協(xié)議的每個(gè)端點(diǎn)上的參與者是否使用了一致的安全設(shè)置。LIM文件206和SDM文件204被輸入驗(yàn)證部件208的接口和處理層210。接口和處理層210控制SDM文件204的驗(yàn)證。驗(yàn)證部件208也可以被稱為編譯器。接口和處理層210包括裝入器212、檢驗(yàn)器214和模擬器218。裝入器212分析SDM文件204,并將任何的參考文件或者類型裝入到一個(gè)內(nèi)存類型空間中。SDM文件204定義了SDM類(例如,以XML形式),裝入器212將SDM文件翻譯成在內(nèi)存類型空間中的SDM類。檢驗(yàn)器214檢查在SDM文件204中是否存在任何錯(cuò)誤,為了使裝入器212裝入SDM文件204,檢驗(yàn)SDM文件204是否正確書寫。如果檢驗(yàn)器214或裝入器212檢查到錯(cuò)誤,該錯(cuò)誤將被返回到開發(fā)部件202,其包括會(huì)導(dǎo)致錯(cuò)誤的問題的任何指示。檢驗(yàn)器214也“遍歷”類型空間,檢查設(shè)置值、類型和SDM文件參考。典型地,如果檢驗(yàn)器214或裝入器212檢查到錯(cuò)誤,將中止設(shè)計(jì)期間的驗(yàn)證。然后模擬器218通過調(diào)用下面將要討論的擴(kuò)展引擎220、信息流引擎222以及約束引擎224,模擬由LIM文檔定義的環(huán)境。模擬器218遇到的任何錯(cuò)誤都要返回給部件202(例如,作為結(jié)果226),其包括會(huì)導(dǎo)致錯(cuò)誤的問題的指示。典型的,如果模擬器218遇到錯(cuò)誤,錯(cuò)誤的指示將返回給開發(fā)部件,但設(shè)計(jì)期間的驗(yàn)證會(huì)繼續(xù)進(jìn)行。接口和處理層210調(diào)用擴(kuò)展引擎220、信息流引擎222以及約束條件引擎224,來執(zhí)行SDM文件204的驗(yàn)證。通常,擴(kuò)展引擎220將創(chuàng)建基于SDM文件204的實(shí)體空間的操作組,用以添加需要的并包含傳值的子代和關(guān)系的實(shí)例和操作,或者正確刪除實(shí)例和關(guān)系。流引擎222”遍歷”實(shí)例“圖”并查找定義在實(shí)例上的流,以及將信息流中的值設(shè)定為合適的值。約束條件引擎224”遍歷”實(shí)例空間同時(shí)查找和評(píng)估每個(gè)約束條件成員。在某些的實(shí)施例中,如果所有的約束條件都被評(píng)估為真實(shí)的(也就是,所有的約束條件都滿足),并且在處理SDM文檔204時(shí),驗(yàn)證部件208沒有遇到錯(cuò)誤,那么驗(yàn)證部件208就數(shù)字標(biāo)記SDM文檔204。此數(shù)字簽名表示SDM文檔204已經(jīng)被成功的編譯了。SDM文檔204以任何各種不同的方式數(shù)字標(biāo)記,一般的包括產(chǎn)生一個(gè)基于SDM文檔204數(shù)字簽名以及一個(gè)于驗(yàn)證部件208有關(guān)的公開/私人的密鑰對(duì)。這樣,數(shù)字標(biāo)記的SDM文檔可以隨后被認(rèn)為(舉例來說,當(dāng)使用他們的時(shí)候)已經(jīng)被驗(yàn)證。已數(shù)字標(biāo)記的SDM文檔也被稱為已編譯SDM文檔。除了評(píng)估各種約束條件,驗(yàn)證部件208也利用那些參考文檔的全名(以及任意版本)更新其它SDM文檔的說明書。于是,已編譯SDM文檔將包括這些全名。例如SDM文檔可以通過名字而不是版本信息,引入另一個(gè)SDM文檔并參考那個(gè)SDM文檔,并且當(dāng)驗(yàn)證部件208引入那個(gè)參考文檔時(shí),將識(shí)別被引入的那個(gè)文檔的版本并將其添加到該已編譯SDM文檔。這里的論述涉及包含在SDM文檔204中的各成員和定義。定義限定了如何在實(shí)例空間中創(chuàng)建一個(gè)實(shí)例。換句話說,定義限定了什么是可能的。成員描述了根據(jù)一個(gè)定義的特定用法或方案。例如,一個(gè)定義描述了對(duì)于一個(gè)特定的實(shí)例什么是可能的,一個(gè)構(gòu)建描述了哪個(gè)可能性被包含在一個(gè)特定的實(shí)例中。下面的表格說明了成員或定義的例子,也說明了每個(gè)成員或定義的總體描述。這里所討論的引擎參考了傳值成員、傳引用成員、擴(kuò)展、監(jiān)聽程序以及最高級(jí)定義。傳值成員指一個(gè)成員,在擴(kuò)展的過程中為此成員自動(dòng)創(chuàng)建的實(shí)例。在某些的實(shí)施中,傳值成員不能是抽象的。傳引用成員指一個(gè)成員,擴(kuò)展引擎不能在擴(kuò)展期間為此成員自動(dòng)創(chuàng)建實(shí)例。相反地,用于此事件地外源監(jiān)聽程序創(chuàng)建了該實(shí)例(例如,接口和處理層210可以在模擬期間創(chuàng)建該實(shí)例,或者可以在模擬或使用期間詢問(舉例來說,通過用戶接口)設(shè)計(jì)者或開發(fā)者來創(chuàng)建該實(shí)例)。擴(kuò)展是指給定一個(gè)根實(shí)例然后實(shí)例空間就被該根實(shí)例填充的過程。根實(shí)例的所有成員都被遞歸創(chuàng)建。傳引用成員不是由擴(kuò)展引擎創(chuàng)建的,而是由外部資源創(chuàng)建的。監(jiān)聽器(例如,模擬器218)在事件剛觸發(fā)時(shí)就被通知了。該事件的一個(gè)例子就是創(chuàng)建一個(gè)傳引用成員的需求。最高級(jí)定義是指在SDM文檔的根級(jí)限定的定義。SDM文檔一般只有一個(gè)最高級(jí)定義,,但是在可選擇的實(shí)施例中,一個(gè)SDM文檔可以有兩個(gè)或三個(gè)最高級(jí)定義。圖4是一個(gè)說明用于設(shè)計(jì)期間的驗(yàn)證的示例性過程400的流程圖。此過程由圖2的驗(yàn)證部件208執(zhí)行,并且可以以軟件、固件、硬件或它們的組合的方式執(zhí)行。響應(yīng)于創(chuàng)建、刪除或修改系統(tǒng)的請(qǐng)求,SDM文檔和任何與該SDM文檔有關(guān)的參考都被加載(步驟402),可選擇加載驗(yàn)證該SDM文檔。在某些的實(shí)施例中,LIM文檔已經(jīng)被加載了并且由該LIM文檔描述的實(shí)例空間也已經(jīng)被創(chuàng)建了。但是,如果這些還么有進(jìn)行,那么就加載LIM文檔并且在步驟402中創(chuàng)建由該LIM文檔描述的實(shí)例空間。在某些的實(shí)施例中,在步驟402加載SDM文檔之前,由在這里描述的擴(kuò)展、信息流和約束條件引擎創(chuàng)建LIM文檔描述的實(shí)例空間。然后進(jìn)行檢測(cè),用以確定在加載SDM文檔的時(shí)候在SDM文檔或創(chuàng)建的類型空間中是否存在錯(cuò)誤(步驟404)。步驟404中的檢測(cè)涉及SDM文檔本身的結(jié)構(gòu)或格式,而不涉及系統(tǒng)設(shè)計(jì)。例如,在步驟404中,進(jìn)行檢測(cè)是為了驗(yàn)證SDM文檔的格式是正確(例如,文檔具有正確的XML格式),或者在SDM文檔中存在未知的元素和類型,或者SDM文檔中的類型參考是有效的,等等。如果存在任何錯(cuò)誤,那么將返回這些錯(cuò)誤的指示(步驟406)并且過程400結(jié)束。這些錯(cuò)誤將例如,作為結(jié)果226返回給圖2中的開發(fā)部件202。但是,如果沒有錯(cuò)誤,就選擇步驟402中加載的SDM文檔中的最高級(jí)定義。在某些實(shí)施例中,只有一個(gè)最高級(jí)定義。然后創(chuàng)建該選擇的最高級(jí)定義的實(shí)例(步驟410),并且擴(kuò)展實(shí)例空間(步驟412)。該最高級(jí)定義被用作擴(kuò)展的起點(diǎn),其由圖4的擴(kuò)展引擎410來執(zhí)行。實(shí)例空間是這樣擴(kuò)展的分析該最高級(jí)的定義并創(chuàng)建根實(shí)例的每個(gè)成員的實(shí)例,然后分析每個(gè)創(chuàng)建的實(shí)例并創(chuàng)建他們的每個(gè)成員的實(shí)例,等等。此過程將在標(biāo)題“擴(kuò)展引擎”之下詳細(xì)討論。當(dāng)基于最高級(jí)定義的擴(kuò)展完成之后,識(shí)別由擴(kuò)展的實(shí)例空間中的實(shí)例限定的信息流,并且將信息流中的值設(shè)定為適當(dāng)值(步驟414)。此過程將在標(biāo)題“信息流引擎”之下討論。估計(jì)信息流的值被設(shè)定后,就檢驗(yàn)約束條件(步驟416)。作為約束條件檢驗(yàn)的一部分,實(shí)例空間中的每個(gè)約束條件都要被驗(yàn)證,這將在標(biāo)題“約束條件引擎”下面詳細(xì)討論。一般的,這些約束條件將對(duì)照模擬環(huán)境中的設(shè)置進(jìn)行驗(yàn)證,而該模擬環(huán)境(例如,在LIM206中所描述的)是在驗(yàn)證系統(tǒng)時(shí)所對(duì)照的。在檢驗(yàn)完約束條件之后,將進(jìn)行關(guān)于SDM文檔中是否存在其它尚未選擇的任何附加最高級(jí)定義的檢驗(yàn)(步驟418)。如果在SDM文檔中存在一個(gè)或多個(gè)其它附加最高級(jí)定義,那么就選擇此一個(gè)或多個(gè)其它的最高級(jí)定義(步驟420)并且處理返回到創(chuàng)建選擇的最高級(jí)定義的實(shí)例的步驟410。但是,如果不存在其它未選擇的最高級(jí)定義,將檢測(cè)是否檢測(cè)到任何錯(cuò)誤(步驟422)。步驟422中的錯(cuò)誤是指在步驟412的擴(kuò)展、步驟414中的信息流及步驟416中的約束條件的檢測(cè)中產(chǎn)生的錯(cuò)誤和/或警告。如果存在任何錯(cuò)誤或警告,返回那些錯(cuò)誤或警告的指示(步驟406),同時(shí)處理400結(jié)束。這些錯(cuò)誤將被例如,作為結(jié)果226返回給圖2中的開發(fā)部件202。通過在步驟406中將錯(cuò)誤和/或警告返回給開發(fā)部件202,或者步驟424中的成功的指示,SDM文檔204描述的系統(tǒng)的設(shè)計(jì)期間的驗(yàn)證的結(jié)果將返回給開發(fā)部件202。這些錯(cuò)誤和/警告或者成功的指示也可以顯示給使用開發(fā)部件202的設(shè)計(jì)者,用以允許告知設(shè)計(jì)者設(shè)計(jì)后(并在SDM文檔204中描述)的系統(tǒng)是否已經(jīng)被驗(yàn)證過,或者是否存在潛在的問題。通過將特定錯(cuò)誤和/或警告的指示返回給設(shè)計(jì)者,可以更好地通知設(shè)計(jì)者潛在的問題是什么以及如何解決他們(或者是否有必要解決它們)。此反饋可以在設(shè)計(jì)過程中返回給設(shè)計(jì)者,而不需要設(shè)計(jì)者在發(fā)現(xiàn)設(shè)計(jì)的系統(tǒng)中存在問題之前,將系統(tǒng)配置在一個(gè)數(shù)據(jù)中心上。模擬如上所述,圖2的接口和處理層210模擬了LIM文檔206中定義的環(huán)境。這就允許在系統(tǒng)的設(shè)計(jì)期間對(duì)照預(yù)期的環(huán)境驗(yàn)證SDM文檔204描述的系統(tǒng),以便在將系統(tǒng)配置到環(huán)境中去之前就識(shí)別出錯(cuò)誤。實(shí)例空間中的許多實(shí)例可以由擴(kuò)展引擎創(chuàng)建,這將在以下詳述。但是某些實(shí)例由模擬器218創(chuàng)建而不是由擴(kuò)展引擎創(chuàng)建。在某些實(shí)施例中,由模擬器218創(chuàng)建的實(shí)例是最高級(jí)的定義并且是傳引用成員。在某些實(shí)施中,每個(gè)最高級(jí)定義在其自己的實(shí)例空間中被模擬。模擬器218模擬在已編譯文檔的根部發(fā)現(xiàn)的兩種類型的定義(這些被稱為最高級(jí)的定義)(1)系統(tǒng)定義,以及(2)其中主機(jī)和客機(jī)是系統(tǒng)定義的宿主關(guān)系定義。這兩種類型的定義是由模擬器218創(chuàng)建實(shí)例的相當(dāng)獨(dú)立的定義。其它的定義通常僅僅用在其它定義的上下文中,從而由擴(kuò)展引擎220創(chuàng)建。在某些實(shí)施例中,模擬器218并不模擬抽象的定義,這樣典型地導(dǎo)致少量的,即便要,有意義的驗(yàn)證。通過創(chuàng)建定義的實(shí)例并且將此實(shí)例添加為實(shí)例空間的根實(shí)例來模擬系統(tǒng)定義。然后通過調(diào)用擴(kuò)展引擎220例示該實(shí)例的成員和嵌套成員。宿主定義的模擬提供了主機(jī)和客機(jī)之間的驗(yàn)證。在某些實(shí)施例中,宿主關(guān)系的實(shí)例并不用作根實(shí)例,這樣看來,特殊的根實(shí)例在調(diào)用擴(kuò)展引擎之前就創(chuàng)建好了。這個(gè)特殊的根實(shí)例是具有三個(gè)成員的系統(tǒng)定義(1)關(guān)于宿主關(guān)系的主機(jī)的系統(tǒng)定義;(2)關(guān)于宿主關(guān)系的客機(jī)的系統(tǒng)定義;(3)與第一個(gè)兩成員的主機(jī)和客機(jī)系統(tǒng)定義的實(shí)例有關(guān)的宿主關(guān)系定義。然后調(diào)用擴(kuò)展引擎222例示該特殊的根實(shí)例的成員和嵌套成員。擴(kuò)展引擎220并不創(chuàng)建傳引用成員的實(shí)例,因?yàn)橐獎(jiǎng)?chuàng)建的實(shí)例的數(shù)量是未知的并且要由配置環(huán)境確定。另外,傳引用成員可以是抽象的,這樣用于例示組成成員的具體定義就是未知的。人為干預(yù)(例如,系統(tǒng)管理員所帶來的)通常用于回答在配置期間的問題??蛇x地,這樣的干預(yù)也可用在設(shè)計(jì)期間的驗(yàn)證期間。但是,更典型地,接口和處理層210(例如模擬器218)會(huì)如下模擬人類操作員可能的選擇,這樣就減輕了在模擬期間對(duì)人為干預(yù)的需要。模擬器218創(chuàng)建一定數(shù)量的組成成員的實(shí)例,該數(shù)量等于一個(gè)或者發(fā)生的事件的最小數(shù)量中的比較大的數(shù)(例如,由傳引用成員在一參數(shù)MinOccurs中指定)。如果傳引用成員是抽象的,那么模擬器218就不創(chuàng)建該成員的實(shí)例,但是會(huì)向用戶返回一個(gè)警告信息(例如,表示不能模擬一個(gè)抽象的傳引用成員)。擴(kuò)展引擎擴(kuò)展引擎220允許向驗(yàn)證部件208輸入主要的命令,并且將那些命令展開以識(shí)別這些命令所作用的正確的對(duì)象和關(guān)系。典型地,這些主要的命令是用于創(chuàng)建或刪除特定對(duì)象或關(guān)系的命令(例如,創(chuàng)建一個(gè)網(wǎng)絡(luò)應(yīng)用程序的命令,或刪除一個(gè)網(wǎng)絡(luò)應(yīng)用程序的命令)。為了創(chuàng)建一基于SDM文件204的實(shí)例空間而添加所有附加實(shí)例和網(wǎng)絡(luò)包括傳值子代和關(guān)系所需的動(dòng)作,或者刪除恰當(dāng)?shù)膶?shí)例和關(guān)系,擴(kuò)展引擎220展開一組操作。最初,在模擬期間創(chuàng)建了最高級(jí)定義的實(shí)例(也稱為最高級(jí)實(shí)例)后,調(diào)用擴(kuò)展引擎220來填充此實(shí)例空間。根實(shí)例作為擴(kuò)展的起始位置傳給擴(kuò)展引擎。通過擴(kuò)展而創(chuàng)建的實(shí)例會(huì)與根實(shí)例相關(guān)聯(lián)。一特殊實(shí)例空間第一次調(diào)用擴(kuò)展引擎220時(shí),傳給擴(kuò)展引擎220的根實(shí)例是最高級(jí)的實(shí)例(最高級(jí)定義的實(shí)例)。但是,擴(kuò)展引擎220可以并且典型地被遞歸調(diào)用,這樣最高級(jí)實(shí)例的成員和嵌套成員才能稱為此遞歸調(diào)用的根實(shí)例。擴(kuò)展引擎220由創(chuàng)建根實(shí)例的每個(gè)成員的實(shí)例開始。由于要例示每個(gè)成員,就要檢查每個(gè)嵌套成員。任何在另一個(gè)成員內(nèi)部定義的成員都被稱為嵌套在其它成員之內(nèi)??梢酝ㄟ^多級(jí)嵌套成員(例如,一個(gè)成員可以具有定義在其內(nèi)部的嵌套成員,并且這些成員的每一個(gè)都可以有定義在他們中的嵌套成員,依次可具有定義在其內(nèi)部的嵌套成員等等)。可以在每個(gè)成員和嵌套成員上遞歸執(zhí)行擴(kuò)展過程,直到已經(jīng)完全建立根實(shí)例的實(shí)例空間。在某些實(shí)施例中,在擴(kuò)展過程中僅僅例示各種成員的子集。在擴(kuò)展過程中創(chuàng)建的此實(shí)例的子集包括以下對(duì)象成員子系統(tǒng)、資源以及端點(diǎn)。在擴(kuò)展過程中創(chuàng)建的此實(shí)例子集還包括下面的關(guān)系成員包含、通信、宿主、授權(quán)以及參考。其它不包括在此子集中的成員就不被擴(kuò)展過程所例示,而是在擴(kuò)展過程創(chuàng)建上述實(shí)例之一時(shí),創(chuàng)建過程檢查成員或定義并自動(dòng)為其它成員創(chuàng)建其子成員的實(shí)例。這些其它成員的例子包括信息流成員和約束條件成員。在某些實(shí)施例中,在調(diào)用擴(kuò)展引擎220時(shí),成員的實(shí)例已經(jīng)存在的情況下,就不再創(chuàng)建該實(shí)例。但是擴(kuò)展引擎220繼續(xù)對(duì)每個(gè)實(shí)例遞歸從而驗(yàn)證其實(shí)例空間是否完全創(chuàng)建(并且從沒有創(chuàng)建的遞歸調(diào)用中創(chuàng)建一些嵌套成員)。圖5A和5B是一個(gè)說明創(chuàng)建一示例空間的示例性的遞歸擴(kuò)展過程500的流程圖。此實(shí)例空間由SDM文檔定義,例如圖2中的SDM文檔204。過程500由圖2中的擴(kuò)展引擎220完成,并且可以以軟件、固件、硬件或它們的組合的形式執(zhí)行。最初,訪問一個(gè)實(shí)例定義(步驟502)。在調(diào)用后,擴(kuò)展引擎220被告知有一個(gè)要擴(kuò)展的實(shí)例定義(如此部分已經(jīng)討論的根實(shí)例),并且在步驟502中訪問此實(shí)例定義。此實(shí)例定義將傳給擴(kuò)展引擎220,也可以傳送一個(gè)表示此實(shí)例定義的所在位置的標(biāo)識(shí)符(例如,一指針),或者可以通知從何處和/或如何訪問此實(shí)例定義。在此實(shí)例定義是最高級(jí)定義的情況下過程500可以被模擬器218調(diào)用,或者可選擇地可以被過程500本身遞歸調(diào)用。然后選擇實(shí)例定義的一個(gè)組成成員(步驟504)??梢砸匀我忭樞蜻x擇實(shí)例定義中成員,一般以它們出現(xiàn)在定義實(shí)例空間的SDM文件的順序進(jìn)行選擇。在某些實(shí)施例中,所有對(duì)象成員在所有關(guān)系成員之前進(jìn)行選擇。然后對(duì)于選擇的成員是對(duì)象成員還是關(guān)系成員進(jìn)行檢查(步驟506),同時(shí)根據(jù)檢查的結(jié)果繼續(xù)進(jìn)行過程500。如果選擇的成員是對(duì)象成員,那么就檢查在創(chuàng)建的實(shí)例空間中是否存在正確數(shù)量的所選擇的成員的實(shí)例(步驟508)。每個(gè)成員都包括一個(gè)關(guān)于要?jiǎng)?chuàng)建多少成員的實(shí)例的指示。在某些實(shí)施例中,使用一個(gè)實(shí)例的默認(rèn)值,這樣除非該成員指定了要?jiǎng)?chuàng)建更多的實(shí)例,否則每個(gè)成員只創(chuàng)建一個(gè)實(shí)例(無論在此成員中是否顯性指定)。如果尚未存在正確數(shù)量的實(shí)例,那么就檢查該對(duì)象成員是否是一個(gè)傳值成員(步驟510)。如果對(duì)象成員是一個(gè)傳值成員,那么就創(chuàng)建最小數(shù)量的該成員定義中所指定存在的對(duì)象成員(步驟512)。但是,如果該對(duì)象成員不是傳值成員,那么它就是傳引用成員,這樣就觸發(fā)一個(gè)事件,其允許監(jiān)聽器(例如圖2的模擬器218)從而創(chuàng)建傳引用成員的實(shí)例(步驟514)。創(chuàng)建對(duì)象成員的實(shí)例之后,不管是在步驟512或步驟514,或者如果在步驟508中確定已經(jīng)存在正確數(shù)量的成員實(shí)例,過程500進(jìn)行到步驟516。在步驟516中,過程500,為在步驟512或步驟514中創(chuàng)建的實(shí)例的每個(gè)成員實(shí)例(或者確定已經(jīng)在步驟508中創(chuàng)建的實(shí)例)調(diào)用過程500。當(dāng)遞歸調(diào)用過程500時(shí),調(diào)用過程500的每個(gè)成員實(shí)例都成為每個(gè)調(diào)用的過程500的實(shí)例定義。這樣,根據(jù)實(shí)例成員遞歸調(diào)用過程500,直到在實(shí)例空間中創(chuàng)建了所有的實(shí)例。另外,還要進(jìn)行檢測(cè)是否在在步驟504中沒有選擇的實(shí)例定義中還有附加成員(步驟518)。如果在實(shí)例定義中還存在一個(gè)或多個(gè)附加成員,那么步驟500返回到步驟504從而選擇這些成員中的一個(gè)。但是,如果在實(shí)例定義中不存在此附加成員,那么這些實(shí)例定義的步驟500就完成了。返回到步驟506,如果選擇的成員是一個(gè)關(guān)系成員,過程500根據(jù)包含在此關(guān)系中的源實(shí)例的數(shù)量和目標(biāo)實(shí)例的數(shù)量,確定要?jiǎng)?chuàng)建的關(guān)系實(shí)例的數(shù)量(圖5B的步驟522)。通過將原實(shí)例的數(shù)量和目標(biāo)實(shí)例的數(shù)量相乘確定要?jiǎng)?chuàng)建的關(guān)系實(shí)例的數(shù)量,相乘的結(jié)果就是要?jiǎng)?chuàng)建的關(guān)系實(shí)例的數(shù)量(步驟524)??蛇x擇地,將原實(shí)例的數(shù)量與目標(biāo)實(shí)例的數(shù)量相乘的結(jié)果可以得到關(guān)系實(shí)例的最大值,而在步驟524中僅僅創(chuàng)建該最大數(shù)量的一個(gè)子集。例如,存在多個(gè)可以使用的主機(jī),在步驟524中可能僅僅選擇一個(gè)。類似于上述的傳引用成員,基于選擇的關(guān)系實(shí)例的子集,調(diào)用監(jiān)聽器(例如,人類操作員或者模擬器218)。模擬器218可以利用例如,用于確定要?jiǎng)?chuàng)建的關(guān)系實(shí)例的子集的不同條件或規(guī)則進(jìn)行配置或編程。根據(jù)關(guān)系成員的類型以不同方式創(chuàng)建該關(guān)系實(shí)例。在某些實(shí)施例中,可以使用關(guān)系組成成員的類型如下包含定義成員、通信定義成員、參考定義成員、宿主定義成員、以及授權(quán)定義成員。包含定義成員是一個(gè)一對(duì)多的關(guān)系,其將每個(gè)實(shí)例的父體和子成員聯(lián)系起來。包含定義成員描述了一個(gè)對(duì)象成員可以包含另一個(gè)對(duì)象成員。通信定義成員是一個(gè)多對(duì)多的關(guān)系,其將所有的服務(wù)器和客戶機(jī)成員實(shí)例的組合聯(lián)系起來。通信定義成員描述了獨(dú)立配置的軟件單元之間的相互作用。參考定義成員一個(gè)多對(duì)多的關(guān)系,其將所有的依靠原成員定義的組合聯(lián)系起來。參考定義成員用于取得實(shí)例間的從屬性(除宿主關(guān)系定義成員外)。這些從屬性可以用于,例如在配置過程中控制構(gòu)造順序以及在安裝和更新過程中控制系統(tǒng)間信息流參數(shù)。宿主定義成員是一對(duì)多的關(guān)系,其將一個(gè)宿主和每個(gè)客戶機(jī)的成員實(shí)例相關(guān)聯(lián)。宿主關(guān)系成員用于識(shí)別為了被構(gòu)造,一個(gè)客機(jī)需要一個(gè)主機(jī)。授權(quán)定義成員是一個(gè)一對(duì)一的關(guān)系,其將與兩個(gè)系統(tǒng)的通信端點(diǎn)相關(guān)。授權(quán)定義成員用于從一個(gè)系統(tǒng)向另一個(gè)系統(tǒng)傳送一個(gè)行為(例如,傳送一個(gè)系統(tǒng)直接到其他系統(tǒng)的端點(diǎn)的所有交互作用)。對(duì)于關(guān)系的每個(gè)實(shí)例,該關(guān)系實(shí)例都與源和目標(biāo)實(shí)例相聯(lián)系(步驟526)。然后過程500返回圖5A的步驟518,檢測(cè)在實(shí)例定義中是否存在要選擇的其他成員。因此遞歸調(diào)用過程500,在遞歸調(diào)用該過程的過程中,創(chuàng)建了不同的對(duì)象和關(guān)系實(shí)例。該遞歸擴(kuò)展過程可以了解當(dāng)已經(jīng)創(chuàng)建了所有的成員實(shí)例時(shí)何時(shí)完成實(shí)例空間的創(chuàng)建。由于擴(kuò)展過程的遞歸特性,產(chǎn)生的實(shí)例與作為圖2中的信息流引擎222和約束條件引擎224的入口點(diǎn)的最頂層實(shí)例相互連接。這樣創(chuàng)建的實(shí)例空間可以被看作是實(shí)例樹,其中樹的每個(gè)節(jié)點(diǎn)都表示一個(gè)成員實(shí)例。另外,樹的每個(gè)節(jié)點(diǎn)(最高層節(jié)點(diǎn)除外)都連接到一個(gè)父節(jié)點(diǎn),該父節(jié)點(diǎn)表示調(diào)用擴(kuò)展過程為創(chuàng)建樹節(jié)點(diǎn)而調(diào)用擴(kuò)展處理的成員實(shí)例。進(jìn)一步地,樹的每個(gè)節(jié)點(diǎn)都與零個(gè)或更多的子節(jié)點(diǎn)相連,該子節(jié)點(diǎn)是樹節(jié)點(diǎn)的成員實(shí)例的成員。當(dāng)葉成員確實(shí)沒有任何嵌套成員的時(shí)候(例如,所有的葉成員都有零個(gè)子節(jié)點(diǎn)),該遞歸擴(kuò)展過程就知道何時(shí)完成創(chuàng)建實(shí)例圖。另外,為了避免由于一個(gè)定義具有一個(gè)和它同類型的成員而使得擴(kuò)展過程無線循環(huán)下去,如果一定義并沒有被例示為祖先實(shí)例,在某一特定的實(shí)施例中,實(shí)例擴(kuò)展過程僅僅選擇創(chuàng)建該實(shí)例。例如,如果存在一個(gè)目錄的定義,并且該定義在其內(nèi)部還具有一個(gè)目錄,那么一旦存在單個(gè)目錄,擴(kuò)展引擎就停止擴(kuò)展過程。信息流引擎在擴(kuò)展引擎220完成擴(kuò)展處理后,調(diào)用擴(kuò)展處理產(chǎn)生的實(shí)例空間中的信息流引擎222。信息流引擎222“遍歷”實(shí)例空間的實(shí)例圖,并且發(fā)現(xiàn)實(shí)例圖中定義的信息流實(shí)例。然后信息流引擎222將信息流中的值設(shè)置成適當(dāng)值??梢栽赟M文件204的定義中說明設(shè)置,并且相應(yīng)的設(shè)置值可以存在于由這些定義創(chuàng)建的實(shí)例中。設(shè)置值可以是非計(jì)算設(shè)置值或者計(jì)算的設(shè)置值。非計(jì)算設(shè)置值是由來自定義的默認(rèn)值或初始值設(shè)置的設(shè)定值,或者是由明確設(shè)定值的用戶設(shè)定的值。非計(jì)算設(shè)置值可以被限定在創(chuàng)建其所屬的SDM實(shí)例時(shí),來設(shè)置,或者可選擇地,在SDM實(shí)例的生命期中改變。非計(jì)算設(shè)置值并不是信息流的輸出,但是它們可以作為信息流的輸入。計(jì)算的設(shè)置值是一個(gè)信息流的輸出的設(shè)定值。因此,信息流可以將值設(shè)置為計(jì)算后的設(shè)定值的值,但是其它的實(shí)體一般不可以。在某些實(shí)施中,僅僅存在一個(gè)信息流來給該值提供一個(gè)特定的計(jì)算的設(shè)置值。在某些實(shí)施中,如果多個(gè)信息流輸出給相同的設(shè)置值實(shí)例,那么就報(bào)告錯(cuò)誤并且信息流的輸出設(shè)定為錯(cuò)誤狀態(tài)。計(jì)算的設(shè)置值基于一個(gè)或多個(gè)輸入。這些輸入可以是計(jì)算的設(shè)置值和/或非計(jì)算設(shè)置值。在某些實(shí)施例中,計(jì)算設(shè)置值可以被分為兩類配置值和非配置值。配置值是由信息流計(jì)算的值,此值產(chǎn)生將之作為一部分的SDM實(shí)例配置。例如一個(gè)文件或者數(shù)據(jù)庫名的完全路徑可以是配置值。非配置值是由信息流計(jì)算但不產(chǎn)生配置的值。反而,他們僅僅作為約束條件的交換值。例如,考慮所有繼承的web.config的最終web.config設(shè)置就是一個(gè)非配置值。另一個(gè)非配置值的例子是考慮了文件的包含目錄和內(nèi)容以及關(guān)于該文件的配置的訪問控制列表的該文件的最終訪問控制列表。信息流引擎222隨意不同地處理設(shè)置值和非設(shè)置值。例如,可以給配置值一個(gè)較高的優(yōu)先級(jí),這樣可以在設(shè)置非配置值的信息流之前國際設(shè)置配置值的信息流。一般來說,通識(shí)別實(shí)例空間中的信息流實(shí)例以及識(shí)別該信息流實(shí)例的輸入值(例如,識(shí)別作為這些輸入的源的其它實(shí)例的設(shè)定值)來估計(jì)信息流的值。信息流實(shí)例引用一指令模塊和一組指令,此指令模塊或此組指令可以處理相應(yīng)于該信息流實(shí)例的信息流函數(shù)。根據(jù)輸入的值處理信息流函數(shù),并獲得該信息流函數(shù)的結(jié)果。該信息流函數(shù)的結(jié)果設(shè)置為信息流實(shí)例的輸出。一個(gè)信息流可以有零或多個(gè)輸入值,以及一個(gè)或多個(gè)輸出(例如,一個(gè)或多個(gè)實(shí)例的設(shè)置值可以根據(jù)該信息流的輸出進(jìn)行設(shè)置)。可以使用各種信息流函數(shù)的任何一種。信息流函數(shù)可以由系統(tǒng)開發(fā)者和/或其他人員定義。例如,與創(chuàng)建SDM文件204相同的設(shè)計(jì)者可以定義一個(gè)或多個(gè)信息流函數(shù)。作為在另一個(gè)例子中,開發(fā)部件202的制造商或某些其他第三方開發(fā)者都可以定義一個(gè)或多個(gè)信息流函數(shù)。信息流函數(shù)本身也可以包括任何不同的計(jì)算和/或操作,例如運(yùn)用代數(shù)、幾何、微積分等的運(yùn)算,基于日期和/或時(shí)間的計(jì)算,隨機(jī)值計(jì)算,等等。在某些實(shí)施例中,定義在SDM文件中的信息流成員與管理器定義有關(guān)。反過來,管理器定義包括一個(gè)指針,該指針指向一組可以執(zhí)行處理信息流函數(shù)的指令或代碼。這樣,為了估計(jì)用于一個(gè)信息流實(shí)例的信息流,確定該相關(guān)的管理器定義并且例示該相關(guān)的管理器(如果還沒有例示的話)。從該管理器中獲得指向指令或代碼組的指針,為了確定該信息流的輸出,允許獲得并執(zhí)行該指令或代碼組。另外,在某些實(shí)施例中,該管理器也支持類型變換。在這樣的實(shí)施例中,管理器允許一個(gè)信息流基于兩個(gè)或更多的不同類型的設(shè)置值。例如,輸入值可以是一個(gè)與輸出類型不同的類型。管理器提供了一個(gè)或多個(gè)允許作出這樣的類型轉(zhuǎn)換的方法,或者可選擇的包括了一個(gè)指針,該指針指向用于執(zhí)行該轉(zhuǎn)換的一組可獲得的并且可執(zhí)行的指令或代碼。不同的管理器支持不同的轉(zhuǎn)換(例如,管理器設(shè)計(jì)者可以將管理器設(shè)計(jì)為支持任何他們想要的類型轉(zhuǎn)換)。圖6A和6B是一個(gè)說明用于評(píng)估信息流的示例性過程600的流程圖。過程600由圖2重的信息流引擎222執(zhí)行,并且可以以軟件、固件、硬件或者它們的組合的方式執(zhí)行。最初,找出實(shí)例空間中的關(guān)于實(shí)例的所有設(shè)置(步驟602)。這些設(shè)置可以以不同的方式發(fā)現(xiàn),諸如通過檢查用于設(shè)置值的實(shí)例圖中的每個(gè)節(jié)點(diǎn)的方式。然后標(biāo)識(shí)出實(shí)例空間中的所有的信息流實(shí)例(步驟604)。實(shí)例空間中的每個(gè)信息流實(shí)例都被標(biāo)識(shí)為“臟的”并且“未訪問”(步驟606)。標(biāo)記“臟的”表示該信息流尚未被執(zhí)行或者求值。標(biāo)記“未訪問”表示該信息流的執(zhí)行或求值還沒有開始。信息流實(shí)例的標(biāo)記可以以各種不同的方式執(zhí)行。例如,每個(gè)信息流可以有一個(gè)“臟的”標(biāo)志位,其可以設(shè)置為標(biāo)記該信息流為“臟的”,并且“沒有被訪問”的標(biāo)志位可以設(shè)置為標(biāo)記該信息流為“沒有被訪問”。作為另一個(gè)例子中,信息流引擎222可以保存一個(gè)列表、表格或其它數(shù)據(jù)結(jié)構(gòu),在其中引擎222可以保存一個(gè)信息流實(shí)例的記錄以及它們的相關(guān)標(biāo)記。然后確定接收作為信息流實(shí)例的結(jié)果的值的設(shè)置(步驟608)。在步驟608中,確定所有計(jì)算的設(shè)置值。設(shè)定本身表示它們是不是計(jì)算的設(shè)定值或者非計(jì)算設(shè)定值(例如,它們可以具有一個(gè)標(biāo)志或?qū)傩?,例如一個(gè)“固定的”屬性,其可以被設(shè)置為表示它們是非計(jì)算設(shè)定值)(在不周608也可產(chǎn)生識(shí)別值從屬性的從屬性圖)。從屬性圖為每個(gè)設(shè)定值表示它依靠哪個(gè)其他設(shè)定值(即,此其它設(shè)定值是其輸入)以及哪個(gè)其他設(shè)定值依靠它(即,用它作為輸入值的其它設(shè)定值)。然后選擇在步驟604中標(biāo)識(shí)為“臟的”并且“未訪問”的信息流實(shí)例的其中之一(步驟610)。信息流實(shí)例可以以任何順序選擇,諸如,以信息流在步驟604中被標(biāo)識(shí)的順序、隨機(jī)的、基于輸入值的編號(hào),等等。然后將該選擇的信息流實(shí)例標(biāo)記為“已訪問”,但是保持為“臟的”標(biāo)記(步驟612)。這就表示與信息流實(shí)例有關(guān)的信息流的求值或執(zhí)行已經(jīng)開始,但是該信息流還沒有被執(zhí)行或者求值(例如,該信息流的輸出值還沒有確定)。然后標(biāo)識(shí)信息流實(shí)例的輸入值(步驟614)。每個(gè)信息流實(shí)例具有一個(gè)表示每個(gè)輸入源(例如,另一實(shí)例的一特定設(shè)置值)的參數(shù)。然后檢查該標(biāo)識(shí)的輸入是否被賦值(圖6B的步驟616)。非計(jì)算設(shè)置值輸入已被賦值,正如由已被求值的信息流實(shí)例計(jì)算的已計(jì)算設(shè)置值輸入。但是由未被估計(jì)的信息流實(shí)例計(jì)算的已計(jì)算設(shè)置值將不被賦值(例如,它們可能有一個(gè)空值)。如果一個(gè)或多個(gè)指定的輸入還沒有被賦值,那么就暫停這個(gè)信息流實(shí)例(在步驟610中選擇)的求值(步驟618)。暫停求值是為了計(jì)算輸入值。對(duì)于每個(gè)還沒有值的輸入,識(shí)別設(shè)定輸入值的信息流實(shí)例(步驟620)。然后過程600返回到圖6a中的步驟612來開始求信息流實(shí)例的值(步驟622)。然后當(dāng)所有的輸入都具有其值的時(shí)候,在步驟618暫停的信息流的求值就重新開始(步驟624)。例如在下面將要討論的步驟616或者步驟626中,可以恢復(fù)求值。應(yīng)當(dāng)注意的是,在步驟620中標(biāo)識(shí)的一個(gè)或多個(gè)信息流實(shí)例的求值可以由于標(biāo)識(shí)的輸入還沒有值而自行中止。返回到步驟616,如果標(biāo)識(shí)的輸入具有了值,那么輸入的值從其源處獲得(步驟626)。該值可以從不同的源獲得,例如,從SDM文件204、從根據(jù)SDM文件204例示的對(duì)象實(shí)例、從信息流實(shí)例(信息流的輸出),等等。然后識(shí)別用于執(zhí)行求信息流成員的信息流函數(shù)的值的指令或代碼組(步驟628)??蛇x擇的,與其運(yùn)行一組指令或代碼,該信息流函數(shù)還不如由硬件執(zhí)行。然后執(zhí)行這組指令或代碼,然后指令或代碼的執(zhí)行結(jié)果被用作信息流實(shí)例的輸出(步驟603),其也被稱為信息流的輸出。然后將信息流標(biāo)記為“不臟”,用以表明該信息流已經(jīng)被執(zhí)行或求值(步驟632)。該信息流應(yīng)該已經(jīng)在步驟612中被標(biāo)記為“已訪問”,但是,如果該信息流沒有被標(biāo)記為“已訪問”,那么在步驟632中將該信息流實(shí)例標(biāo)記為“已訪問”。然后檢查在實(shí)例中間是否還存在其它的被標(biāo)記為“臟的”或“未訪問”的信息流實(shí)例(步驟634)。如果還存在任何其他實(shí)例,那么過程返回到圖6A的步驟610,用于選擇此信息流實(shí)例之一。當(dāng)所有的信息流實(shí)例都被求過值之后(例如在步驟604中沒有一個(gè)信息流實(shí)例被標(biāo)記為“臟的”或“未被訪問過”),然后信息流求值過程600結(jié)束(步驟636)。當(dāng)信息流結(jié)束,模擬器218有了一個(gè)具有設(shè)定值的完整的實(shí)例空間。在圖6A和6B中的過程600被描述為,暫停具有輸入但是還沒有值的信息流實(shí)例的求值,并且求設(shè)置這些值的信息流實(shí)例的值。但是過程600也可以以可選方式執(zhí)行。例如,與其求設(shè)置那些值的信息流實(shí)例的值,過程600可以返回到選擇一個(gè)信息流實(shí)例的圖6A的步驟610(不考慮其是否為暫停的信息流設(shè)定了一個(gè)輸入值)。在此可選擇的方式中,信息流的求值可以導(dǎo)致完成某些信息流實(shí)例的求值而其它信息實(shí)例的求值被暫停了的情況。當(dāng)發(fā)生這種情況的時(shí)候,可以重復(fù)步驟616用以為每個(gè)暫停的信息流實(shí)例確定標(biāo)識(shí)的輸入是否具有值。至少有一個(gè)被暫停的信息流實(shí)例的輸入具有值,并且重復(fù)步驟616的過程可以一直進(jìn)行,直到所有的信息流實(shí)例都被求值了。信息流引擎222也檢測(cè)圖6A和6B中的信息流求值過程中的循環(huán)引用。循環(huán)引用指一個(gè)或多個(gè)信息流實(shí)例中每一個(gè)至少它們的屬性之一都依靠(直接或間接)其他的輸出。例如,信息流實(shí)例A具有一個(gè)輸出值,該值也是信息流實(shí)例A的輸入值。在另一個(gè)例子中,信息流實(shí)例A的輸入值源自信息流實(shí)例B的輸出,但是信息流實(shí)例B的輸入值源自信息流實(shí)例A的輸出值。還一個(gè)例子,信息流實(shí)例A的輸入值源自信息流實(shí)例B的輸出,信息流實(shí)例B的輸入值源自信息流實(shí)例C的輸出,而信息流實(shí)例C的輸入值源自信息流實(shí)例A的輸出。這樣的循環(huán)引用不能被求值,但是信息流引擎222還能檢測(cè)它,并且在此循環(huán)引用中的設(shè)置值被設(shè)置為錯(cuò)誤狀態(tài)。循環(huán)引用可以利用“臟的”和“已訪問”標(biāo)記被檢測(cè)出。在上面討論的步驟618中當(dāng)暫停了一個(gè)信息流的求值的時(shí)候,該信息流被標(biāo)記為“已訪問”,但是也被標(biāo)記為“臟的”,并且開始另一個(gè)信息流的求值。該另一個(gè)信息流的求值也可以被暫停,等等。如果在此信息流求值的暫停期間,一個(gè)被求值的信息流已經(jīng)在前面被標(biāo)記為“已訪問”并且仍然是“臟的”,那么就檢測(cè)到一個(gè)循環(huán)引用。換句話說,一個(gè)或多個(gè)信息流被暫停,并且在該暫停期間,求值所選擇的另一個(gè)信息流也已經(jīng)被標(biāo)記為“已訪問”和“臟的”,那么由于另一個(gè)求值所選擇的信息流的求值也已經(jīng)被暫停了,就檢測(cè)到了一個(gè)循環(huán)引用。可選擇地,可以以其它任何不同的方式檢測(cè)循環(huán)引用。例如,在上面討論的步驟618中可以創(chuàng)建表示值從屬性的從屬關(guān)系圖,此從屬關(guān)系圖可以用于識(shí)別循環(huán)引用。當(dāng)檢測(cè)到循環(huán)引用時(shí),此循環(huán)引用的所有信息流都被標(biāo)記為錯(cuò)誤(例如,循環(huán)信息流錯(cuò)誤)。檢測(cè)到循環(huán)引用時(shí)所進(jìn)行求值的信息流是此循環(huán)引用的一部分,在檢測(cè)到循環(huán)引用時(shí)從正在進(jìn)行求值的信息流接受輸入的其它信息流以及從這些信息流之一接收輸入的每一個(gè)其它信息流也是此循環(huán)引用的一部分。然后停止所有的作為此循環(huán)引用的一部分的信息流的求值。這些信息流都被標(biāo)記為“已訪問”和“臟的”,這樣才能繼續(xù)進(jìn)行其余的信息流。應(yīng)當(dāng)注意到的是,信息流可以是確定性的或非確定性的。確定性的信息流在任何時(shí)候用特定的輸入值集合調(diào)用它時(shí),都輸出相同的值。例如,信息流可以輸出兩個(gè)輸入值的和。由于信息流總是給定特定的輸入值集合而輸出相同的值,因此這樣的信息流被稱為是確定性的。然而,非確定性的信息流在每次用相同的輸入值集合調(diào)用它時(shí),都可以輸出不同的值。例如,根據(jù)一個(gè)輸入值,信息流產(chǎn)生一個(gè)隨機(jī)數(shù)。由于該信息流可以在每次用相同輸入值調(diào)用時(shí),都產(chǎn)生一個(gè)不同的隨機(jī)數(shù),因此此信息流被稱為非確定的。不具有輸入值的信息流可以是確定的(總是輸出相同的值)或非確定的(每次調(diào)用時(shí)都輸出不同的值)。在某些實(shí)施例中,設(shè)定值可以有一個(gè)錯(cuò)誤狀態(tài)。當(dāng)處于一個(gè)錯(cuò)誤狀態(tài)時(shí),設(shè)定值可以保留錯(cuò)誤信息(例如,錯(cuò)誤代碼或者錯(cuò)誤的描述)。如果設(shè)定值不保留錯(cuò)誤信息,那么此錯(cuò)誤信息將會(huì)以其它的某種方式報(bào)告(例如,通過將設(shè)置置為錯(cuò)誤狀態(tài)的事件)。一個(gè)設(shè)定值可以以不同的方式被設(shè)為錯(cuò)誤狀態(tài)。例如,當(dāng)在執(zhí)行一個(gè)信息流的過程中發(fā)生錯(cuò)誤時(shí)(例如,由于信息流返回錯(cuò)誤;由于信息流引擎不能執(zhí)行信息流,諸如當(dāng)信息流引擎檢測(cè)到一個(gè)循環(huán)引用或者由于輸入問題不能運(yùn)行一個(gè)信息流;等等),信息流引擎222將此信息流的輸出值設(shè)為錯(cuò)誤狀態(tài)。錯(cuò)誤狀態(tài)可以通過信息流傳播,這樣具有錯(cuò)誤狀態(tài)的輸入的任何信息流將會(huì)使信息流引擎將此錯(cuò)誤狀態(tài)傳播給其輸出。此錯(cuò)誤狀態(tài)最終會(huì)被信息流引擎222返回給開發(fā)部件202(例如,作為圖2的結(jié)果226)??蛇x擇地,引起源錯(cuò)誤的事件也會(huì)被信息流引擎222返回給開發(fā)部件202(例如,作為圖2的結(jié)果226),而是通過該信息流返回錯(cuò)誤狀態(tài)的傳播結(jié)果。另外,在某些實(shí)施例中,一個(gè)信息流的輸入和/或輸出涉及當(dāng)前并不存在的實(shí)例(例如,輸入或輸出可以涉及還沒有創(chuàng)建的成員)。當(dāng)一個(gè)信息流的輸入涉及當(dāng)前并不存在的實(shí)例的時(shí)候,如果對(duì)該信息流定義默認(rèn)值,該輸入就被認(rèn)為被復(fù)位或還原為一個(gè)默認(rèn)值(例如,被還原為一個(gè)指定的值)。在信息流中不存在這樣的指定,那么它將被還原為一個(gè)該成員的數(shù)據(jù)類型的默認(rèn)值。當(dāng)一個(gè)信息流的輸出涉及一個(gè)當(dāng)前不存在的實(shí)例,那么就不使用此輸出值。如果信息流的輸出不存在,那么信息流由于其沒有被設(shè)為任何值,就不必執(zhí)行。但是,即使當(dāng)前所有的輸入都不存在,如果至少存在一個(gè)輸出,該信息流將被運(yùn)行。也可以假設(shè)設(shè)計(jì)期間的驗(yàn)證允許繼承的設(shè)置模式。繼承的設(shè)置是指實(shí)例空間具有一層次結(jié)構(gòu)的對(duì)象,并且設(shè)置值可以用于一對(duì)象并使得此值用于此對(duì)象層次結(jié)構(gòu)之下的所有對(duì)象。實(shí)際上,這為在該對(duì)象下面的那些對(duì)象創(chuàng)建了一個(gè)默認(rèn)值,除非在該對(duì)象下面的那些對(duì)象不考慮該默認(rèn)值并具有它們自己的明確的適用值。這些可以被稱為對(duì)象的適用設(shè)置(該設(shè)置用于一個(gè)特定的對(duì)象)和對(duì)象的結(jié)果設(shè)置(將適用設(shè)置和繼承其父對(duì)象的設(shè)置合并的結(jié)果)。此繼承的設(shè)置可以用于不同的方式。在某些實(shí)施例中,此繼承的設(shè)置可以在SDM文件204的創(chuàng)建期間使用。SDM文件204的設(shè)計(jì)者知道此繼承的設(shè)置存在的位置,并在SDM文件204的設(shè)計(jì)中考慮到它們。例如,SDM文件204的設(shè)計(jì)者可以說明此適用設(shè)置和結(jié)果設(shè)置,但是約束條件正好與此結(jié)果設(shè)置相反。在可替換的實(shí)施例中,每個(gè)設(shè)置都具有適用設(shè)置值和結(jié)果設(shè)置值。這樣,在一個(gè)實(shí)例中的每個(gè)設(shè)置都受兩個(gè)值的影響而不是一個(gè)值。適用設(shè)置值是由該值的初始化或者明確設(shè)置的值設(shè)置。結(jié)果設(shè)置值由信息流設(shè)置。默認(rèn)地,參考該設(shè)置會(huì)得到該結(jié)果設(shè)置值,除非沒有信息流設(shè)置它,在這種情況下,它們將獲得適用設(shè)置值。在另一方面參考一個(gè)信息流的輸出會(huì)涉及默認(rèn)的結(jié)果值。另外,所有的引用都可以任意向明確參考兩個(gè)設(shè)置值的其中之一添加一個(gè)值類型限定符。典型地,每次對(duì)信息流進(jìn)行求值,都使信息流的輸出發(fā)生改變。也就是說,信息流的執(zhí)行可以導(dǎo)致重寫該信息流的任何以前的輸出。但是,在每個(gè)設(shè)置都具有適用設(shè)置值和結(jié)果設(shè)置值的實(shí)施例中,每個(gè)信息流可以將使用設(shè)置值作為其輸入之一寫入。給定一個(gè)恰當(dāng)?shù)耐贫ǖ男畔⒘骱瘮?shù),會(huì)導(dǎo)致信息流的輸出成為附加到其它信息流的輸入的適用設(shè)置。這樣,在這些實(shí)施例中,可能會(huì)在實(shí)際上具有一個(gè)附加到一個(gè)信息流輸出的新的輸入。約束條件引擎為了為由SDM文檔204定義的系統(tǒng)評(píng)估約束條件,模擬器218調(diào)用約束條件引擎224。由約束條件引擎224執(zhí)行的評(píng)估相對(duì)于環(huán)境評(píng)估在SDM文檔204中定義的約束條件(驗(yàn)證該環(huán)境是否滿足由SDM文檔204提出的約束條件),和/或相對(duì)于在SDM文檔204中定義的系統(tǒng)評(píng)估環(huán)境定義的約束條件(驗(yàn)證在SDM文檔204中定義的系統(tǒng)是否滿足由系統(tǒng)提出的約束條件)。約束條件引擎224“遍歷”實(shí)例空間,并查找和評(píng)估每個(gè)約束條件。約束條件引擎224既評(píng)估由SDM文檔204定義的約束條件,也評(píng)估由LIM文檔206定義的約束條件。一般地,在信息流引擎222完成信息流的求值后,模擬器218調(diào)用約束條件引擎224,這樣就能在擴(kuò)展以及信息流求值處理所得到的實(shí)例空間的基礎(chǔ)上,執(zhí)行約束條件的檢查。但是,在可替換的實(shí)施例中,可以在信息流引擎222完成信息流的求值之前,調(diào)用約束條件引擎224。約束條件可以采用不同的形式,在特定的實(shí)施例中,約束條件包括設(shè)置約束條件、關(guān)系約束條件以及對(duì)象約束條件。設(shè)置約束條件約束了一個(gè)對(duì)象的設(shè)置并且由管理器或代碼返回從而執(zhí)行此評(píng)估。關(guān)系約束條件約束了一個(gè)對(duì)象可以參與的關(guān)系。對(duì)象約束條件約束了在一個(gè)關(guān)系中的對(duì)象。典型地,約束條件定義標(biāo)識(shí)了一個(gè)應(yīng)用約束條件的目標(biāo)定義,并且進(jìn)一步限定了該約束條件是什么。在一個(gè)設(shè)置約束條件的情況下,一組指令或代碼(或者可選擇的為一個(gè)硬件模塊)與該約束條件(例如,由約束條件定義指定)相關(guān)聯(lián),該指令或代碼可以被執(zhí)行用以評(píng)估目標(biāo)是否滿足約束條件。在特定的實(shí)施例中,該約束條件與一個(gè)指向一組指令或代碼的管理器定義相關(guān)聯(lián),并類似于上述關(guān)于信息流評(píng)估的討論中的管理器定義。圖7A-7E是一個(gè)說明評(píng)估約束條件的示例性處理700的流程圖。處理700由圖2中的約束條件引擎224執(zhí)行,并且可以以軟件、固件、硬件或者它們的組合的方式執(zhí)行。最初,識(shí)別實(shí)例空間中的所有的約束條件(步驟702)。步驟702中的識(shí)別包括識(shí)別設(shè)置約束條件、關(guān)系約束條件以及對(duì)象約束條件。步驟702中的識(shí)別既可以識(shí)別由系統(tǒng)(例如SDM文檔204中)限定的約束條件,也可以識(shí)別由環(huán)境(例如LIM文檔206中)限定的約束條件。然后選擇一個(gè)識(shí)別的約束條件(步驟704)。該約束條件可以以任何不同的方式選擇。例如,約束條件可以以它們?cè)诓襟E702中標(biāo)識(shí)的順序進(jìn)行選擇,不同類型的約束條件可以在其它類型之前選擇(例如,設(shè)置約束條件可以在關(guān)系約束條件前面選擇),可以隨機(jī)選擇約束條件,等等。然后根據(jù)該約束條件是關(guān)系約束條件、設(shè)置約束條件還是對(duì)象約束條件,評(píng)估該選擇的約束條件。如果該約束條件是一個(gè)設(shè)置約束條件,那么就從該約束條件的目標(biāo)實(shí)例中獲得適當(dāng)值(步驟706)。此約束條件識(shí)別要評(píng)估的目標(biāo)實(shí)例(例如,通過名字識(shí)別是該約束條件的目標(biāo)的對(duì)象)。約束條件也標(biāo)識(shí)了要評(píng)估該目標(biāo)實(shí)例的哪個(gè)設(shè)置值,并且這些設(shè)置值從目標(biāo)實(shí)例中獲得。然后標(biāo)識(shí)出用于執(zhí)行評(píng)估約束條件的約束條件函數(shù)的指令或代碼組(步驟708)??蛇x擇地,不執(zhí)行指令或代碼組,約束條件函數(shù)可以以硬件的方式完成。然后執(zhí)行指令或代碼組,用以確定(或者硬件確定)在步驟706中獲得的值是否滿足約束條件(步驟710)。例如,指定組可以將獲得的值與約束條件中的值進(jìn)行比較,如果獲得的一個(gè)或多個(gè)值與一個(gè)或多個(gè)約束條件相同,就確定約束條件滿足。然后返回約束條件函數(shù)的結(jié)果(步驟712)。此結(jié)果可以作為結(jié)果226返回給圖2中的開發(fā)部件202。約束條件可以任意地包括一個(gè)名字或其它信息,該信息描述了可以在步驟712中作為結(jié)果返回的約束條件,該信息允許向開發(fā)部件202地設(shè)計(jì)者呈現(xiàn)描述任何錯(cuò)誤的附加信息。然后檢查在實(shí)例空間中是否存在任何其它沒有選擇的約束條件(步驟714)。如果所有的約束條件都已經(jīng)被選擇并評(píng)估過,那么約束條件的檢查過程就完成了(步驟716)。但是,如果還有一個(gè)或多個(gè)約束條件沒有被選擇,那么處理700就返回到步驟704來選擇另一個(gè)標(biāo)識(shí)的約束條件。返回到步驟704,如果選擇的約束條件是一個(gè)對(duì)象約束條件,那么就標(biāo)識(shí)出該約束條件的目標(biāo)實(shí)例的第一角色和第一對(duì)象定義(圖7B中的步驟718)。對(duì)于一個(gè)對(duì)象約束條件,該約束條件的目標(biāo)實(shí)例是一個(gè)關(guān)系實(shí)例。該目標(biāo)實(shí)例的第一對(duì)象定義指的是所選擇的約束條件目標(biāo)的對(duì)象名稱。該對(duì)象實(shí)例的第一角色標(biāo)識(shí)了必須與由第一對(duì)象定義標(biāo)識(shí)的定義相匹配的關(guān)系作用。然后檢查是否存在由約束條件標(biāo)定的第二角色和第二對(duì)象定義(步驟720)。在某些實(shí)施例中,約束條件可以標(biāo)定多個(gè)對(duì)象和/或角色,并且第二角色和第二對(duì)象定義可以用于標(biāo)識(shí)出由約束條件標(biāo)定的第二角色和/或?qū)ο蠖x。如果存在由約束條件標(biāo)定的第二角色和第二對(duì)象定義,那么就檢查該約束條件的第一、第二角色和第一、第二對(duì)象定義是否都與目標(biāo)實(shí)例相匹配(步驟722)。如果一個(gè)或多個(gè)角色或者一個(gè)或多個(gè)對(duì)象定義與目標(biāo)實(shí)例不匹配,那么匹配計(jì)數(shù)變量就設(shè)為零(步驟724),并且處理700繼續(xù)到圖7C的步驟726,其將在下面詳細(xì)討論。但是,如果該約束條件的第一、第二角色和第一、第二對(duì)象定義都與目標(biāo)實(shí)例相匹配,那么就評(píng)估第一對(duì)象實(shí)例的所有嵌套的約束條件(步驟728)。嵌套的約束條件既指該約束條件定義的任何子實(shí)例,也指這些子實(shí)例的任何子實(shí)例,等等。嵌套的約束條件可以是對(duì)象約束條件、關(guān)系約束條件和/或設(shè)置約束條件。如果存在任何的嵌套約束條件已經(jīng)在前面評(píng)估過了,那么就記錄它們的結(jié)果,然后在步驟728中使用那些結(jié)果。但是,對(duì)于任何還沒有評(píng)估過的嵌套約束條件,通過調(diào)用處理700并且利用每個(gè)嵌套約束條件作為在圖7A的步驟704中選擇的約束條件,評(píng)估該約束條件。一旦所有的嵌套的約束條件都已經(jīng)評(píng)估過了,那么就檢測(cè)所有的嵌套約束條件是否都為真(步驟730)。如果存在一個(gè)或多個(gè)嵌套的約束條件被評(píng)估不為真,那么匹配計(jì)數(shù)變量就設(shè)為零(步驟724)。但是,如果所有的嵌套約束條件都評(píng)估為真,那么匹配計(jì)數(shù)變量就設(shè)為1(步驟732),并且處理700繼續(xù)到圖7C中的步驟726,這將在下面詳細(xì)討論??蛇x擇地,由于步驟730是一個(gè)評(píng)估所有嵌套約束條件是否都為真的檢測(cè),在某些情況下,并不是所有的嵌套約束條件都需要評(píng)估,一旦有一個(gè)嵌套約束條件被評(píng)估不為真,就可以停止嵌套約束條件的評(píng)估并且處理700可以繼續(xù)到步驟730。例如,存在三個(gè)嵌套約束條件并且被評(píng)估為錯(cuò)誤或者不為真的第二個(gè)嵌套約束條件,那么不管第三嵌套約束條件是否評(píng)估為真,步驟730的結(jié)果都是相同的(轉(zhuǎn)向步驟724)。再返回到步驟720,如果不存在由約束條件標(biāo)定的第二角色和第二對(duì)象定義,那么就檢查約束條件的第一角色和第一對(duì)象定義是否滿足目標(biāo)實(shí)例(步驟734)。步驟734與步驟722類似,但是其僅僅根據(jù)第一角色和第一對(duì)象定義而執(zhí)行;在步驟734中不存在第二角色和第二對(duì)象定義,所以僅僅考慮第一角色和第一對(duì)象定義。如果該第一角色或者第一對(duì)象定義與目標(biāo)實(shí)例不匹配,那么匹配計(jì)數(shù)變量就設(shè)為零(步驟736),并且處理700繼續(xù)到圖7C中的步驟726,其將在下面詳細(xì)討論。但是,如果約束條件的第一角色和第一對(duì)象定義與一個(gè)對(duì)象實(shí)例相匹配,那么處理700就進(jìn)行到步驟728,在此步驟中評(píng)估該第一對(duì)象實(shí)例的所有的嵌套約束條件?,F(xiàn)在討論圖7C的步驟726,進(jìn)行檢測(cè)該匹配計(jì)數(shù)的值是否最起碼是一個(gè)最小值并且不大于一個(gè)最大值(步驟726)。這些最小值和最大值由約束條件指定,并且可以是任何值。如果匹配計(jì)數(shù)最起碼是一個(gè)最小值并且不大于一個(gè)最大值,那么此約束條件返回真值(步驟738)。此為真的返回值也可以返回給評(píng)估其它的實(shí)例的過程。例如,當(dāng)圖7B的步驟728的一個(gè)嵌套約束條件評(píng)估為真,那么此真值可以返回給評(píng)估父節(jié)點(diǎn)的過程,用以在步驟730中作出確定。此為真的返回值也可以選擇性地作為結(jié)果226的一部分返回給圖2中的開發(fā)部件202。另外,所滿足的(評(píng)估為真)約束條件的名稱或其它的標(biāo)識(shí)信息也可選擇的返回給開發(fā)部件202。但是,如果匹配計(jì)數(shù)并不至少為最小數(shù)值或者大于最大數(shù)值(步驟726),那么就檢查是否要為這個(gè)約束條件產(chǎn)生一個(gè)錯(cuò)誤信息(步驟740)。約束條件具有一個(gè)用來表示是否要為此約束條件返回一個(gè)錯(cuò)誤信息的參數(shù)或設(shè)置。此參數(shù)或設(shè)置可以由例如約束條件的設(shè)計(jì)者或開發(fā)者設(shè)置。步驟740的檢測(cè)可以通過檢查此約束條件的參數(shù)或設(shè)置是否表示應(yīng)該產(chǎn)生一個(gè)錯(cuò)誤信息而執(zhí)行。如果要產(chǎn)生此約束條件的錯(cuò)誤消息,那么就產(chǎn)生一個(gè)錯(cuò)誤消息(步驟742)。此錯(cuò)誤信息可選擇地包括以名稱或其它可以幫助用戶(例如設(shè)計(jì)者或開發(fā)者)識(shí)別產(chǎn)生錯(cuò)誤的約束條件的特性的識(shí)別信息。然后向此約束條件返回為假的值(步驟744)。在步驟724中產(chǎn)生的為假的值和/或錯(cuò)誤信息可以作為結(jié)果226的一部分返回給圖2中的開發(fā)部件202。與步驟738中的為真的返回值相似,為假的返回值和/或錯(cuò)誤消息可以返回給評(píng)估其他實(shí)例的過程。在步驟738中返回為真的值后,或者在步驟744返回為假的值,過程100返回圖7A的步驟714從而檢查是否有任何附加約束條件仍未選擇。當(dāng)返回到圖7A的步驟704時(shí),如果選擇的約束條件是一個(gè)關(guān)系約束條件,那么就初始化一個(gè)匹配計(jì)數(shù)變量(圖7D中的步驟746)。該匹配計(jì)數(shù)變量可以通過例如將此匹配計(jì)數(shù)變量設(shè)置為零來進(jìn)行初始化。此約束條件的目標(biāo)實(shí)例所參與的關(guān)系實(shí)例將被識(shí)別出來(步驟748),并且識(shí)別出這些識(shí)別的關(guān)系實(shí)例的其中之一(步驟750)。然后檢查此約束條件的關(guān)系定義和/或指向是否滿足所選擇的關(guān)系實(shí)例(步驟752)。關(guān)系定義指此關(guān)系的類型(例如,宿主、授權(quán)、通信等等),并且方向是指角色或關(guān)系的方向(例如,此關(guān)系是否指向一個(gè)宿主關(guān)系中的主機(jī)或客機(jī))。如果此約束條件的關(guān)系定義和指向關(guān)系定義和所選擇的關(guān)系實(shí)例的方向相同,那么此關(guān)系定義和約束條件的方向就與標(biāo)識(shí)的關(guān)系實(shí)例相匹配。如果此約束條件的關(guān)系定義和指向與選擇的關(guān)系實(shí)例不匹配,那么就檢查是否存在在步驟748中附加的被標(biāo)識(shí)了但還沒有被選擇的關(guān)系(步驟754)。如果存在一個(gè)和多個(gè)這樣的附加的關(guān)系,那么處理700就返回到750選擇一個(gè)還沒有被選擇的附加關(guān)系。但是,如果不存在此附加標(biāo)識(shí)的關(guān)系,那么處理700就前進(jìn)到圖7E中的步驟756,將在下面詳細(xì)討論。返回到步驟752,如果此約束條件的關(guān)系定義和指向確實(shí)與選擇的關(guān)系實(shí)例相匹配,那么就檢查在此約束條件中是否存在目標(biāo)對(duì)象定義(步驟758)。目標(biāo)對(duì)象定義在一個(gè)約束關(guān)系中是可選擇的,并且指的是被評(píng)估的關(guān)系實(shí)例的相對(duì)一方的對(duì)象實(shí)例。例如,如果該關(guān)系實(shí)例是一個(gè)宿主關(guān)系,并且目標(biāo)對(duì)象實(shí)例是主機(jī),那么此宿主關(guān)系的相對(duì)一方的對(duì)象實(shí)例就是客機(jī)實(shí)例。如果在約束條件中存在目標(biāo)實(shí)例,那么就檢查此約束條件的目標(biāo)對(duì)象實(shí)例是否與此關(guān)系實(shí)例的相對(duì)一方的實(shí)例相匹配(步驟760)。如果此約束條件中的目標(biāo)關(guān)系定義和此關(guān)系實(shí)例的相對(duì)一方的的實(shí)例相同,那么此約束條件中的目標(biāo)對(duì)象定義就與此關(guān)系實(shí)例的相對(duì)一方的實(shí)例相匹配。如果約束條件中的目標(biāo)對(duì)象定義與此關(guān)系實(shí)例的相對(duì)一方的實(shí)例不匹配,那么處理700就前進(jìn)到步驟754,檢查是否存在任何附加標(biāo)識(shí)關(guān)系仍未被選擇。但是,如果約束條件中的目標(biāo)對(duì)象定義與此關(guān)系實(shí)例的相對(duì)一方的實(shí)例相匹配,或者如果在此約束定義中不存在目標(biāo)對(duì)象定義,那么處理700就進(jìn)一步評(píng)估此關(guān)系實(shí)例的所有的嵌套約束條件(圖7E中的步驟762)。然后處理700根據(jù)是否所有的嵌套約束條件都評(píng)估為真(步驟764)繼續(xù)進(jìn)行。步驟762和764的評(píng)估和檢查與圖7B的步驟728和730的評(píng)估和檢查是類似。如果并不是所有的嵌套約束條件都評(píng)估為真,那么處理700就返回到圖7D步驟754,檢查是否存在任何附加標(biāo)識(shí)關(guān)系仍未被選擇。但是,如果所有的嵌套約束條件都評(píng)估為真,那么匹配計(jì)數(shù)變量就增加(步驟766)。匹配計(jì)數(shù)變量被增加不同的數(shù)量,例如加1。然后處理700返回到圖7D的步驟754,檢查還存在任何附加標(biāo)識(shí)關(guān)系仍未被選擇。然后檢查匹配計(jì)數(shù)值是否最起碼是最小數(shù)值并且不大于最大數(shù)值(步驟756),其與圖7C中的步驟726相似。如果匹配計(jì)數(shù)值最起碼是最小數(shù)值并且不大于最大數(shù)值,那么就返回一個(gè)真值(步驟768),其與圖7C中的步驟738相似。但是如果匹配計(jì)數(shù)值并非是最起碼的最小數(shù)值或者大于最大數(shù)值,那么就檢查是否要為此約束條件產(chǎn)生一個(gè)錯(cuò)誤(步驟770),其與圖7C中的步驟740相似。如果要產(chǎn)生一個(gè)錯(cuò)誤,那么就產(chǎn)生一個(gè)錯(cuò)誤(步驟722),其與圖7C中的步驟742相似。當(dāng)產(chǎn)生了一個(gè)錯(cuò)誤消息時(shí),或者無錯(cuò)誤消息產(chǎn)生時(shí),那么就返回一個(gè)為假的值(步驟774),其與圖7C的步驟744相似。另外,應(yīng)當(dāng)注意的是約束條件的檢查也可以進(jìn)行成組的約束條件的檢查。為了評(píng)估一組約束條件,利用處理700獨(dú)立地評(píng)估每個(gè)約束條件,并且該組的結(jié)果依賴于單獨(dú)的約束條件的評(píng)估的結(jié)果。在某些實(shí)施例中,如果該組中的至少一個(gè)實(shí)施例為真,那么,該組就評(píng)估為真。通過在處理700中向開發(fā)部件202返回表示成功的約束條件的驗(yàn)證(例如為真的值)或不成功的約束條件的驗(yàn)證(例如為假的值),以及錯(cuò)誤信息,在SDM文檔204中描述的系統(tǒng)的設(shè)計(jì)期間的驗(yàn)證的結(jié)果就返回給開發(fā)部件202。這些指示和/或錯(cuò)誤信息可以利用開發(fā)部件202顯示給設(shè)計(jì)者,用以允許通知設(shè)計(jì)者正在設(shè)計(jì)的系統(tǒng)(并且在SDM文檔204中描述)是否已經(jīng)被驗(yàn)證,或者是否存在潛在的錯(cuò)誤。通過返回錯(cuò)誤信息,設(shè)計(jì)者被更好的通知了潛在的錯(cuò)誤是什么以及如果去解決它們。此反饋可以在設(shè)計(jì)期間提交給設(shè)計(jì)者,而不需要設(shè)計(jì)者在找到設(shè)計(jì)好的系統(tǒng)的錯(cuò)誤之前,將此系統(tǒng)配置在一個(gè)數(shù)據(jù)中心上。錯(cuò)誤執(zhí)行的例子此部分說明了一個(gè)圖2的驗(yàn)證部件208如何報(bào)告錯(cuò)誤以及警告的執(zhí)行的例子。錯(cuò)誤和警告可以是任何形式的,例如此部分討論的XML格式的例子。如果通過CLR(公用語言運(yùn)行期間)期間使用驗(yàn)證部件,那么將返回帶有與此部分討論的XML格式等同的信息的類。此部分標(biāo)識(shí)了與一類錯(cuò)誤相同的值。但是其并不排除其它的值。在類型空間驗(yàn)證期間(語法分析和解析錯(cuò)誤)發(fā)生的錯(cuò)誤阻止編譯的SDM文檔的全部寫出。但是在實(shí)例空間驗(yàn)證期間(信息流和約束條件錯(cuò)誤)發(fā)生的錯(cuò)誤將不會(huì)阻止編譯的SDM文檔的全部寫出。基本的錯(cuò)誤格式基本的錯(cuò)誤包括對(duì)于所有的錯(cuò)誤通用的錯(cuò)誤信息。用于此基本錯(cuò)誤格式的XML格式的例子是<xscomplexTypename=″DocumentError″><xsattributename=″category″type=″Severity″use=″required″/><xsattributename=″code″type=″xsstring″use=″required″/><xsattributename=″description″type=″xsstring″use=″required″/><xsattributename=″sdmFile″type=″xsstring″use=″required″/></xscomplexType>下表表述了基本錯(cuò)誤的格式的屬性或者元素。語法分析錯(cuò)誤在試圖加載SDM文檔的失敗導(dǎo)致了語法分析錯(cuò)誤。此錯(cuò)誤包括行號(hào)和列號(hào)。用于此語法分析錯(cuò)誤格式的XML格式的實(shí)例是<xscomplexTypename=″DocumentParseError″><xscomplexContent><xsextensionbase=″DocumentError″><xsattributename=″lineNumber″type″xsint″/><xsattributename=″columnNumber″type-″xsint″/></xsextension></xscomplexContent></xscomplexType>下表將描述語法分析錯(cuò)誤格式的屬性或元素。解析錯(cuò)誤加載文件和解析文件類型的失敗會(huì)導(dǎo)致解析錯(cuò)誤。這類錯(cuò)誤包括解析導(dǎo)入失敗,解析類型、成員和路徑失敗。在此階段,存在一全面分析對(duì)象模型,所以依據(jù)此對(duì)象模型而不是文件中的行號(hào)和列號(hào)來引用產(chǎn)生一錯(cuò)誤的部分。用于解析錯(cuò)誤格式的XMI格式的實(shí)例是<xscomplexTypename=″DocumentResolutionError″><xscomplexContent><xsextensionbase=″DocumentError″><xsattributename=″statement″type=″documentPath″/></xsextension></xscomplexContent></xscomplexType>下表描述了解析錯(cuò)誤的屬性或元素。信息流錯(cuò)誤當(dāng)執(zhí)行信息流并為一個(gè)或多個(gè)輸入或輸出返回錯(cuò)誤的時(shí)候發(fā)生信息流錯(cuò)誤。識(shí)別出信息流成員,目的設(shè)置成員的錯(cuò)誤發(fā)生類型和上下文包括當(dāng)前組的輸入和輸出值。用于信息流錯(cuò)誤格式的XML格式的實(shí)例是<xscomplexTypename=″DocumentFlowError″><xscomplexContent><xsextensionbase=″DocumentError″><xssequence><xselementname=″inputValue″type=″flowlnput″minOccurs=″0″maxOccurs=″unbounded″/><xselementname=″outputValue″type-″fiowOutput″minOccurs=″0″maxOccurs=′unbounded″/></xssequence><xsattributename=″flowType″typc″documentPath″/><xsattributename=″flowMember″type″documentPath″/><xsattributename=″memberContext″type=″containmentPath″/><xsattributename=″flowErrorlD″type=″xsint″/></xsextension></xscomplexContent></xscomplexType>下表描述了信息流錯(cuò)誤的屬性或元素。用于信息流輸入格式的說明的XML格式的實(shí)例是<xscomplexTypename=″flowlnput″><xssequence><xselementname=″value″type=″xsanyType″minOccurs=″0″/></xssequence><xsattributename=″setting″type=″sdmsimpleName″/><xsattributename=″source″type=″documentPath″/></xscomplexType>下表描述了信息流輸入格式的說明的屬性或元素。用于信息流輸出格式說明的XML格式的實(shí)例是<xscomplexTypename=″flowOutput″><xssequence><xselementname=″value″type=″xsanyType″minOccurs=″0″/></xssequence><xsattributename=″setting″type=″sdmsimpleName″/><xsattributename=′destination″type=″documentPath″/></xscomplexType>下表中描述了信息流輸出格式的說明的屬性或元素。約束條件錯(cuò)誤當(dāng)評(píng)估一個(gè)設(shè)置的約束條件時(shí)產(chǎn)生一約束條件錯(cuò)誤,當(dāng)防護(hù)裝置未執(zhí)行其基數(shù)約束條件,或者約束條件組的至少一個(gè)成員沒有被評(píng)估為真時(shí),返回一錯(cuò)誤。當(dāng)一個(gè)設(shè)定約束條件失敗時(shí),返回包括約束條件類型、該約束條件執(zhí)行的上下文以及該約束條件的輸入值的設(shè)置的約束條件成員的說明。約束條件也可以返回一個(gè)客戶錯(cuò)誤id,其隨后可以用于查找附加的錯(cuò)誤信息。用于這樣的約束條件錯(cuò)誤格式的XML格式的實(shí)例是<xscomplexContent><xsextensionbase=″Docun~entError″><xssequence><xselementname=″inputValue″type=″constraintlnput″/></xssequence><xsattributename=″constraintMember″type=″documentPath″/><xsattributename=″constraintType″type=″docmnentPath″/><xsattributename=″memberContext″type=″containmentPath″/><xsattributename=″constraintErrorlD″type=″xsint″/></xsextension></xscomplexContent></xscomplexType>下表描述了此約束條件錯(cuò)誤格式的屬性或元素。用于一個(gè)約束條件輸入格式的描述的XML格式的實(shí)例是<xscomplexTypename-″constraintlnput″><xssequence><xselementname=″value″type=″xsanyType″/></xssequence><xsattributename=″setting″type=″sdmsimpleName″/><xsattributename=″source″type=″documentPath″/></xscomplexType>下表描述了約束條件輸入格式的說明的屬性或元素。當(dāng)防護(hù)裝置或組失敗時(shí),識(shí)別約束條件成員以及該成員的上下文和評(píng)估的上下文關(guān)系。當(dāng)約束條件上下文關(guān)系識(shí)別評(píng)估該嵌套約束條件所對(duì)照的類型和關(guān)系時(shí),該評(píng)估上下文關(guān)系不同于嵌套約束條件的成員上下文關(guān)系。用于這樣的約束條件錯(cuò)誤格式的XML格式的實(shí)例是<xscomplexTypename-″constraintGuardOrGroupError″><xsattributename=″constraintMember″type=″docmnentPath″/><xsattributename=″e(cuò)valuationContext″type=″containmentPath″/><xsattributename=″memberContext″type=″containmentPath″/></xscomplexType>下表描述了約束條件錯(cuò)誤格式的屬性或元素。文檔路徑這是一個(gè)在SDM文檔內(nèi)到達(dá)一個(gè)特定SDM元素的路徑。用于文檔路徑格式的XML格式的實(shí)例是<xssimplcTypename=″documentPath″><xsrestrictionbase=″xsstring″></xsrestriction></xssimpleType>此路徑一般具有格式namespace/root_type(/nested_type)*/member(/nested_member)*將關(guān)系和約束條件的公知設(shè)置作為嵌套成員。包含路徑包含路徑識(shí)別了從根到一特定成員的一成員序列。包含路徑穿過了許多成員,從根模擬組件通過它們的成員等直到產(chǎn)生此錯(cuò)誤的成員,以此來定位此路徑。用于文檔路徑格式的XML格式的實(shí)例是<xssimpleTypename=″containmentPath″><xsrestrictionbase=″xsstring″></xsrestriction></xssimpleType>此路徑一般具有格式Namespace/rootType(/nested_type)*member(/nested_member)*實(shí)例錯(cuò)誤編譯器返回來自編譯中的將顯示給用戶的錯(cuò)誤和警告。在一個(gè)SDM文檔的編譯過程中所遇到的錯(cuò)誤可以具有不同的嚴(yán)重等級(jí)。大多數(shù)的錯(cuò)誤是致命的,但是也存在某些錯(cuò)誤,其可能導(dǎo)致其它錯(cuò)誤或者當(dāng)其被忽略時(shí)是安全的。關(guān)于每個(gè)等級(jí)的安全性的實(shí)例細(xì)節(jié)如下。錯(cuò)誤此類錯(cuò)誤是致命的,并且具有下面的含義·不能在編譯中創(chuàng)建一輸出sdm文件(.sdmDocument)·錯(cuò)誤會(huì)導(dǎo)致編譯器完成編譯的當(dāng)前階段然后終止。例如,如果出現(xiàn)一個(gè)XML語法分析錯(cuò)誤,那么就不加載文檔。如果出現(xiàn)加載錯(cuò)誤,就會(huì)發(fā)現(xiàn)更多的加載錯(cuò)誤,但是不會(huì)繼續(xù)進(jìn)行信息流和約束條件的檢查。警告1(W1)警告不妨礙編譯SDM文檔。警告1的原則包括·可能會(huì)導(dǎo)致在編譯的將來階段中的錯(cuò)誤。例如,如果一個(gè)引用的文件沒有找到,如果從那個(gè)引用中使用所有的類型,那么在加載該目標(biāo)SDM文件時(shí)會(huì)出現(xiàn)錯(cuò)誤?!ぴ谀M實(shí)例空間期間的錯(cuò)誤。警告2(W2)警告2是最不嚴(yán)重的錯(cuò)誤。例如,在XML文件中找到額外的屬性。警告2的原則是·忽略警告2是安全的·為了清理SDM,建議進(jìn)行修補(bǔ)。警告3(W3)警告3是一個(gè)信息消息?!ぞ?是信息性的?!つJ(rèn)的,這些警告不被報(bào)告下表列出了可能會(huì)由圖2中的驗(yàn)證部件208報(bào)告的錯(cuò)誤的例子。獨(dú)立的表格用于表示一般編譯器錯(cuò)誤、文檔加載錯(cuò)誤、定義空間校驗(yàn)錯(cuò)誤、信息流錯(cuò)誤以及約束條件錯(cuò)誤的實(shí)例。這些錯(cuò)誤的描述和它們的級(jí)別都包括在下表中。也標(biāo)識(shí)了每個(gè)錯(cuò)誤的格式(例如,錯(cuò)誤(基本錯(cuò)誤)的格式、語法分析格式、解析格式、信息流格式以及約束條件格式)。一般編譯器錯(cuò)誤文檔加載錯(cuò)誤定義空間校驗(yàn)錯(cuò)誤信息流錯(cuò)誤約束條件錯(cuò)誤SDM實(shí)施的例子下面是SDM的實(shí)施的一個(gè)例子。此SDM實(shí)施的例子包括定義部分(第1部分)、體系結(jié)構(gòu)綜述部分(第2部分)以及實(shí)施細(xì)節(jié)部分(第3部分)。應(yīng)當(dāng)理解的是,在此實(shí)施的例子中描述了各種的特定值和必要條件,并且并不是所有的實(shí)施都限定于這些特定的值和必要條件。1定義2體系結(jié)構(gòu)綜述系統(tǒng)定義模型(SDM)支持連接的系統(tǒng)的單元之間的配置和相互關(guān)系的描述,我們稱此系統(tǒng)為模型化系統(tǒng)。SDM基于一個(gè)對(duì)象關(guān)系模型。利用對(duì)象描述存在于該模型化的系統(tǒng)中的元素,并且利用關(guān)系指定它們之間的聯(lián)系。SDM進(jìn)一步定義了對(duì)象和關(guān)系,其用來獲得對(duì)SDM很重要的語義。特別地,我們將對(duì)象分為系統(tǒng)、端點(diǎn)以及資源,并且將關(guān)系分為通信、包含、宿主、授權(quán)和引用。我們利用抽象對(duì)象定義提供了系統(tǒng)部件的通用分類,其允許對(duì)大范圍的應(yīng)用程序提供了工具支持,并為設(shè)計(jì)期間的類型檢查提供了基礎(chǔ)。我們期望抽象定義組為系統(tǒng)設(shè)計(jì)提供全面的技術(shù),并且我們期望它們會(huì)隨著時(shí)間慢慢地改變。然后我們利用此抽象的定義作為限定具體定義的基礎(chǔ),該具體定義表示實(shí)際應(yīng)用程序和數(shù)據(jù)中心的設(shè)計(jì)的一部分。我們采用一個(gè)抽象定義,并且提供定義具體類型的成員的實(shí)施,并且為它的屬性設(shè)定值。然后根據(jù)這些定義的集合創(chuàng)建系統(tǒng)。約束條件用于模擬允許的關(guān)系組上的限定條件,其中實(shí)例可以參與到該關(guān)系組中。我們利用約束條件獲得精細(xì)的必要條件,該必要條件依靠包含在一個(gè)關(guān)系中的對(duì)象的配置。例如,一個(gè)約束條件可用于驗(yàn)證一通信協(xié)議的每一端點(diǎn)上的參與者是否使用兼容的安全設(shè)置。為了實(shí)現(xiàn)目標(biāo)系統(tǒng)上的改變,可以使用一個(gè)需要的改變的說明性的描述,其被稱為變更請(qǐng)求。SDM定義的用于擴(kuò)展的過程將變更請(qǐng)求作為SDM執(zhí)行模塊的一部分進(jìn)行驗(yàn)證和執(zhí)行。實(shí)例空間獲得被管理的應(yīng)用程序的需要的和當(dāng)前的狀態(tài)。我們可以跟蹤實(shí)例空間中的變化并將它們與初始化變更的變更請(qǐng)求相聯(lián)系。管理器既用于提供專用的行為也用于支持運(yùn)行期間和模型化系統(tǒng)之間的交互作用。2.1對(duì)象對(duì)象用于表示模型化的系統(tǒng)的邏輯和物理方面。例如,它們可以用于表示IIS中的文件、路徑并配置。它們也可以用于表示一個(gè)應(yīng)用程序或分布式系統(tǒng)的界限。我們將對(duì)象分為三類。每一類表示了模型化的系統(tǒng)的一個(gè)方面,其每一個(gè)都將被揭示并被理解為SDM模塊本身的一部分,而不是特定模型實(shí)例的屬性或強(qiáng)制繼承結(jié)構(gòu)。2.2.1資源資源表示可以被組合創(chuàng)建一個(gè)系統(tǒng)模塊的行為的基礎(chǔ)單元。資源可以用于與其它的資源組合在一起,以增加系統(tǒng)模塊的結(jié)構(gòu)。每個(gè)資源表明對(duì)于其它資源的依賴性,該其它資源是為了進(jìn)行模型化行為所需要的資源。為了創(chuàng)建一個(gè)資源的實(shí)例,要為該系統(tǒng)標(biāo)識(shí)出主機(jī)環(huán)境。資源的實(shí)例包括作為操作系統(tǒng)的一部分的文件、路徑、登記關(guān)鍵字以及值、作為IIS和表格的一部分的web路徑和web文件,作為數(shù)據(jù)庫的一部分的行和所存儲(chǔ)的過程。2.1.2系統(tǒng)系統(tǒng)既用于表示執(zhí)行一適當(dāng)限定的任務(wù)的資源的集合,也用于表示交互執(zhí)行一適當(dāng)限定的任務(wù)的系統(tǒng)的集合。一個(gè)系統(tǒng)范圍內(nèi)的資源不能依賴該范圍之外的資源。同時(shí),我們也不需要資源來證明與同一系統(tǒng)范圍內(nèi)的其它資源進(jìn)行通信的機(jī)構(gòu)。這意味著在系統(tǒng)間交互作用必須利用通信關(guān)系顯式模型化。這也表明在一般的系統(tǒng)中該裝置是配置的最小單元,如果它們獨(dú)立地使用,我們不能保證它們會(huì)工作。系統(tǒng)的例子包括操作系統(tǒng)、宿主在IIS上的web應(yīng)用程序以及被SQL宿主的數(shù)據(jù)庫。2.1.3端點(diǎn)端點(diǎn)用于定義使系統(tǒng)支持與其它系統(tǒng)的通信的接口。由于我們不允許資源具有跨系統(tǒng)范圍的依賴性,所以端點(diǎn)必須用于模擬允許系統(tǒng)正確操作所請(qǐng)求的交互作用。端點(diǎn)的實(shí)例包括Http、Tcpip以及Soap端點(diǎn)。2.2關(guān)系我們利用關(guān)系獲得對(duì)象之間的交互作用的各個(gè)方面。所有的關(guān)系都是二元的和有方向的。除了獲得對(duì)象之間的交互作用,關(guān)系還可以在參與該關(guān)系的對(duì)象上設(shè)置約束條件,并且可以在參與者之間傳遞配置信息。同樣,為了要在這些關(guān)系上添加特定的語義,我們標(biāo)識(shí)了一組可以被SDM模型所理解的關(guān)系。這就允許我們推導(dǎo)出模型系統(tǒng)的運(yùn)行期間的狀態(tài)。特別的,需要描述的特定對(duì)象實(shí)例的情況是a)它的生命期b)誰可以與它交互c)它位于系統(tǒng)結(jié)構(gòu)的什么位置d)它與誰通信e)它依靠誰進(jìn)行它的工作f)它在什么環(huán)境中執(zhí)行g(shù))它是否可以正確、可靠地操作我們也利用關(guān)系來定義應(yīng)用程序的允許的結(jié)構(gòu)。這些情況包括a)另一個(gè)對(duì)象可以包括哪些對(duì)象b)哪些端點(diǎn)可以連接起來c)什么樣的環(huán)境可以宿主一個(gè)特定的對(duì)象以下的每個(gè)關(guān)系都可獲得上述一個(gè)或多個(gè)情況的一部分。2.2.1包含包含關(guān)系用于定義SDM模型的包含結(jié)構(gòu)。包含關(guān)系的存在用于表明一個(gè)對(duì)象可以包含另一個(gè)對(duì)象。在設(shè)計(jì)期間使用這個(gè)信息是為了當(dāng)它將如何與系統(tǒng)、資源和端點(diǎn)相聯(lián)系的選項(xiàng)提供給設(shè)計(jì)者或體系結(jié)構(gòu)設(shè)計(jì)師的時(shí)候可以指導(dǎo)設(shè)計(jì)環(huán)境。定義包含關(guān)系是為了限制一個(gè)SDM模型的結(jié)構(gòu)。例如,體系結(jié)構(gòu)設(shè)計(jì)師可以設(shè)計(jì)一個(gè)包含網(wǎng)絡(luò)目錄、文件系統(tǒng)目錄和文件的網(wǎng)絡(luò)b應(yīng)用程序模型。另一個(gè)體系結(jié)構(gòu)設(shè)計(jì)師可以擴(kuò)展該模型以允許它包含網(wǎng)絡(luò)站點(diǎn)。通過理解這些模型的基礎(chǔ)結(jié)構(gòu),操作者和工具創(chuàng)建者可以推導(dǎo)出模型實(shí)例需要什么樣的環(huán)境以及特定的模型在其所配置的系統(tǒng)上會(huì)產(chǎn)生什么影響。例如,在上面定義的第一個(gè)模型中,操作者提供了一個(gè)網(wǎng)絡(luò)站點(diǎn)來使配置應(yīng)用程序。包含關(guān)系定義可一個(gè)對(duì)象的生命期、對(duì)象的所有者以及對(duì)象出現(xiàn)在模型化的系統(tǒng)結(jié)構(gòu)的什么位置。如果一個(gè)對(duì)象僅僅具有一個(gè)父包含者,那么該父體的生命期就限定了該包含的對(duì)象的生命期。父體擁有被包含的對(duì)象。這意味著父體具有對(duì)象可見性的控制權(quán),并且可以決定是否將對(duì)象或者該對(duì)象一部分展示給它的母源。最后,父體為對(duì)象提供了上下文信息。此上下文信息可以用于幫助開發(fā)者與其它的開發(fā)者或者應(yīng)用程序的用戶就他們的應(yīng)用程序的結(jié)構(gòu)進(jìn)行交流。例如,在一個(gè)運(yùn)行的應(yīng)用程序中定位錯(cuò)誤的時(shí)候,包含鏈可以提供大量的詳細(xì)表示應(yīng)用程序失敗的部分的上下文信息。包含關(guān)系的使用包括表示一個(gè)網(wǎng)絡(luò)應(yīng)用程序的虛擬目錄的結(jié)構(gòu)以及該網(wǎng)絡(luò)應(yīng)用程序配置的文件和目錄的結(jié)構(gòu)。包含也可以用于描述網(wǎng)絡(luò)應(yīng)用程序和是其一部分的連接的系統(tǒng)模型之間的關(guān)系。2.2.2宿主宿主關(guān)系用于模型化已模擬化的環(huán)境的包含結(jié)構(gòu)。此關(guān)系獲得環(huán)境的功能性的限定。例如,文件必須被包含在一個(gè)目錄或者一個(gè)網(wǎng)絡(luò)目錄中的限定必須包含在一個(gè)網(wǎng)絡(luò)站點(diǎn)中。宿主關(guān)系定義了一個(gè)對(duì)象的生命期和它所要執(zhí)行的環(huán)境。為了存在,一個(gè)對(duì)象必須具有至少一個(gè)宿主。這就意味著宿主的生命期限定了該對(duì)象的生命期,并且如果宿主被標(biāo)記為脫機(jī),那么此對(duì)象也被標(biāo)記為脫機(jī)。宿主關(guān)系負(fù)責(zé)一個(gè)在宿主限定的環(huán)境中的對(duì)象實(shí)例的創(chuàng)建和維護(hù)。這種方式就使該關(guān)系擔(dān)負(fù)起在一個(gè)宿主上創(chuàng)建客戶的實(shí)例的責(zé)任,而不是該客戶也不是該宿主。通過提供一定范圍的宿主關(guān)系,一個(gè)客機(jī)可以被多個(gè)主機(jī)環(huán)境支持。宿主關(guān)系的存在表明在一個(gè)主機(jī)對(duì)象上放置一個(gè)客機(jī)對(duì)象是可能的。對(duì)于一個(gè)包含了許多宿主在另一個(gè)系統(tǒng)上的資源的系統(tǒng)來說,此客機(jī)系統(tǒng)中的所有的資源都與主機(jī)系統(tǒng)中的至少一個(gè)資源具有宿主關(guān)系。2.2.3通信通信關(guān)系用于模型化在連接系統(tǒng)中的子系統(tǒng)之間的通信。由于它們被表示在端點(diǎn)對(duì)象之間,所以它們僅僅被設(shè)置在具有端點(diǎn)的系統(tǒng)之間。如果一個(gè)系統(tǒng)包含也具有端點(diǎn)的嵌套系統(tǒng),那么通過已被內(nèi)部系統(tǒng)端點(diǎn)依次授權(quán)的位于外部系統(tǒng)上的代理端點(diǎn)揭示了這些端點(diǎn)。如果一組端點(diǎn)之間不存在通信關(guān)系,那么就不能在這些端點(diǎn)之間建立連接。如果一個(gè)系統(tǒng)被標(biāo)記為脫機(jī),那么該系統(tǒng)的所有客機(jī)都被更新,用以反映該系統(tǒng)不能使用的事實(shí)。通過基于該系統(tǒng)的通信關(guān)系傳播該改變,實(shí)現(xiàn)此更新。2.2.4引用引用關(guān)系用于獲得正確的操作所需的資源或系統(tǒng)間的從屬關(guān)系,但是其并不認(rèn)為是從屬對(duì)象的執(zhí)行環(huán)境的一部分。例如,為了向網(wǎng)絡(luò)服務(wù)的用戶提供一個(gè)網(wǎng)絡(luò)內(nèi)容,網(wǎng)絡(luò)目錄需要對(duì)本地目錄或者遠(yuǎn)程共享的引用。這就被表示為網(wǎng)絡(luò)目錄與本地目錄或遠(yuǎn)程共享之間的從屬關(guān)系。2.2.5授權(quán)授權(quán)關(guān)系用于將代理的交互作用傳遞給一個(gè)對(duì)象實(shí)例,該對(duì)象實(shí)例執(zhí)行由該代理指示的行為。一般使用授權(quán)是從一個(gè)父系統(tǒng)的端點(diǎn)向一個(gè)被包含的系統(tǒng)的端點(diǎn)傳送通信關(guān)系。2.3定義對(duì)象和關(guān)系定義用于創(chuàng)建可重復(fù)使用的配置,該配置可以被例示為創(chuàng)建該配置的實(shí)例。然后這些實(shí)例共享由該定義指定的公共特性。抽象定義由于它不完善,所有不能被直接例示。為了完善它,另一定義要擴(kuò)展它,用以添加丟失元素。利用抽象的定義創(chuàng)建在建立一個(gè)實(shí)體系統(tǒng)的模型時(shí)要用到的建立塊。抽象定義間的關(guān)系限定了擴(kuò)展該抽象定義的定義的允許的結(jié)構(gòu)。這就允許設(shè)計(jì)界面使用抽象定義,定義界面的用戶可以執(zhí)行的動(dòng)作。例如,一個(gè)網(wǎng)絡(luò)應(yīng)用程序參與的包含關(guān)系指導(dǎo)了擴(kuò)展該抽象定義的網(wǎng)絡(luò)應(yīng)用程序的結(jié)構(gòu)。本質(zhì)上,抽象對(duì)象定義和關(guān)系定義的組合限定了模型化目標(biāo)系統(tǒng)的模式。具體對(duì)象定義的角色是,根據(jù)一個(gè)或多個(gè)抽象定義,利用抽象定義空間的一個(gè)子集創(chuàng)建一個(gè)可重復(fù)使用的配置。作一個(gè)簡單的推理,抽象定義空間可以與數(shù)據(jù)庫的規(guī)劃相比較;具體對(duì)象定義空間表示了在數(shù)據(jù)庫中的一組行的可重復(fù)使用的模板。當(dāng)創(chuàng)建具體對(duì)象的實(shí)例時(shí),在數(shù)據(jù)庫中僅僅創(chuàng)建這些行。為了執(zhí)行設(shè)計(jì)期間的驗(yàn)證,我們可以相對(duì)于抽象定義空間驗(yàn)證一個(gè)具體對(duì)象定義,同樣的方式,我們可以相對(duì)于規(guī)劃的約束條件(例如外國關(guān)鍵字等)驗(yàn)證數(shù)據(jù)庫中的這些行。設(shè)置定義用于創(chuàng)建簡單的值元素。這些值元素可以用于存儲(chǔ)配置信息。2.4成員一個(gè)定義可以包括引用其它定義的成員。成員可以以定制特定的應(yīng)用程序的方式,允許一個(gè)定義重新使用另一個(gè)定義。設(shè)置成員用于識(shí)別與定義有關(guān)的配置信息。設(shè)置成員以設(shè)置定義為基礎(chǔ)。對(duì)象成員用于創(chuàng)建一個(gè)特定對(duì)象定義的實(shí)例。設(shè)置信息流可以用于提供對(duì)象的值。當(dāng)說明一個(gè)對(duì)象成員時(shí),用戶可以決定對(duì)象成員是否與外部系統(tǒng)(值語義)同時(shí)創(chuàng)建,或者對(duì)象成員是否由一個(gè)隨后將發(fā)生的明確的新操作創(chuàng)建(引用語義)。關(guān)系成員限定了創(chuàng)建對(duì)象成員時(shí)其所參與的關(guān)系。如果一個(gè)對(duì)象不禁暗被其母源包含,那么將說明該成員和包含定義之間的包含關(guān)系成員。如果一個(gè)對(duì)象成員被授權(quán),那么將在對(duì)象成員和源對(duì)象成員之間限定授權(quán)關(guān)系成員??梢栽谕ㄐ诺亩它c(diǎn)之間說明通信關(guān)系成員。可以在從屬物和源對(duì)象成員之間說明從屬關(guān)系成員(引用和宿主)。約束成語用于縮小特定對(duì)象將要參與的關(guān)系組或者參與到一個(gè)特定的關(guān)系中的對(duì)象組。它們標(biāo)識(shí)了一個(gè)對(duì)象或者關(guān)系上的約束條件,該約束條件可以指向該對(duì)象或者關(guān)系的設(shè)置,或者約束了與該對(duì)象或關(guān)系相關(guān)的交互作用。信息流成員用于限定成員間的配置的信息流。它們從成員的設(shè)置中收集數(shù)據(jù)值,根據(jù)這些信息執(zhí)行某西處理,然后向這些成員的設(shè)置分發(fā)結(jié)果。2.5實(shí)例實(shí)例空間反映了模擬系統(tǒng)的當(dāng)前狀態(tài)。保存了已經(jīng)創(chuàng)建的實(shí)例和這些實(shí)例之間的關(guān)系的完整的記錄。每個(gè)實(shí)例具有一個(gè)相關(guān)的版本歷史,其中每個(gè)版本都與一個(gè)變更請(qǐng)求相關(guān)聯(lián)。變更請(qǐng)求初始化創(chuàng)建新實(shí)例的過程。此變更請(qǐng)求定義了與一現(xiàn)有實(shí)例的特定成員的類型和關(guān)系相關(guān)的一組創(chuàng)建、更新和刪除請(qǐng)求;根是一特殊情況。此變更請(qǐng)求在運(yùn)行期間擴(kuò)展,相對(duì)于所有約束條件校正,然后構(gòu)建。擴(kuò)展過程將隱含構(gòu)建的對(duì)象和關(guān)系實(shí)例識(shí)別為包含對(duì)象的構(gòu)建請(qǐng)求的一部分,然后通過所有關(guān)系來求設(shè)置信息流的值。識(shí)別步驟檢查所有請(qǐng)求關(guān)系是存在的以及此關(guān)系實(shí)現(xiàn)所有約束條件。最后,構(gòu)建過程確定每個(gè)實(shí)例的調(diào)度、更新和刪除的適當(dāng)順序,然后以正確順序?qū)⒚總€(gè)實(shí)例傳遞給一實(shí)例管理器從而執(zhí)行適當(dāng)操作。2.6對(duì)象模型以下uml圖取得了SDM模型對(duì)象之間的主要交互作用。簡而言之,在基本類型之間定義了這些相互作用中的一部分,其中導(dǎo)出類型之間存在實(shí)際交互作用,因而其更特殊。SDM文檔包含描述以下內(nèi)容的信息文檔、文檔中定義的管理器、引用其他文檔的導(dǎo)入語句以及一組由該文檔所描述的對(duì)象和關(guān)系的定義。許多SDM元素也可以包含設(shè)計(jì)數(shù)據(jù),允許設(shè)計(jì)表面由設(shè)計(jì)表面內(nèi)元素顯示和制造產(chǎn)生具有特定信息的SDM元素。圖8描述了一示例性的SDM文檔。從如圖9的一公用基本定義派生出所有SDM定義。定義可包含一描述、一組成員、一組設(shè)置值和設(shè)計(jì)數(shù)據(jù)。我們將定義分為對(duì)象、關(guān)系、約束條件、信息流和設(shè)置定義。對(duì)象定義進(jìn)一步分為系統(tǒng)、資源和端點(diǎn)定義。關(guān)系定義進(jìn)一步分為宿主、通信、授權(quán)、參考和包含定義。成員用于將一名稱與一特殊實(shí)例或如圖10所示的多組實(shí)例相關(guān)。所有成員涉及一定義。每個(gè)成員可包含一組設(shè)置值、一描述和設(shè)計(jì)數(shù)據(jù)。成員可基于它們參考的定義種類來劃分。信息流和約束成員增加了限定輸入的能力,該其從包含定義范圍內(nèi)的設(shè)置成員獲得源設(shè)置值。信息流成員也增加了輸出,此輸出允許將所處理的信息流值傳給包含定義內(nèi)的設(shè)置成員。一示例性的設(shè)置成員如圖11所示。設(shè)置值涉及一設(shè)置定義,該設(shè)置定義表示一復(fù)雜或簡單的設(shè)置定義。一復(fù)雜設(shè)置定義可包含嵌套設(shè)置成員。一簡單定義限定了一單值域。輸入和輸出對(duì)象用于定義了在設(shè)置成員之間的設(shè)置值的傳送。一示例性的約束條件定義如圖12所示。約束條件用于限制設(shè)置值和SDM模型結(jié)構(gòu)的限制條件。一約束條件定義標(biāo)定于一特殊對(duì)象或關(guān)系定義。此約束條件定義可對(duì)對(duì)象參與的關(guān)系或參與一關(guān)系的對(duì)象設(shè)置結(jié)構(gòu)約束條件。此結(jié)構(gòu)約束條件也可以直接加到該對(duì)象或關(guān)系定義中。描述對(duì)象用于提供SDM元素的自然語言描述,如圖13所示。這些元素可響應(yīng)管理器而定位。設(shè)計(jì)數(shù)據(jù)元素包含由編輯SDM文檔的設(shè)計(jì)表面定義的結(jié)構(gòu)化數(shù)據(jù)。2.7分層SDM文檔的目的是允許區(qū)分應(yīng)用程序的開發(fā)者、軟件基礎(chǔ)結(jié)構(gòu)的設(shè)計(jì)者以及數(shù)據(jù)中心體系結(jié)構(gòu)設(shè)計(jì)者之間的關(guān)注點(diǎn)。這些組中每一個(gè)著重于特殊服務(wù)且具有一組各不相同的相關(guān)性。例如,開發(fā)者主要關(guān)注依靠諸如SQL、IIS和CLR的主機(jī)的配置及其之間的聯(lián)系。主機(jī)配置的設(shè)計(jì)者關(guān)注網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和OS配置,而開發(fā)網(wǎng)絡(luò)結(jié)構(gòu)、OS配置和存儲(chǔ)映射的體系結(jié)構(gòu)設(shè)計(jì)者需要知道數(shù)據(jù)中心的硬件。為支持關(guān)注點(diǎn)區(qū)分,SDM揭示了分層的概念。利用宿主關(guān)系可實(shí)現(xiàn)分層。通過定義操作系統(tǒng)、諸如sql的宿主以及sql提供的例如數(shù)據(jù)庫的服務(wù)之間的宿主關(guān)系,就允許應(yīng)用開發(fā)者定義包含數(shù)據(jù)庫的應(yīng)用應(yīng)用程序,而允許體系結(jié)構(gòu)設(shè)計(jì)者定義包含SQL宿主的系統(tǒng)。通過連接宿主系統(tǒng)和客戶系統(tǒng)之間的宿主關(guān)系,將分層合并這些分離的系統(tǒng)。層邊界可以是任何存在宿主關(guān)系的地方。為簡化設(shè)置層邊界的選擇,我們定義了四個(gè)基本層作為SDM模型的部分。然后將系統(tǒng)與其中一層相聯(lián)系。此四個(gè)層為應(yīng)用程序?qū)印ご藨?yīng)用程序?qū)又С旨s束環(huán)境的應(yīng)用程序結(jié)構(gòu)。由主機(jī)層中標(biāo)識(shí)的主機(jī)配置定義此環(huán)境。·應(yīng)用程序?qū)又械南到y(tǒng)定義的例子包括網(wǎng)絡(luò)服務(wù)、數(shù)據(jù)庫和新聞組對(duì)話時(shí)間表。宿主層·在軟件部件外部構(gòu)建數(shù)據(jù)中心。配置部件之間的連接。一些部件作為應(yīng)用層的宿主?!ぴ诖藢又邢到y(tǒng)定義的例子——IIS、SQL、AD、EXCHANGE、DNS和Biztalk。網(wǎng)絡(luò)/OS/存儲(chǔ)器層·建立數(shù)據(jù)中心網(wǎng)絡(luò)和平臺(tái)。配置網(wǎng)絡(luò)安全模型和操作系統(tǒng)平臺(tái)配置。將存儲(chǔ)器加入操作系統(tǒng)配置?!ぴ诖藢又械南到y(tǒng)定義的例子一VLAN、Windows、濾波器、存儲(chǔ)器硬件層此硬件層識(shí)別數(shù)據(jù)中心中的機(jī)器類型以及這些機(jī)器之間的物理連接。圖14表示層4網(wǎng)絡(luò)應(yīng)用程序映射到層3網(wǎng)絡(luò)服務(wù)器主機(jī)的例子。每層的外方框代表一系統(tǒng),在邊緣上的方框代表端點(diǎn)而在內(nèi)部的方框代表資源。通過宿主關(guān)系將每個(gè)元素映射到下層主機(jī)上。3實(shí)施細(xì)節(jié)3.1命名在SDM中有很多地方需要一強(qiáng)大的命名系統(tǒng)來識(shí)別對(duì)象。以下命名系統(tǒng)允許SDM文檔的創(chuàng)建者以以下方式標(biāo)記文檔用戶能確信此文檔的定義與開發(fā)者原始公布的相同。以下是用于SDM文檔識(shí)別器的例子<SystemDefinitionModelName=″System.OperatingSystem.FileSystem″Version=″0.1.0.0″DocumentLanguage=″e(cuò)n″Xmlns=http//schemas.microsoft.com/SystemDefinitionModel/2003/10″Version=″0.1.0.0″PublicKeyToken=″AAAABBBBCCCCDDDD″Culture=″neutral″Platform=″neutral″></SystemDefinitionModel>為了引用在另一個(gè)名稱空間中的一類型,要導(dǎo)入此名稱空間<lmportAlias=″FileSystem″Name=″System.OperatingSystem.FileSystem″Version=″0.1.0.0″/>然后可以利用別名引用名稱空間內(nèi)的定義FileSystemFile3.1.1身份SDM名稱被定義在它們的名稱空間的范圍內(nèi)。名稱空間通過名稱、版本和一公鑰令牌來識(shí)別且包含在一單個(gè)文件中。身份的基本形式包括名稱、版本、文化、平臺(tái)和一公鑰令牌。<xsattributeGroupname=″ldentiy″><xsattributename=″Name″type=″Path″use=″required″/><xsattributename=″Version″type=″FourPartVersionType″use=″required″/><xsattributename=″PublicKeyToken″type=″PublicKeyTokenType″use=″optional″/><xsattributename=″Culture″type=″CultureNeutral″use=″optional″/><xsattributename=″Platform″type=″xsstring″use=″optional″/></xsattributeGroup>基本身份可結(jié)合一簽名和一公鑰使用,用以創(chuàng)建被稱為名稱空間身份的新的強(qiáng)大的身份。此身份用于識(shí)別一SDM文檔。為創(chuàng)建此身份,利用私鑰對(duì)此文檔進(jìn)行標(biāo)記,從而允許文檔用戶利用公鑰校驗(yàn)其上下文。公鑰令牌是識(shí)別一公鑰/私鑰對(duì)的公共部分的16進(jìn)制字符串。它不是公鑰;它只是公鑰的64位混編信息。<xssimpleTypename=″PublicKeyTokenType″><xsrestrictionbase=″xsstring″><xspatternvalue=″(|[a-f]|[A-F]){16}″></xsrestriction></xssimpleType>利用一文化標(biāo)識(shí)符指定文檔語言,此文化標(biāo)識(shí)符包含定義語言的兩個(gè)小寫字母和定義國家或區(qū)域的兩個(gè)或三個(gè)大寫字母。<xssimpleTypename=″Culture″><xsrestrictionbase=″xsstring″><xspatternvalue=″[a-z]{2}((-[A-Z]{2})?|(-[A-Z]{3})?)″></xsrestriction></xssimpleType><xssimpleTypename=″CultureNeutral″><xsunionmemberTypes=″Culture″><xssimpleType><xsrestrictionbase=″xsstring″><xsenumerationvalue=″neutral″/></xsrestriction></xssimpleType></xsunion></xssimpleType>3.1.2版本文件版本由N.N.N.N形式的四部分?jǐn)?shù)字來定義,其中0<=N<65535。按照慣例,數(shù)字參考主.次.建立.修正。版本號(hào)標(biāo)識(shí)文檔所包含的所有定義的版本。這意味著當(dāng)文檔中所有的定義一起升級(jí)時(shí),此文檔成為版本單元。<xssHnpleTypename=″FourPartVersionType″><xsrestrictionbase=″xsstring″><xspatternvalue=″({1,4}|{4}|64{3}|655|6553[0-5))(\.({1,4}|{4}|64{3}|655|6553)){3}7></xsrestriction></xssimpleType>3.13簡名簡名是由字母-數(shù)字字符和有限的標(biāo)點(diǎn)符號(hào)組成。此名稱以非數(shù)字字符開始。<xssimpleTypename=″SimpieName″><xsrestrictionbase=″xsstring″><xspattemvalue=″[a-z,A-Z,J{1}(<simpleName>(.<simpleName>)*([<別名>]<簡名>(.<簡名>)*)在導(dǎo)入語句內(nèi)定義簡名。<xssimpleTypename=″QualifiedName″><xsrestrictionbase=″xsstring″><xspatternvalue=″[a-z,A-Z,_]{1}()*([a-z,A-Z,_]{1}()*)?(\.[a-z.A-Z,_]{1}()*)*″/></xsrestriction></xssimpleType>3.1.7名稱轄區(qū)定義的名稱由它們?cè)谄渲卸x的上下文來確定轄區(qū)。最主要轄區(qū)是文檔。假如一定義被嵌套,那么它的名稱由此定義確定轄區(qū)。這意味著在其父轄區(qū)內(nèi)可隱藏名稱。也意味著對(duì)一個(gè)在其定義轄區(qū)之外的定義的引用可以由其父轄區(qū)的名稱限定。一完全限定名稱包括從文檔根到嵌套定義的所有名稱。3.1.8成員路徑成員路徑是一名稱序列,該名稱序列相應(yīng)于定義所通過的成員。路徑應(yīng)以一成員名稱開始,此成員名稱定義在聲明此路徑的上下文中。一些成員名稱被自動(dòng)加入一定義。我們稱之為公知名稱。公知名稱的例子包括在一定義或引用聲明中的“這個(gè)”、在一宿主關(guān)系聲明中的“宿主”和“客戶”、或在一約束聲明中定義的“目標(biāo)”。此設(shè)置目標(biāo)也標(biāo)識(shí)對(duì)相關(guān)信息流定義的設(shè)置,此設(shè)置將用作由路徑標(biāo)識(shí)的設(shè)置的源值或目的設(shè)置成員名稱以點(diǎn)分隔。<simpleName>(.<simpleName>)*(<簡名>(.<簡名>)*)<xssimpleTypename=″Path″><xsrestrictionbase=″xsstringH><xspatternvalue=″[a-z,A-Z]{1}()*(\.[a-z,A-Z]{1}()*)*″/></xsrestriction></xssimpleType>3.1.9實(shí)例路徑實(shí)例空間中的路徑基于xpath,其中在xpath中的元素名稱對(duì)應(yīng)于成員名稱,且在xpath中的屬性對(duì)應(yīng)于設(shè)置。3.1.10簽名為了提供一個(gè)驗(yàn)證文檔內(nèi)容并將一強(qiáng)大名稱與文檔相關(guān)聯(lián)的機(jī)制,利用一密鑰標(biāo)記一已編譯SDM文檔。此簽名機(jī)制利用DSIG標(biāo)準(zhǔn)(http//www.w3.org/2000/09/xmldsig#)來標(biāo)記文檔。在一標(biāo)記文檔中嵌入一個(gè)與以下描述類似的簽名節(jié)點(diǎn)。<Signaturexmlns=″http//www.w3.org/2000/09/xmldsig#″><Signedlnfo><CanonicalizationMethodAlgorithm=″http//www.w3.org/TR/2001/REC-xml-c14n-20010315″/><SignatureMethodAlgorithm=http//vww.w3.org/2000/09/xmldsig#rsa-shal″/><ReferenceURI=″″><Transforms><TransformAlgorithm=″http//www.w3.org/TR/2001/REC-xml-c14n-20010315″/><TransformAlgorithm=″http//www.w3.org/2000/09/xmldsig#enveloped-signature″/></Transforms><DigestMethodAlgorithm=″http//www.w3.org/2000/09/xmldsig#shal″/><DigestValue>Dn9BN6rKnnzzgGxaWI3j0aW8/1g=</DigestValue></Reference></Signedlnfo><SignatureValue>JaNLAktv2+n4Xz3p0jM8zqwmUc8T91AOtwasKOVBwHgvYAGijRFI0U1kcVfHbDJoi8ln33prnS5ITNj46rGYRn/UK11vjvpprfgz2a+QI7G4o7hBwO0SZzLLPO7/y7+Gkw0Cr6zaoDmOFSdP8IAATuVJC40pZhbDmcmHJduaXm0=</SignatureValue><Keylnfo><KeyValuexmlns=″http//www.w3.org/2000/09/xmidsig#″><RSAKeyValue><Modulus>wxxlCIOui6J77CZcnzLOcBBxl/3uuFrUBEyFivVklRtTTzQpgirdaNouQ9ziCAK6aipeM6RjgYAoDPs/iWFnrHmtDoxgP2H4/W9lttXO5EjQDb76XAZRPSvthJYtreKEGE0d6L6iTRdg25hYGFkyY/Ys0s0ONh3+5VO0Wxq+Fx0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></Keylnfo></Signature>此結(jié)點(diǎn)是文檔的一根結(jié)點(diǎn),其應(yīng)該文檔的任何其他內(nèi)容之前產(chǎn)生。我們利用“any”(“任何”)標(biāo)記來聲明此元素,但我們?cè)诖宋恢蒙现怀姓J(rèn)并處理一“Signature”(“簽名”)結(jié)點(diǎn)。<xsanynamespace=″http//www.w3.org/2000/09/xmldsig#″processContents=″skip″minOccurs=″0″/>3.1.11定義、引用和解析名稱空間的名稱在此部分,描述了匹配一引用特定名稱空間的名稱空間所用到的的處理。如3.1.1部分所定義的,一名稱空間身份包括五屬性·Simplename簡名·PublickeyToken公鑰令牌·Version版本·Language語言·Platform平臺(tái)名稱空間的客戶利用這些屬性識(shí)別所需的名稱空間(名稱空間引用),名稱空間的開發(fā)者用它來提供一名稱空間的公知身份(名稱空間定義)。依據(jù)這些屬性是名稱空間引用的一部分還是名稱空間定義的一部分,每個(gè)屬性可以有不同解釋。3.1.11.1名稱空間定義當(dāng)一開發(fā)者希望創(chuàng)建并公布一新的名稱空間時(shí),此開發(fā)者·提供此名稱空間的一個(gè)簡名·提供此名稱空間的一個(gè)版本此開發(fā)者可選地·以密鑰標(biāo)記名稱空間·標(biāo)識(shí)此名稱空間的一個(gè)特定文化(默認(rèn)為文化中立)·識(shí)別此名稱空間的一個(gè)特定平臺(tái)(默認(rèn)為平臺(tái)中立)假如未標(biāo)記此名稱空間,則無公鑰令牌且此名稱空間將具有一弱名稱。可延遲標(biāo)記一名稱空間,從而允許開發(fā)者將標(biāo)記處理和編譯處理分開。一個(gè)已編譯但未標(biāo)記的延遲標(biāo)記名稱空間可在編譯過程中引用但不能在運(yùn)行期間使用。3.1.11.2名稱空間引用當(dāng)一客戶在一SDM文件中引用(導(dǎo)入)一名稱空間時(shí),他們需要·提供所引用的名稱空間的名稱他們可選地可以提供其它信息,包括·引用的名稱空間的公鑰令牌·引用的名稱空間的最低版本·引用的名稱空間的文化或一通配符(*)·引用的名稱空間的平臺(tái)或一通配符(*)所有未提供的屬性默認(rèn)為一個(gè)匹配該屬性的任何值的通配符。3.1.11.3將一引用與一定義匹配以下算法用于匹配引用一名稱空間定義的名稱空間。當(dāng)編譯一名稱空間和解析所編譯的名稱空間之間的引用時(shí),均可采用此算法。在編譯和編譯后的情況之間只有一個(gè)微小的不同在編譯期間忽略名稱空間的版本域,但在運(yùn)行期間則必須給出。編譯處理將更新名稱空間引用,用以增加來自編譯期間一引用所要被解析到的名稱空間的其它信息。一般會(huì)添加名稱空間的版本。假如不提供公鑰令牌且此令牌在解析名稱空間中存在,則將其加入到名稱空間引用中。邏輯上,解析算法如下1、查找所有具有與引用中的名稱相匹配的名稱的名稱空間。2、假如此引用提供一公鑰令牌,那么只選擇也與所提供的公鑰令牌相匹配的名稱空間。3、假如引用提供了一特定語言,那么刪除與該語言不匹配的所有名稱空間。假如此語言屬性被設(shè)置為未提供的通配符,那么保持所有名稱空間。4、假如提供了一特定平臺(tái),那么刪除與此平臺(tái)不匹配的所有名稱空間。假如平臺(tái)屬性被設(shè)置為未提供的通配符,那么保持所有名稱空間。5、然后利用版本策略,從此可能的名稱空間組中選擇一特殊名稱空間。以下的部分更詳細(xì)地定義了這些步驟3.1.11.3.1匹配名稱空間名稱匹配是一精確的字符串匹配。此名稱區(qū)分大小寫。3.1.11.3.2匹配公鑰令牌令牌匹配為一精確匹配3.1.11.3.3匹配語言有三種語言匹配的情況1、引用=*,定義=特定語言。2、引用=特定語言,定義=*。3、引用=特定語言,定義=特定語言。在第一和第二情況下,定義與引用相匹配。在第三情況下,假如語言為精確匹配,則定義只與引用匹配。3.1.11.3.4匹配平臺(tái)有三種平臺(tái)匹配的情況1、引用=*,定義=特定平臺(tái)。2、引用=特定平臺(tái),定義=*。3、引用=特定平臺(tái),定義=特定平臺(tái)。在第一和第二情況下,定義與引用匹配。在第三情況下,假如語言為精確匹配,則定義只與引用匹配。3.1.11.3.5匹配版本版本匹配依賴于編譯器或運(yùn)行期間所使用的版本策略。3.2設(shè)置所有定義能公開設(shè)置值,這在XML模式中被稱為設(shè)置聲明。這些成員用于描述與此定義相關(guān)的配置值。利用SettingValue語句來提供值。這些被使用a)被定義使用,該定義聲明將設(shè)置定義為默認(rèn)值的設(shè)置成員。b)被一定義使用,該定義擴(kuò)展另一定義用以提供此基本定義的默認(rèn)或固定值。c)被成員使用,該成員引用一定義,并通過在引用此定義的成員處終止的成員路徑使用。d)通過關(guān)系的信息流使用。為定義一設(shè)置,首先需要利用xsd定義此設(shè)置的定義。<SettingDefinitions><xsschematargetNamespace=″System.OperatingSystem.Registry″xmlns=″System.OperatingSystem.Registry″xmlnsxs=″http//www.w3.org/2001/XMLSchema″><xssimpleTypename=″PathType″><xsrestrictionbase=″xsstring″/></xssimpieType><xssimpleTypename=″RegistryValueType″><xsrestrictionbase=″xsNMTOKEN″><xsenumerationvalue=″binary″/><xsenumerationvalue=″integer″/><xsenumerationValue=″long″/><xsenumerationvalue=″e(cuò)xpandString″/><xsenumerationvalue=″multiString″/><xsenumerationvalue=″string″/></xsrestriction></xssimpleType></xsschema></SettingDefinitions>然后,可聲明一個(gè)使用此定義并包括一組屬性的設(shè)置,從而定義設(shè)置的狀態(tài)。<SettingDeclarationName=″Definition″Definition=″RegistryValueType″Access=″Readwrite″Required=″true″/>一旦具有了一設(shè)置說明,就能為該設(shè)置提供一個(gè)值。<SettingValueName=′Definition″Fixed=″true″>long</SettingVaiue>3.2.1設(shè)置定義利用XSD模式定義設(shè)置成員所用到的設(shè)置定義。我們只支持使用一模式的簡單和復(fù)雜類型,盡管存在可支持那些類型的定義的其他模式的元素。設(shè)置定義部分應(yīng)該包含一完整的xml模式,其包括名稱空間聲明和名稱空間導(dǎo)入。除xsd模式名稱空間之外,我們將檢查xsd模式中導(dǎo)入與SDM文件中導(dǎo)入的匹配。這意味著所有引用的類型應(yīng)定義在另一SDM文件中;此模式不能引用定義在任意xsd文件中的類型。模式的目標(biāo)名稱空間必須與SDM文檔的名稱相匹配。當(dāng)為保證名稱空間名稱的唯一性而標(biāo)記文檔時(shí),會(huì)將文檔的公鑰加入到名稱空間名稱中。所以編譯器將targetNamespace=“System”改變?yōu)閠argetNamespace=“System/AAAABBBBCCCCDDDD”。當(dāng)一設(shè)置定義模式引用來自另一文檔的名稱空間時(shí),它們將使用用完整的名稱空間名xmlnssystem=″System/AAAABBBBCCCCDDDD″<xscomplexTypename=″SettingDefinitions″><xssequence><xsanynamespace=″http//www.w3.org/2001/XMLSchema″/></xssequence><xsattributename=″Manager″type=″QualifiedName″use=″optional″/><xsattributename=″ClrNamespace″type=″xsstring″use=″optional″/></xscomplexType>設(shè)置可從三個(gè)獨(dú)立的名稱空間解析a)SDM名稱空間——當(dāng)涉及系統(tǒng)、資源、端點(diǎn)、關(guān)系、約束條件或信息流類型中設(shè)置類型時(shí)。b)clr名稱空間——當(dāng)涉及利用clrz中的強(qiáng)類型類的設(shè)置時(shí)并且當(dāng)在其他設(shè)置類型上建立設(shè)置類型時(shí)。c)XSD名稱空間——當(dāng)利用其他設(shè)置類型建立設(shè)置類型時(shí)。為此,在設(shè)置聲明中設(shè)置一些限制a)所有設(shè)置必須在每個(gè)clr、SDM和xsd名稱空間的相同組內(nèi)。也就是說,假如兩個(gè)設(shè)置共同在一個(gè)名稱空間內(nèi),那么它們必須共同在所有三個(gè)名稱空間內(nèi)。b)在一xsd模式定義中的導(dǎo)入名稱空間必須與SDM文件中的導(dǎo)入名稱空間以及相關(guān)幫助集合的導(dǎo)入名稱空間相匹配。c)除xsd名稱空間之外,在一xsd模式中的所有導(dǎo)入名稱空間都必須定義在一個(gè)SDM文件中。來自導(dǎo)入的SDM文檔的XSD類型可以利用Qname訪問<alias><type-name>以下例子采用了上面所登記的例子中定義的類型。文檔導(dǎo)入了所登記的包括設(shè)置定義的文檔。<lmportAlias=″Registry″Name=″System.OperatingSystem.Registry″Version=″0.1.0.0″PublicKeyToken=″AAAABBBBCCCCDDDD″/>此設(shè)置定義模式也可引用Syetem.Operatinsyetem.registry(系統(tǒng).操作系統(tǒng).登記)名稱空間。<SettingDefinitions><xsschematargetNamespace=″http//DocumentExamples″xmlns=″http//DociimentExamples″xmlnsreg=″System.OperatingSystem.Registry/AAAABBBBCCCCDDDD″xmlns;xs=″http//www.w3.org/2001/XMLSchema″><xssimpleTypename=″UsesReg″><xsrestrictionbase=″regRegistryValueType″><xsenumerationvalue=″guid″/></xsrestriction></xssimpleType></xsschema></SettingDefinitions>3.2.2內(nèi)部簡單數(shù)據(jù)類型SDM支持有限組的作為XSD和C#名稱空間交集的內(nèi)部數(shù)據(jù)類型。SDM運(yùn)行期間自然支持這些類型,并且這些類型定義如下表。除了這些類型,用戶可以自由構(gòu)建并使用他們自己的在xsd和els類型之間映射。這些類型可變?yōu)镃#和xsd類型空間中的這些類型的兼容派生類型。例如,string(字符串)的值可變?yōu)槎x了字符串限制的xsd類型,而且任何值可以傳遞給接受類型=“any”的設(shè)置。3.2.2.1XSD嵌入式類型圖15表示一個(gè)示例性的內(nèi)部數(shù)據(jù)類型的分級(jí)結(jié)構(gòu)。在圖15中,所有復(fù)雜類型源自擴(kuò)展或限制。NMTOKENS、IDREFS和ENTITIES類型源自列表。如圖15所示的所有其他類型源自限制。3.2.2.2C#數(shù)據(jù)類型3.2.2.3所支持的變換xsd類型和els類型之間可以變換。指標(biāo)對(duì)比。染料上染百分率測(cè)量及計(jì)算分別在85℃下染色60分鐘后取出織物,且用蒸餾水洗滌三次,并收集殘液和洗液,轉(zhuǎn)移到250ml容量瓶中,冷卻、定容。在相同條件下測(cè)其殘液(A殘)及原染液(A0)吸光度,采用UltraScanXE型測(cè)色配色儀(HunterLabLtd.,美國)測(cè)量、計(jì)算勻染性。按GB251~84≈ISO/A03-1978標(biāo)準(zhǔn),分別對(duì)染色樣品進(jìn)行干濕摩擦牢度測(cè)試,并用彩色沾色樣卡進(jìn)行評(píng)級(jí)摩擦牢度。按GB250-84≈ISO105/A02-1982及GB250-84≈ISO105/A03-1982標(biāo)準(zhǔn),評(píng)定其沾色和褪色牢度。表1表2由表1、2所示數(shù)據(jù)可以看到,經(jīng)氬低溫等離子體處理后,其練減率、織物白度、毛效,可與常規(guī)精練相當(dāng),并且精練織物的抗彎剛度有所提高。此3.2.3設(shè)置成員設(shè)置說明部分利用前面的設(shè)置定義來創(chuàng)建指定的設(shè)置。利用一個(gè)限定名稱來引用xsd模式內(nèi)的設(shè)置定義(假如設(shè)置定義在當(dāng)前文檔中則不需要),此限定名稱包括包含設(shè)置的文檔的別名,和設(shè)置的名稱。當(dāng)參考一設(shè)置定義時(shí)我們沒有采用xsd名稱空間。屬性用于進(jìn)一步提供每個(gè)設(shè)置成員的參考信息。<xscomplexTypename=″SettingMember″><xscomplexContent><xsextensionbase=″Member″><xsattributename=″List″type=″xsboolean″/><xsattributeGroupref=″SettingsAttributes″/></xsextension></xscomplexContent></xscomplexType>3.2.4列表支持為支持多值設(shè)置的操作,就要支持設(shè)置值的簡單列表。一列表是與設(shè)置聲明具有相同定義的值序列。列表可變換為其可替換或附加到的其他列表。當(dāng)利用設(shè)置流可以更靈活地將值附加到一列表中時(shí),就不支持副本檢測(cè),并且不確保任何形式的排序。一列表聲明包括一個(gè)設(shè)置為真的屬性列表<SettingDeclarationName=″roles″Definition=″String″List=″true″/>利用settingValueList提供值。當(dāng)提供此列表時(shí),用戶能指定是替換還是附加先前值。<SettingValuel_istPath=″roles″Fixed=″true″Replace=″true″><Value>6taticContent</Value><Value>aspPages</Value></SettingValueList>SDM支持多列值的簡單操作。當(dāng)來自一信息流成員的路徑指向一設(shè)置說明,那么其結(jié)果就依賴于路徑兩端的定義。3.2.5設(shè)置屬性運(yùn)行期間利用設(shè)置屬性來描述一特殊設(shè)置的操作。<xsattributeGroupname=″SettingsAttributes″><xsattributename=″Access″><xssimpieType><xsrestrictionbase=″xsstring″><xsenumerationvalue=″Readwrite″/><xsenumerationvalue=″Readonly″/><xsenumerationvalue=″Writeonly″/></xsrestriction></xssimpleType></xsattribute><xsattributename=″Secure″type=″xsboolean″/><xsattributename=″DeploymentTime″type=″xsboolean″/><xsattributename=″Dynamic″type-′xsboolean″/><xsattributename=″Required″type=″xsboolean″/><xsattributename=″KeyValue″type=″xsboolean″/><xsattributename=″Nillable″type=″xsboolean″/></xsattributeGroup>3.2.6設(shè)置值按照設(shè)置是被聲明為單個(gè)值還是一列表,可利用一設(shè)置值元素或一設(shè)置值列表元素來提供此設(shè)置的值。3.2.6.1設(shè)置值設(shè)置值語句用于為一特殊設(shè)置聲明明提供值。此值必須匹配與聲明相關(guān)的定義,而此聲明必須能夠投射或被轉(zhuǎn)換成與設(shè)置聲明明相關(guān)的定義。假如此值被聲明為固定,那么根據(jù)此值被固定的點(diǎn),所提供的值將用于所有導(dǎo)出定義或引用成員。一旦此值被固定,則其不能被覆蓋。<xscomplexTypename=″SettingValue″mixed=″true″><xssequence><xsanyprocessContents=″skip″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″Path″type=″Path″use=″required″/><xsattributename=″Fixed″type=″xsboolean″use=″optional″/><xsattributename=″Nil″type=″xsbooiean″/><xsattributename=″Definition″type=″QualifiedName″use=″optional″/></xscomplexType>3.2.6.2設(shè)置值列表一設(shè)置值列表用于提供用于以列表形式說明的設(shè)置的一或多值。當(dāng)說明此值時(shí),用戶能決定合并先前值或覆蓋所有先前值。<xscomplexTypename=″SettingValueList″><xssequence><xselementname=″Value″minOccurs=″0″maxOccurs=″unbounded″><xscomplexTypemixed=″true″><xssequence><xsanyprocessContents=″skip″minOccurs=″0″maxOccurs=″unbounded″/></xssequence></xscomplexType></xselement></xssequence><xsattributename=″Path″type=″SimpleName″use=″required″/><xsattributename-′Fixed″type=″xsboolean″use=″optionai″/><xsattributename=″Replace″type=″xsboolean″use=″optionar/><xsattributename=″Definition″type=″QualifiedName″use=″optional″/></xscomplexType>3.2.7設(shè)置繼承設(shè)置繼承意思是導(dǎo)出定義隱含地包含來自基本定義的所有設(shè)置聲明。設(shè)置繼承的一些重要方面為設(shè)置繼承是可傳遞的。假如C從B導(dǎo)出,且B從A導(dǎo)出,則C繼承了B中聲明的設(shè)置同時(shí)也繼承了A中聲明的設(shè)置。一導(dǎo)出定義可將新設(shè)置說明加入到從它所擴(kuò)展的基本定義中所繼承的設(shè)置說明中,但不能刪除和改變所繼承設(shè)置的定義。3.2.8設(shè)置實(shí)例實(shí)例空間中的設(shè)置實(shí)例保存了設(shè)置成員的實(shí)際值。一設(shè)置實(shí)例的值最初由定義空間中的設(shè)置值語句指定。然后求設(shè)置信息流的值,更新作為流目標(biāo)的設(shè)置實(shí)例的值在一些情況下,需要區(qū)分從設(shè)置值語句導(dǎo)出的設(shè)置值和隨后通過信息流提供的任何值。前者被稱之為“分配”值,后者被稱為“結(jié)果”值。3.2.9值傳輸為了將設(shè)置值從一信息流或者約束條件中傳入或傳出,采用了值傳輸。在評(píng)估與成員相關(guān)的定義之前,先評(píng)估一輸入傳輸,并且在評(píng)估了與成員相關(guān)的定義之后,評(píng)估一輸出傳輸。每個(gè)值傳輸通過Name屬性標(biāo)識(shí)將用作輸入目的地或輸出源的定義的設(shè)置。路徑屬性標(biāo)識(shí)了一個(gè)作為輸入的源或輸出的目的地的設(shè)置聲明。<xscomplexTypename=″ValueTransfer″><xsattributename=″Name″type=″SimpleName″/><xsattributename=″Path″type=″Path″/></xscomplexType>3.2.9.1輸入輸入語句標(biāo)識(shí)了在執(zhí)行信息流或約束條件之前將被傳輸?shù)妮斎胫?。此輸入能利用ValueSource元素選擇是將“分配”設(shè)置值還是將“結(jié)果”設(shè)置值作為輸入(參看分配/結(jié)果定義的XX部分)。<xscomplexTypename=″lnput″><xscomplexContent><xsextensionbase=″ValueTransfer″></xsextension></xscomplexContent></xscomplexType>3.2.9.2輸出輸出隨值傳輸而變化,其支持固定和替換目標(biāo)值的語義。<xscomplexTypename=″Output″><xscomplexContent><xsextensionbase=″ValueTransfer″><xsattributename=″Fix″type=″xsboolean″use=″optional″/><xsattributename=″Replace″type=″xsboolean″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.2.10投射我們支持向上和向下投射設(shè)置定義繼承樹。當(dāng)從目的定義導(dǎo)出一源定義時(shí),從源到目的的投射被稱為上投射。當(dāng)從源定義導(dǎo)出目的定義時(shí),從源到目的的投射被稱為下投射。由于樹根為Any定義,所有定義均可上投射到Any。圖16表示上投射和下投射的例子。在圖16中,User定義擴(kuò)展基本定義Any。接下來ExtendedUser定義擴(kuò)展基本定義User。通過構(gòu)建此定義層級(jí),我們指示可在任何需要User定義的地方提供ExtendedUser定義,且可在任何需要Any定義的地方都提供ExtendedUser和User定義。以下設(shè)置聲明語句采用了如圖16的定義,并且將用在以下部分的例子中。<SettingDeclarationName=″First″Definition=″ExtendedUser″/><SettingDeclarationName=″Second″Definition=″Any″/><SettingDeclarationName=″Third″Definition=″User″/>3.2.10.1上投射在圖16中,當(dāng)ExtendedUser定義的實(shí)例被分配到一個(gè)需要User或Any定義的設(shè)置聲明時(shí),將發(fā)生上投射。一個(gè)上投射的例子就是從設(shè)置說明First到設(shè)置說明Second的值傳輸。這將作為信息流輸入聲明的一部分發(fā)生。自動(dòng)支持上投射。無需任何與開發(fā)者部分的特殊相互作用,任何值都可投射到其基本定義之一。當(dāng)上投射一設(shè)置實(shí)例時(shí),此實(shí)例的實(shí)際定義將保持其設(shè)置值。3.2.10.2下投射在圖16中,當(dāng)用戶將一設(shè)置值從一被標(biāo)記為Any設(shè)置聲明轉(zhuǎn)移到一被標(biāo)記為User的設(shè)置聲明時(shí)將發(fā)生下投射。在此情況下,假如與實(shí)例相關(guān)的定義是User或ExtendedUser則只發(fā)生生指定。這意味著此設(shè)置實(shí)例可具有與當(dāng)前相關(guān)的設(shè)置聲明不同的定義。通過將一參考傳遞給四周都是該實(shí)例本身的實(shí)例的實(shí)際定義,可以在實(shí)例空間中追蹤到下投射。當(dāng)將一設(shè)置實(shí)例從Second傳遞到Third,假設(shè)此實(shí)例最初來自First,則發(fā)生一個(gè)下投射的例子。在此情況下,此設(shè)置實(shí)例是一個(gè)ExtendedUser定義的實(shí)例。當(dāng)將一設(shè)置實(shí)例從一信息流定義中傳遞出時(shí)則發(fā)生此實(shí)例。假如此實(shí)例的運(yùn)行期間定義不等于或不是從目標(biāo)定義導(dǎo)出的,則下投射要由開發(fā)者明確地請(qǐng)求而且將會(huì)失敗。為請(qǐng)求一下投射,開發(fā)者將相關(guān)傳遞操作(輸入或輸出)的設(shè)置Cast屬性設(shè)為真。假如請(qǐng)求一投射,假如目的定義不是來源于源定義那么用戶將接收到一編譯錯(cuò)誤,而且假如設(shè)置實(shí)例的定義與目的定義不同或者不是來源于目的定義那么用戶將接受到一運(yùn)行錯(cuò)誤。3.2.11轉(zhuǎn)換當(dāng)用戶希望將一設(shè)置實(shí)例轉(zhuǎn)移到一設(shè)置聲明中,其中此設(shè)置聲明具有與此實(shí)例不同的定義而且此設(shè)置說明的定義不是此實(shí)例定義的一基本定義,則需要類型轉(zhuǎn)換。圖17表示一個(gè)類型轉(zhuǎn)換的例子。如圖17所示,在位于繼承樹的不同分支中的定義之間,并且當(dāng)在繼承樹一分支中目的定義處于源定義之下時(shí),就發(fā)生類型轉(zhuǎn)換。由設(shè)置管理器處理類型轉(zhuǎn)換。源和目的管理器均可支持轉(zhuǎn)換。這意味著一旦給定如圖17的定義和從一User定義到一String定義的指定,用于User的管理器提供到String的轉(zhuǎn)換或用于String的管理器能提供從User的轉(zhuǎn)換。運(yùn)行期間將首先請(qǐng)求源管理器轉(zhuǎn)換此實(shí)例,然后是目的管理器,假如不存在有效轉(zhuǎn)換則最后返回一錯(cuò)誤。為了請(qǐng)求一類型轉(zhuǎn)換,開發(fā)者將設(shè)置轉(zhuǎn)移(輸入或輸出)的屬性Convert標(biāo)記為真。假如不指定Convert,并且源定義與目標(biāo)定義不同或者源定義不是從目標(biāo)定義導(dǎo)出的,則編譯器將返回一錯(cuò)誤。假如指定了轉(zhuǎn)換,編譯器將通過詢問兩個(gè)管理器是否都支持此轉(zhuǎn)換,來檢查兩種類型之間的轉(zhuǎn)換是否可以進(jìn)行。假如此實(shí)例具有一個(gè)源自與設(shè)置聲明相關(guān)的定義的定義,首先將在返回到上投射之前嘗試著將導(dǎo)出定義轉(zhuǎn)換為目的定義,然后轉(zhuǎn)換此值。注意,假如進(jìn)行上投射,可能失去作為轉(zhuǎn)換處理的一部分的信息。例如,假如我們指定在User和String之間的轉(zhuǎn)換,并且實(shí)際實(shí)例是一ExtendedUser,那么在返回到將User轉(zhuǎn)換到String之前,我們將首先嘗試將ExtendedUser轉(zhuǎn)換為String。3.2.12CLR至SDM類型映射在SDM模型中,所有設(shè)置定義均具有相應(yīng)的CLR類型。這些類型由與SDM模型中SettingDefinitons元素相關(guān)的管理器定義。當(dāng)一信息流、約束條件或配置管理器代表一SDM定義時(shí),通過CLR類型的實(shí)例而不是SDM設(shè)置定義的實(shí)例來實(shí)現(xiàn)。這為開發(fā)者提供了一個(gè)更自然的編程模型,但是也意味著,為了將信息從SDM運(yùn)行期間傳遞到管理器,SDM運(yùn)行期間應(yīng)該能夠從SDM定義映射到CLR類型,并且為了從管理器接受返回信息,SDM運(yùn)行期間應(yīng)該能夠從CLR類型映射到SDM定義。例如,在一個(gè)SDM模型中,開發(fā)者可定義以下設(shè)置定義<xssimpleTypename=″AppPoolIdentityType″><xsrestrictionbase=″xsstring″><xsenumerationvalue=″LocalSystem″/><xsenumerationvalue=″LocalService″/><xsenumerationvalue=″NetworkService″/><xsenumerationvalue=″UserDefined″/></xsrestriction></xssimpleType>然后開發(fā)者可寫一管理器,該管理器處理與獲得一個(gè)以下CLR類型的實(shí)例的設(shè)置定義相關(guān)的值publicenumAppPoolIdentityType{LocalSystem,LocalService,NetworkService,UserDefined,}此問題分為兩部分第一能夠從定義映射到類型并返回,第二能夠從SDM實(shí)例映射到CLR實(shí)例并返回。3.2.12.1定義到類型的映射為了從設(shè)置定義映射到一clr類型,我們采用管理器聲明、設(shè)置定義名稱空間和設(shè)置定義名稱。從SettingDefinition元素的Manager屬性所標(biāo)識(shí)的管理器聲明中,我們能獲得包含此類型的集合的一強(qiáng)大的名稱和位置,從SettingDefinition元素的ClrNamespace屬性,我們能獲得包含此類型的名稱空間的名稱。最后,我們能將設(shè)置定義的名稱加入到名稱空間名稱中,從而從集合中檢索此clr類型。相反的處理利用相同信息從一clr類型映射到一SDM定義。首先,我們從運(yùn)行期間提供的類型信息中獲得集合名稱。然后我們發(fā)現(xiàn)引用此集合的管理器聲明,該集合給出一或多個(gè)模型文件。然后從模型文件中的設(shè)置定義部分,我們能發(fā)現(xiàn)名稱空間名稱和類型名稱的匹配對(duì)。3.2.12.2轉(zhuǎn)換實(shí)例值為了將設(shè)置實(shí)例從其XML格式的SDM表述轉(zhuǎn)換成Clr對(duì)象實(shí)例并返回,我們?cè)倮门cSettingDefinition元素相關(guān)的管理器。在此情況下,實(shí)現(xiàn)此變換的Clr類是由ClrClassName屬性和由Manager屬性標(biāo)識(shí)的管理器聲明的集合信息的組合來標(biāo)識(shí)。Clr類實(shí)現(xiàn)了在管理器接口規(guī)格說明(ref)中描述的ISettingSerialization接口。此接口既支持從SDMXml表述到Clr實(shí)例的轉(zhuǎn)換,也支持從一Clr對(duì)象實(shí)例到SDMXml表述的轉(zhuǎn)換。在Model文件中創(chuàng)建設(shè)置定義的開發(fā)者負(fù)責(zé)寫執(zhí)行該轉(zhuǎn)換的代碼。Clr類應(yīng)支持SettingDefinition元素中的所有設(shè)置定義的轉(zhuǎn)換。3.3屬性SDM中的許多對(duì)象能獲得與此對(duì)象的核心行為無關(guān)的行為。我們采用一個(gè)如下定義的通用屬性模型3.4定義定義用于創(chuàng)建資源和系統(tǒng)的可重用配置。它們與面向?qū)ο笳Z言中的類相似。3.4.1定義定義是導(dǎo)出對(duì)象、關(guān)系、約束條件和信息流定義的基礎(chǔ)。所有定義可包括以描述、設(shè)置成員、設(shè)置值和設(shè)計(jì)表面數(shù)據(jù)。每個(gè)定義由一簡名標(biāo)識(shí)并且引用一管理器。此管理器通過該定義標(biāo)識(shí)的類為此特殊定義的SDM運(yùn)行期間提供支持。定義的名稱對(duì)于包含此定義的范圍內(nèi)的所有定義來說應(yīng)為獨(dú)一無二的。此范圍可為一SDM文檔或另一定義。<xscomplexTypename=″Definition″><xssequence><xselementname=″Desaiption″type=″Description″minOccurs=″0″/><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″SettingDeclaration″type=″SettingMember7><xselementname=″SettingValue″type=″SettingValue″/><xselementname=″SettingValueList″type=″SettingValueList″/></xschoice></xssequence><xsattributename=″Name″type=″SimpleName″use=″required″/><xsattributename=″Manager″type=″QualifiedName″use=″optional″/><xsattributename=″ClrClassName″type=″xsstring″use=″optional″/></xscomplexType>3.4.2對(duì)象定義一抽象的對(duì)象定義公開了一組設(shè)置聲明,可包含其所參與的關(guān)系的約束條件并在運(yùn)行期間具有一相關(guān)管理器。以下是一個(gè)網(wǎng)絡(luò)服務(wù)器的抽象系統(tǒng)定義。此網(wǎng)絡(luò)服務(wù)器具有兩個(gè)設(shè)置和一個(gè)要求其包含至少在vsite類型上的關(guān)系約束條件。<SystemDefinitionAbstract=″true″Name=″WebServer″ClrClassName=″micorosft.sdm.llSSupportClass″Manager=″IISSupportCode″><SettingDeclarationName=″serverName″Definition=″String7><SettingDeclarationName=″category″Definition=″String″/><SettingDeclarationName=″roles″Definition=″String″List=″true7><RelationshipConstraintName=″containsVsites″RelationshipDefinition=″containmentRelationship″TargetRole-′Member″TargetObjectDefinition=″vsite″MinOccurs=″1″WlaxOccurs=″unbounded″/></SystemDefmition>Vsite是一個(gè)包含服務(wù)器捆綁信息的抽象端點(diǎn)定義<EndpointDefinitionAbstract=″true″Name=″vsite″><SettingDeclarationName=″ipAddress″Definition=″ipaddress″required=″true7<SettingDeclarationName=″port″Definition=″lnt7><SettingDeclarationName=″domainName″Definition=″lnt″/><SettingDeclarationName=″securityModel″Defintion=″securityModelEnum7></EndpointDefinition>一個(gè)前端網(wǎng)絡(luò)服務(wù)器的具體系統(tǒng)定義標(biāo)識(shí)了網(wǎng)絡(luò)服務(wù)器的范疇為靜態(tài)內(nèi)容,包含代表1和100之間的端點(diǎn)實(shí)例的單個(gè)傳引用的端點(diǎn)成員。此端點(diǎn)的具體端點(diǎn)定義嵌套在系統(tǒng)定義中,并且其將vsite的ip端點(diǎn)定義為端點(diǎn)80。<SystemDefinittonName=″FrontendWebServer″Extends=″WebServer″><SettingValuePath=″serverName″Fixed=″true″>myFEServer</SettingValue><SettingValueListPath=″roles″Fixed=″true″Replace=″true″><Value>staticContent<A/alue><Value>aspPages<A/alue></SettingValueList><EndpointDefinitionName=″port80Vsite″Extends=″vsite″><SettingValuePath=″port″Fixed=″true″>80</SettingValue></EndpointDefinition><EndpointName=″contentOnlyVsite″Definition=″port80Vsite″Reference=″true″MinOccurs=″TMaxOccurs=″100″/></SystemDefinition>3.4.2.1對(duì)象定義抽象和具體對(duì)象擴(kuò)展了以下基本對(duì)象定義。除了基本類型定義的元素之外,它們共同具有約束對(duì)象所參與的關(guān)系的能力。<xscomplexTypename=″ObjectDefinition″><xscomplexContent><xsextensionbase=″Definition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″Flow″type=″FlowMember″minOccurs=″0″maxOccurs=″unbounded″/><xselementname=″RelationshipConstraintGroup″type=″RelationshipConstraintGroup″/><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″/><xselementname=″Constraint″type=″ConstraintMember″/></xschoice><xsattributename=″Visibility″type=′VisibilityEnum″use=″optional″/><xsattributename=″Layer″type=″xsstring″use=″optional″/><xsattributename=″Extends″type=″QualifiedName″use=″optional″/><xsattributename=″Abstract″type=″xsboolean″use=″optional″/></xsextension></xscomplexContent></xscomplexType>抽象對(duì)象定義用于定義設(shè)計(jì)表面公開的結(jié)構(gòu)塊,并且從其中能導(dǎo)出所有具體對(duì)象一具體對(duì)象定義實(shí)現(xiàn)了一抽象對(duì)象定義。抽象對(duì)象定義通過加入簡單繼承來擴(kuò)展SDM對(duì)象“extends”屬性用于標(biāo)識(shí)一抽象對(duì)象定義的基本對(duì)象定義。此抽象對(duì)象定義然后從基本對(duì)象定義中繼承設(shè)置和關(guān)系約束條件。通過繼承,對(duì)象定義可通過加入新設(shè)置和約束條件來擴(kuò)展抽象對(duì)象定義的設(shè)置和約束條件。抽象對(duì)象定義也能加入它們希望參與的關(guān)系上的約束條件。例如,一抽象對(duì)象定義可要求存在某些關(guān)系,可約束處于關(guān)系另一端的對(duì)象定義或可約束參與一給定關(guān)系的實(shí)例的設(shè)置。對(duì)象定義也可包含嵌套定義的聲明。這些定義可用于在包含定義范圍內(nèi)的成員并且可以被引用到該定義范圍之外的約束條件中。具體對(duì)象定義提供了一抽象對(duì)象定義的實(shí)現(xiàn)。該實(shí)現(xiàn)根據(jù)對(duì)象和關(guān)系成員、所實(shí)現(xiàn)的抽象定義的設(shè)置值、新設(shè)置聲明、成員間的信息流和成員的約束條件構(gòu)成了該實(shí)現(xiàn)。3.4.2.2隱含基本定義所有未擴(kuò)展另一對(duì)象定義的對(duì)象定義隱含地?cái)U(kuò)展了端點(diǎn)、系統(tǒng)或源基本定義之一。這些基本定義形成了用在關(guān)系和約束條件聲明的每個(gè)樹的根。這允許關(guān)系或約束條件指示任何從根導(dǎo)出的類型可用在所標(biāo)識(shí)的根定義。這些根類型總是抽象的并且不能直接例示。這些類型的定義包括控制模型內(nèi)的例示的基本約束條件。3.4.2.3端點(diǎn)定義端點(diǎn)定義通過增加聲明嵌套資源類型、資源成員以及宿主、包含和引用關(guān)系成員的能力來擴(kuò)展基本對(duì)象定義。<xscomplexTypename=″EndpointDefinition″><xscomplexContent><xsextensionbase=″ObjectDefinition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″ResourceDefinition″type=″ResourceDefinition″/><xselementname=″Resource″type=″ResourceMember″/><xselementname=″Hosting″type=″HostingMember″/><xselementname=″Containment″type=″ContainmentMember″/><xselementname=″Reference″type=″ReferenceMember″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.4.2.4系統(tǒng)定義一系統(tǒng)類型通過增加對(duì)以下內(nèi)容的支持?jǐn)U展了基本類型嵌套端點(diǎn)、系統(tǒng)和資源類型;端點(diǎn)、系統(tǒng)和資源成員以及宿主、包含、連接、授權(quán)和參考關(guān)系。<xscomplexTypename=″SystemDefinition″><xscomplexContent><xsextensionbase=″ObjectDefinition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″EndpointDefinition″type=″EndpointDefinition″/><xselementname=″SystemDefinition″type=″SystemDefinition7><xselementname=″ResourceDefinition″type=″ResourceDefinition″/><xselementname=″Endpoint″type=″EndpointMember7><xselementname=″Subsystem″type=″SystemMember7><xselementname=″Resource″type=″ResourceMember″/><xselementname=″Hosting″type=″HostingMember″/><xselementname=″Containment″type=″ContainmentMember″/><xselementname=″Connection″type=″CommunicationMember″/><xselementname=″Delegation″type=″DelegationMember″/><xselementname=″Reference″type=″ReferenceMember″/></xschoice><xsattributename=″SimulationRoot″type=″xsbooiean″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.4.2.5資源定義一資源類型可包含嵌套資源類型定義、資源成員以及宿主、包含和引用關(guān)系成員。<xscomplexTypename=″ResourceDefinition″><xscomplexContent><xsextensionbase=″ObjectDefinition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″ResourceDefinition″type=″ResourceDefinition7><xselementname=″Resource″type=″ResourceMember″/><xselementname=″Hosting″type=″HostingMember″/><xselementname=″Containment″type=″ContainmentMember″/><xselementname=″Reference″type=″ReferenceMember7></xschoice></xsextension></xscomplexContent></xscomplexType>3.4.2.6關(guān)系規(guī)則對(duì)于一對(duì)象定義的一特殊實(shí)例,下表標(biāo)識(shí)了與實(shí)例所能扮演的角色相關(guān)的基數(shù)。3.4.2.6.1系統(tǒng)規(guī)則3.4.2.6.2端點(diǎn)規(guī)則3.4.2.6.3資源規(guī)則3.4.2.6.3資源規(guī)則3.4.2.6.4注意每個(gè)實(shí)例應(yīng)該正確參與一個(gè)包含關(guān)系和至少一個(gè)宿主關(guān)系。這意味著a)非引用(傳值)成員應(yīng)標(biāo)識(shí)一個(gè)在相同定義中的包含關(guān)系b)為了被構(gòu)建一引用成員應(yīng)標(biāo)識(shí)一包含關(guān)系。3.4.3關(guān)系定義關(guān)系用于標(biāo)識(shí)類型之間的可能的交互作用。它們是二元的并且是直接的,每個(gè)標(biāo)識(shí)都標(biāo)識(shí)了能參與此關(guān)系的實(shí)例類型。關(guān)系也能約束參與此關(guān)系的實(shí)例的設(shè)置,并能通過此關(guān)系傳遞設(shè)置值。以下是一個(gè)用于在類型部分所述的網(wǎng)絡(luò)服務(wù)器的webApplication的可能的宿主關(guān)系。此關(guān)系包含一約束條件,此約束條件驗(yàn)證兩個(gè)系統(tǒng)的安全模型是兼容的,并且此關(guān)系還包括了一設(shè)置信息流,而此設(shè)置信息流將服務(wù)器名稱從vsite復(fù)制到vdir。<HostingDefinitionName=″vsiteHostsVdir″GuestDefinition=″vdir″HostDeffinition=″vsite″><ObjectConstraintName=″checkCompatibility″PrimaryRole=″Guest″PrimaryObjectDefinition=″vdir″><ConstraintName=″constrainSecurityModel″Definition=″SimpleOperatorComparison″><SettingValuePath=″operator″>=</SettingValue><lnputName=″LHS″Path=″host.securityModel7><lnputName=″RHS″path=″guest.securityModeP/></Constraint></ObjectConstraint><FlowDefinition=″copy″Name=″copyServerToVdir″><lnputName=″source″Path=″host.server″/><OutputName=″desination″Path=″guest.server″/></Flow></HostingDefinition>通過聲明一個(gè)標(biāo)識(shí)了將參與此關(guān)系的類型成員的關(guān)系成員來使用關(guān)系。<SystemDefinitionName=″TestSystemt″Extends=″DistributedApplication″><ResourceName=″myVdir″Definition=″vdir″Reference=″false″/><ResourceName=″myVsite″Definition=″vsite″Reference=″false″/><HostingName=″HostMyVsite″Definition=″vsiteHostsVdir″GuestMember=″myVdir″HostMember=″myVsite″/></SystemDefinition>3.4.3.1關(guān)系定義基本關(guān)系定義將對(duì)象約束條件和信息流加入到定義中。對(duì)象約束條件是關(guān)于參與此關(guān)系實(shí)例的對(duì)象實(shí)例的設(shè)置值的語句。例如,一個(gè)表示DCOM連接的通信關(guān)系可檢查客戶機(jī)和服務(wù)器是兼容的安全設(shè)置。在此情況下,在易于獲得的作為部分設(shè)計(jì)處理的設(shè)置間存在嚴(yán)格的關(guān)系;在此關(guān)系上存在四階設(shè)置組合,但只有少得多的有效組合。信息流賦予關(guān)系開發(fā)者將值從一個(gè)實(shí)例傳遞給另一實(shí)例的能力。為充分描述一特殊實(shí)例,信息流允許對(duì)象定義與其可能的交互關(guān)系獨(dú)立開發(fā)且允許此實(shí)例獨(dú)立作為一信息引用點(diǎn)而無需一關(guān)系圖子集。具體關(guān)系是兩個(gè)具體對(duì)象定義之間的關(guān)系。每個(gè)具體關(guān)系可實(shí)現(xiàn)一抽象關(guān)系。此抽象關(guān)系應(yīng)在由具體對(duì)象定義直接或間接(通過繼承)實(shí)現(xiàn)的的抽象對(duì)象定義的一匹配對(duì)之間。關(guān)系的名稱應(yīng)在包含此關(guān)系的名稱空間內(nèi)是獨(dú)一無二的。<xscomplexTypename=″RelationshipDefinition″><xscomplexContent><xsextensionbase=″Definition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″ObjectConstraintGroup″type=″ObjectConstraintGroup″/><xselementname=″ObjectConstraint″type=″ObjectConstraint″/><xselementname=″Flow″type=″FlowMember″/></xschoice><xsattributename=″Extends″type=″QualifiedName″use=″optionai″/><xsattributename=″Abstract″type=″xsboolean″use=″optional″/></xsextension></xscx)mplexContent></xscomplexType>3.4.3.2通信關(guān)系通信關(guān)系用于獲得端點(diǎn)定義之間可能的通信鏈接。它們用于描述獨(dú)立配置的軟件元素之間的相互作用。通信關(guān)系模式通過增加客戶機(jī)和服務(wù)器端點(diǎn)引用從而擴(kuò)展了基本關(guān)系模式。<xscomplexTypename=″CommunicationDefinition″><xscomplexContent><xsextensionbase=″RelationshipDefinition″><xssequence><xselementname=″Connection″type=″HostingMember″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″ClientDefinition″type=″QualifiedName″use=″required″/><xsattributename=″ServerDefinition″type=″QuaiifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象類型對(duì)的組合對(duì)于通信關(guān)系是有效的3.4.3.3宿主關(guān)系宿主關(guān)系用于獲得一客戶為了被構(gòu)件需要一宿主的事實(shí)。由于一個(gè)客戶可存在超過一個(gè)可能的宿主,這意味著宿主關(guān)系也負(fù)責(zé)在一宿主上的客機(jī)的構(gòu)造。所以為了創(chuàng)建一對(duì)象的一實(shí)例,宿主關(guān)系是從一客戶到一可兼容宿主。例如,在一Webservice對(duì)象定義和一IIS對(duì)象定義之間可存在一宿主關(guān)系。在此情況下,假定MyWebservice和MyIIS分別實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)和IIS,此關(guān)系表示有可能利用宿主關(guān)系的管理器,在系統(tǒng)MyIIS實(shí)例上創(chuàng)建系統(tǒng)MyWebservice實(shí)例。直到評(píng)估了系統(tǒng)和關(guān)系的約束條件后,我們才知道將是否有可能創(chuàng)建此關(guān)系。當(dāng)我將一應(yīng)用程序配置到一數(shù)據(jù)中心時(shí),需要解析在此應(yīng)用程序中系統(tǒng)的所有典型宿主關(guān)系。為此,操作者需要為每個(gè)所需的宿主關(guān)系創(chuàng)建宿主成員。為簡化操作者的任務(wù)并允許開發(fā)者引導(dǎo)配置過程,開發(fā)者可創(chuàng)建一具體宿主關(guān)系。此具體宿主關(guān)系用于將一組宿主關(guān)系成員按以下方式分組當(dāng)配置此應(yīng)用程序時(shí)操作者只需聲明一單個(gè)宿主成員。一客戶可被歸為一宿主iff對(duì)于客戶中的每個(gè)客戶成員在宿主中存在一個(gè)或多個(gè)宿主成員,其中g(shù)uestMeraber.Type與withhostMember.type具有宿主關(guān)系并且guestMember.hostConstraints相對(duì)于hostMember.settings進(jìn)行驗(yàn)證并且hostMember.settings相對(duì)于guestMember.settings進(jìn)行驗(yàn)證并且對(duì)于guestMember的每個(gè)成員,都存在一到hostMember的成員的歸并(AguestcanbeboundtoahostiffForeachguestMemberinGuestThereexistsoneormorehostMemberinHostwhere)guestMeraber.TypehasahostingrelationwithhostMember.type)andguestMember.hostConstraintsvalidateagainsthostMember.settings)andhostMember.guestConstraintsvalidateagainstguestMember.settingsandforeachmemberofguestMemberthereexistsabindingtoamemberofhostMember)例如,以下具體關(guān)系將一層三個(gè)系統(tǒng)(Bike)歸并到一層兩個(gè)主機(jī)(操作系統(tǒng))。在此情況下,我們定義一個(gè)用于宿主關(guān)系的設(shè)置,其默認(rèn)值被設(shè)為“系統(tǒng)文件夾”。我們將此設(shè)置傳給定義層3應(yīng)用系統(tǒng)和層2主機(jī)系統(tǒng)之間的宿主關(guān)系的三個(gè)主機(jī)成員之一。<HostingDefinitionName=″DefaultBikePlacement″GuestDefinition=″Bike″HostDefinition=″OperatingSystemOperatingSystem″><SettingDeclarationName=″fileLocationRelativeToRoot″Definition=″xssting″Access=″Readwrite″/><Sett!ngValuePath=″dirPath″>systemFolder</SettingValue><FlowName=″copyPath″Definition=″copy″><lnputName=″source″Path=″dirPath″/><OutputName=″destination″Path=″bikeExecutableHost.hostRelativePath″/></Row><HostingName=″bikeExecutableHosfDefinition=″fileDirectoryHost″GuestMember=″guest.bikeFile″HostMember=″host.FileSystem″/><HostingName=″bikeEventKeyHost″Definition=″registryKeyRegistryKeyHost″GuestMember=″guest.bikeEventKey″HostMember=″host.Registry.ApplicationEventKey″/><HostingName=″bikeSoftwareKeyHost″Definition=″registryKeyRegistryKeyHost″GuestMember=″guest.bikeSoftwareKey″HostMember=″host.Registry.HKLM″/></HostingDefinition><xscomplexTypename=″HostingDefinition″><xscomplexContent><xsextensionbase=″RelationshipDefinition″><xssequence><xselementname=″Hosting″type=″HostingMember″minOccurs=″0″maxOccurs=″unbounded7></xssequence><xsattributename=″GuestDefinition″type=″QualifiedName″use=″required″/><xsattributename=″HostDefinition″type=″QualifiedName″use=″required″/><xsattributename=″SimulationRoot″type=″xsboolean″use=″optional″/></xsextension></xscomplexContent></xscomplexType>以下抽象定義對(duì)的組合對(duì)于宿主關(guān)系是有效的3.4.3.4包含關(guān)系在兩個(gè)抽象對(duì)象之間的包含關(guān)系用于獲得基于parentType的具體類型可包含基于memberType的成員的事實(shí)。包含意味著父實(shí)例可控制成員實(shí)例的生命期,并且可授權(quán)成員實(shí)例的行為。<xscomplexTypename=″ContainmentDefinition″><xscomplexContent><xsextenstonbase=″RelationshipDefinition″><xssequence><xselementname=″Containment″type=″HostingMember″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″ParentDefinition″type=″QualifiedName″use=″required″/><xsattributename=″MemberDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象定義對(duì)的組合對(duì)于包含關(guān)系是有效的3.4.3.5授權(quán)關(guān)系授權(quán)用于將行為從一個(gè)外部系統(tǒng)傳遞給一個(gè)被包含的系統(tǒng)。這通過將外部系統(tǒng)的端點(diǎn)授權(quán)給內(nèi)部系統(tǒng)的端點(diǎn)來實(shí)現(xiàn)。這就有效地將所有直接對(duì)外部系統(tǒng)的交互作用傳送給了內(nèi)部系統(tǒng)端點(diǎn)。授權(quán)可以是一連串的,允許內(nèi)部系統(tǒng)將該行為進(jìn)一步授權(quán)給另一系統(tǒng)。一授權(quán)關(guān)系限定了多對(duì)能參與授權(quán)的抽象端點(diǎn)定義。每個(gè)關(guān)系標(biāo)識(shí)了作為一代理的抽象端點(diǎn)定義和能授權(quán)此行為的一抽象端點(diǎn)定義。<xscomplexTypename=″DelegationDefinition″><xscomplexContent><xsextensionbase=″RelationshipDefinition″><xssequence><xselementname=″Delegation″type=″HostingMember″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″ProxyDefinition″type=″QualifiedName″use=″required″/><xsattributename=″DelegateDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象類型對(duì)的組合對(duì)于授權(quán)關(guān)系是有效的為支持層間的結(jié)合,我們?cè)试S資源和系統(tǒng)的授權(quán)。例如,允許IIS無需配置文件系統(tǒng)便可公開部分文件系統(tǒng)。3.4.3.6參考關(guān)系我們利用參考關(guān)系給出實(shí)例之間除宿主關(guān)系從屬性之外的強(qiáng)大從屬性。這些從屬性用于控制配置期間的構(gòu)建順序以及安裝和更新期間系統(tǒng)之間的信息流參數(shù)。由于引用關(guān)系表示一強(qiáng)大的從屬性,就不能允許引用關(guān)系跨越一系統(tǒng)邊界。這意味著系統(tǒng)內(nèi)資源以來另一系統(tǒng)資源。這使得此系統(tǒng)不再是一個(gè)獨(dú)立的配置單元。在系統(tǒng)之間存在從屬性的地方,我們使用通信關(guān)系。通信關(guān)系無需重安裝系統(tǒng)便可隨著時(shí)間推移而改變。<xscomplexTypename=″ReferenceDefinition″><xscomplexContent><xsextensionbase=″RelationshipDefinition″><xssequence><xselementname=″Reference″type=″HostingMember″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″DependentDefinition″type=″QualifiedName″use=″required″/><xsattributename=″SourceDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象類型對(duì)的組合對(duì)于參考關(guān)系是有效的3.4.3.7隱含基本關(guān)系所有抽象關(guān)系隱含地?cái)U(kuò)展一個(gè)基本關(guān)系定義。這些定義形成了每個(gè)關(guān)系樹的根。圖18描述了一個(gè)示例性的關(guān)系樹。為此,我們可從約束條件定義內(nèi)參考根定義且能從根類型繼承通用類型約束條件3.5成員3.5.1成員成員用于標(biāo)識(shí)一個(gè)在運(yùn)行期間存在的特殊定義的實(shí)例。所有成員均通過一名稱標(biāo)識(shí),此名稱在包含此成員的定義范圍內(nèi)的成員組中是獨(dú)一無二的。一成員可為其所引用的定義提供設(shè)置。一成員也可包含設(shè)計(jì)表面特定數(shù)據(jù)。<xscomplexTypename=″Member″><xssequence><xselementname=″Description″type=″Description″minOccurs=″0″/><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=°SettingValue″type=″SettingValue″/><xselementname=″SettingValueList″type=″SettingValueList″/></xschoice></xssequence><xsattributename=″Name″type=″SimpleName″use=″required″/><xsattributename=″Definition″type=″QualifiedName″use=″required″/><xsattributename=″Visibility″type=″VisibilityEnum″use=″optional″/></xscomplexType>3.5.2對(duì)象成員對(duì)象成員可參考一抽象或具體的對(duì)象定義。它們能表示一實(shí)例陣列,在這種情況下,它們能定義此陣列的上限和下限。假如它們是引用成員,那么用戶例示此對(duì)象就隱含構(gòu)建了一個(gè)此成員的實(shí)例。假如它們不是引用成員,那么此運(yùn)行期間將在創(chuàng)建外部對(duì)象的同時(shí)創(chuàng)建一實(shí)例。<xscomplexTypename=″ObjectMember″><xscomplexContent><xsextensionbase=″Member″><xsattributename=″MinOccurs″type=″MinOccurs″use=″optional″/><xsattributename=″MaxOccurs″type=″MaxOccurs″use=″optional″/><xsattributename=″Reference″type=″xsboolean″use=″required″/></xsextension></xscomplexContent></xscomplexType>在一SDM模型中,我們需要將當(dāng)構(gòu)建父體時(shí)創(chuàng)建并且消滅父體時(shí)也被消滅的成員與其生命期獨(dú)立于其父體的成員相區(qū)分。為此我們使用IsReference屬性。一簡單的模擬是C++說明,其基于“new”是否用于創(chuàng)建一實(shí)例,允許基于堆棧和堆結(jié)構(gòu)。假如一成員標(biāo)記為IsReference,那么部分操作者需要一清楚的新的操作,用以創(chuàng)建一個(gè)實(shí)例并將其與成員相關(guān)。有許多原因?qū)е挛覀円?.當(dāng)一操作者構(gòu)建一系統(tǒng)時(shí),我們只需給出構(gòu)建isReference成員的能力。這大大簡化了操作者的操作過程。2.但我們處理一SDM文檔時(shí),我們對(duì)文檔的實(shí)例空間與具體定義空間明確區(qū)分。3.5.3關(guān)系成員關(guān)系成員標(biāo)識(shí)了當(dāng)創(chuàng)建對(duì)象成員時(shí)它們之間存在的關(guān)系。關(guān)系實(shí)例是由操作者明確地創(chuàng)建或由運(yùn)行期間隱含地創(chuàng)建。前者的例子是實(shí)例之間的宿主關(guān)系,后者的例子是系統(tǒng)之間的通信關(guān)系。<xscomplexTypename=″RelationshipMember″><xscomplexContent><xsextensionbase=″Member″/></xscomplexContent></xscomplexType>3.5.4端點(diǎn)成員<xscomplexTypename=″EndpointMember″><xscomplexContent><xsextensionbase=″ObjectMember″/></xscomplexContent></xscomplexType>3.5.5系統(tǒng)成員<xscomplexTypename=″SystemMember″><xscomplexContent><xsextensionbase=″ObjectMember″/></xscomplexContent></xscomplexType>3.5.6資源成員<xscomplexTypename=″ResourceMember″><xscomplexContent><xsextensionbase=″ObjectMember″/></xscomplexContent></xscomplexType>3.5.7宿主成員宿主成員用于聲明兩個(gè)對(duì)象成員之間的宿主關(guān)系。此對(duì)象成員是包含定義的直接成員或是與此定義具有一成員關(guān)系的嵌套成員。在被引用的成員和包含成員之間存在一成員關(guān)系鏈。<xscomplexTypename=″HostingMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″GuestMember″type=″Path″use=″required″/><xsattributename=″HostMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.5.8通信成員通信成員用于聲明在定義的即時(shí)系統(tǒng)的端點(diǎn)成員中的端點(diǎn)成員之間的通信關(guān)系。<xscomplexTypename=″CommunicationMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″ClientMember″type=″Path″use=″required″/><xsattributename=″ServerMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.5.9包含成員包含成員用于聲明一個(gè)類型成員被該類型所包含。每個(gè)類型成員可被包含或授權(quán)。包含成員自動(dòng)將包含關(guān)系的父值設(shè)置成該關(guān)系的指針。<xscomplexTypename=″ContainmentMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″ChildMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.5.10授權(quán)成員一授權(quán)成員用于建立在外部類型的端點(diǎn)定義成員和外部類型的及時(shí)系統(tǒng)成員的端點(diǎn)定義成員之間的授權(quán)關(guān)系。<xscomplexTypename=″DelegationMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″ProxyMember″type=″Path″use=″required″/><xsattributename=″DelegateMember″type-′Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.5.11參考成員參考成員用于在外部定義的兩個(gè)即時(shí)或嵌套成員之間建立一個(gè)參考關(guān)系。<xscomplexTypename=″ReferenceMember″><xscomplexContent><xsextensionbase=″ReiationshipMember″><xsattributename=″DependentMember″type=″Path″use=″required″/><xsattributename=″SourceMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.6信息流設(shè)置信息流用于在一對(duì)象定義的成員之間以及關(guān)系的參與者之間傳遞參數(shù)。作為信息流的一部分,用戶可利用變換來組合或分離設(shè)置值以及計(jì)算新的設(shè)置值。所有設(shè)置信息流成員利用一信息流定義來實(shí)現(xiàn)變換。以下是分析url的信息流定義。<FlowDefinitionName=″urlToComponents″><SettingDeclarationName=″url″Definition=″url″Access=″Writeonly″/><SettingDeclarationName=″protocol″Definition=″String″Access=″Readonly″/><SettingDeclarationName=″server″Definition=″String″Access=″Readonly″/><SettingDeclarationName=″Path″Definition=″String″Access=″Readonly″/><SettingDeclarationName-′file″Definition=″String″Access=″Readonly″/></FlowDefinition>在一對(duì)象或關(guān)系中聲明一信息流成員。信息流成員提供了信息流定義的輸入,然后將信息流的輸出導(dǎo)入目標(biāo)設(shè)置。<FlowName=″deconstructUrl″Definition=″urlToComponents″><lnputName=″url″Path=″webservice.ul″/><OutputName=″server″Path=″webservice.server″Replace=″false″/></Flow>3.6.1信息流定義我們利用信息流定義來定義我們希望對(duì)一組設(shè)置值應(yīng)用的特殊變換。信息流定義給出了定義輸入設(shè)置(只寫設(shè)置)和輸出設(shè)置(制度設(shè)置)的一設(shè)置模式,一用于設(shè)計(jì)表面特定信息的DesignData部分,例如用于定義變換的輸入接口、以及當(dāng)瀏覽SDM文件時(shí)使用的描述。信息流定義是由在其中定義該信息流定義的名稱空間內(nèi)的名稱來標(biāo)識(shí)。,此定義也標(biāo)識(shí)了一個(gè)將支持評(píng)估信息流的運(yùn)行的管理器。我們希望運(yùn)行期間將包括幾個(gè)標(biāo)準(zhǔn)信息流定義從而簡化需要直接變換的信息流元素的構(gòu)建。例子可包括復(fù)制、合并和字符串替換。由于信息流定義可參數(shù)化,我們也希望有一或多個(gè)基于配置參數(shù)來執(zhí)行不同動(dòng)作的變換。<xscomplexTypename=″FlowDefinition″><xscomplexContent><xsextensionbase=″Definition″/></xscomplexContent></xscomplexType>3.6.2信息流成員每個(gè)信息流成員標(biāo)識(shí)一或多個(gè)輸入設(shè)置、一或多個(gè)目的設(shè)置可提供固定設(shè)置值并且能標(biāo)識(shí)一信息流定義。當(dāng)評(píng)估此信息流時(shí),從輸入收集源數(shù)據(jù),合并固定設(shè)置值并將其傳遞給用于變換的信息流定義。依據(jù)信息流成員列出的輸出,將定義的輸出傳遞給目的設(shè)置。只要其中的一個(gè)源值改變便會(huì)觸發(fā)信息流的再評(píng)估。因此,我們需要避免導(dǎo)致值振蕩的循環(huán)信息流。假如此值保持不變,那么將終止循環(huán)。運(yùn)行期間通過跟蹤堆棧的深度來檢測(cè)并終止無極限的回路。從分離的信息流成員到對(duì)象實(shí)例的相同設(shè)置成員的輸出是一錯(cuò)誤。<xscomplexTypename=″FlowMember″><xscomplexContent><xsextensionbase=″Member″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″lnput″type=″SettingTarget″/><xselementname=″Output″type=″OutputPath″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.7約束條件約束條件用于標(biāo)識(shí)對(duì)一定義的成員的設(shè)置值或者一關(guān)系的參與者的限定。在設(shè)計(jì)期間和配置期間的在實(shí)例空間中都要評(píng)估這些限定。所有設(shè)置約束條件采用一約束條件定義來評(píng)估設(shè)置值。約束條件定義采用設(shè)置聲明來標(biāo)識(shí)它所約束的值。以下約束條件定義實(shí)現(xiàn)了將兩個(gè)變量和一操作者簡單比較的功能,然后評(píng)估約束條件,最后返回成功或錯(cuò)誤。<ConstraintDefinitionName=″SimpleOperatorComparison″><SettingDeclarationName=″LHS″Definition=″Any″Access=″Writeonly″/><SettingDeclarationName=″operator″Definition=″operator″Access=″Writeonly″/><SettingDeclarationName=″RHS″Definition=″Any″Access=″Writeonly″/></ConstraintDefinition>一約束條件成員然后將此值提供給用于評(píng)估的約束條件類型。<ConstraintName=″constraintSecurityMode″Definition=″SimpleOperatorComparison″><SettingValuePath=″operator″>=</SettingValue><SettingValuePath=″RHS″>basicAuth</SettingValue><lnputName=″LHS″Path=″webservice.securityMode″/></Constraint>3.7.1約束條件定義一約束條件定義限定了一組輸入值的約束條件。此約束條件可參數(shù)化,從而選擇客戶行為或支持一簡單的利用參數(shù)來定義其行為的約束條件引擎。我們希望為簡單參數(shù)值約束條件和一組復(fù)雜約束條件的寫一組標(biāo)準(zhǔn)約束條件定義從而支持抽象對(duì)象的已知關(guān)系。<xscomplexTypename=″ConstraintDefinition″><xscomplexContent><xsextensionbase=″Definition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″/><xselementname=″RelationshipConstraintGroup″type=″RelationshipConstraintGroup″/><xselementname=″ObjectConstraint″type=″ObjectConstraint″/><xselementname=″ObjectConstraintGroup″type=″ObjectConstraintGroup″/></xschoice><xsattributename=″TargetDefinition″type=″QualifiedName″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.7.2約束條件成員一約束條件成員標(biāo)識(shí)了特殊約束條件定義的一組輸入值。此成員可標(biāo)識(shí)設(shè)置的靜態(tài)值,并且也能利用輸入語句將一約束條件設(shè)置結(jié)合到一路徑中。<xscomplexTypename=″ConstraintMember″><xscomplexContent><xsextensionbase=″Member″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″Input″type=″Input″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.7.3結(jié)構(gòu)的約束條件我們采用對(duì)象和關(guān)系約束條件來定義具體空間的拓?fù)浣Y(jié)構(gòu)并約束用于特定關(guān)系中的對(duì)象設(shè)置。例如,在一抽象對(duì)象定義(A)中,我們想標(biāo)識(shí)此抽象定義的實(shí)現(xiàn)應(yīng)包含另一抽象對(duì)象定義的實(shí)例(B)。假定已存在至少一個(gè)適當(dāng)?shù)陌P(guān)系,為此,我們將采用A中的一關(guān)系約束條件,其如下所示<RelationshipConstraintname=″AContainsB″relationship=″ContainmentDefinition″myRole=″parent″targetType=″B″minOccurs=TmaxOccurs=″1″/>此約束條件標(biāo)識(shí)了應(yīng)當(dāng)存在的一約束條件關(guān)系,其中A為父角色而關(guān)系另一端的類型(成員)是類型B。假如我們需要經(jīng)一步控制B的配置,我們可在類型B上增加如下設(shè)置約束條件<RelationshipConstraintName=″AContainsB″RelationshipDefinition=″containementRelationship″TargetRole=″Member″TargetObjectDefinition=″B″MinOccurs=″1″MaxOccurs=″1″><ConstraintDefinition=″simpleValueConstraint″Name=″BValueConstraint″><SettingValuePath=″operator″>=</SettingValue><SettingValuePath=″RHS″>myPort</SettingValue><lnputPath=″member.Name″Name=″LHS″/></Constraint></RelationshipConstraint>在這種情況下,我們?cè)黾恿艘粋€(gè)要求成員名稱等于字符串“myPort”的約束條件。我們也能給關(guān)系增加約束條件;我們調(diào)用這些對(duì)象約束條件。從一關(guān)系中,我們約束參與此關(guān)系的對(duì)象。對(duì)于關(guān)系中的每個(gè)角色,我們可標(biāo)識(shí)一對(duì)象定義然后將設(shè)置約束條件加入到那些對(duì)象定義上。從關(guān)系角度來看,基數(shù)一直是minOccurs=1且maxOccurs=1,所以其未出現(xiàn)在約束條件聲明中。<ObjectConstraintName=″allowedPair″PrimaryRole=″Host″PrimaryObjectDefinition=″IIS″SecondaryRole=″Guest″SecondaryObjectDefinition=″webApp″/>最后,我們可嵌套約束條件。這使得我們能夠?qū)⒓s束條件鏈接在一起,外部約束條件設(shè)置了內(nèi)部約束條件的上下文。以下是一個(gè)宿主到Webapp系統(tǒng)的IIS系統(tǒng)的例子,其僅僅約束了一特定類型的webApp包含端點(diǎn)。在這種情況下,我們利用一組對(duì)象約束條件來標(biāo)識(shí)一組至少一個(gè)為真的可能性。<SystemDefinitionName=″test″><RelationshipConstraintName=″WebAppHostConstraint″RelationshipDefinition=″HostingDefinition″TargetRole=″Guest″TargetObjectDefinition=″webApp″><RelationshipConstraintName=″WebAppContainsPort1″RelationshipDefinition=″containmentRelationship″TargetRole=″Member″TargetObjectDefinition=″EndpointDefinition″MinOccurs=″1″MaxOccurs=″unbounded″><ObjectConstraintGroup><ObjectConstraintName=″hasWebPort″PrimaryRole=″Member″PrimaryObjectDefinition=″webPort″/><ObjectConstraintName=″hasSqiPort″PrimaryRole=″Member″PrimatyObjectDefinition=″sqlPort″/></ObjectConstraintGroup></RelationshipConstraint></RelationshipConstraint>嵌套約束條件形成了一條我們可從內(nèi)到外評(píng)估的路徑。路徑的每個(gè)約束條件可向?qū)Ξ?dāng)前實(shí)例一樣訪問路徑上先前實(shí)例的設(shè)置。就像該約束條件已定義在已標(biāo)識(shí)系統(tǒng)中一樣,傳播對(duì)嵌套約束條件的評(píng)估。從foo角度來看,以下兩種情況應(yīng)該是相等的。在第一種情況下,foo在一包含系統(tǒng)bar上設(shè)置了一嵌套約束條件,在第二種情況下,類型bar已經(jīng)包含了此約束條件。情況1<SystemDefinitionname=″foo″><RelationshipConstraintName=″containsBar″RelattonshipDefinition=″containment″TargetRole=″Member″TargetObjectDefinition=″bar″MinOccurs=T><RelationshipConstraintName=″containsX″RelationshipDefinition=″containment″TargetRole=″MembernTargetObjectDefinition=″X″MinOccurs=″1″/></RelatbnshipConstraint></SystemDefinition><SystemDefinitionname=″bar″/>情況2<SystemDefinitionName=″foo″><RelationshipConstraintName=″containsBar″RelationshipDefinition=″containment″TargetRole=″Member″TargetObjectDefinition=″bar″MinOccurs=″1″/></SystemDefinition><SystemDefinitionName=″bar″><RelationshipConstraintName=″containsX″RelationshipDefinition=″containment″TargetRole=°Member″TargetObjectDefinition=″X″MinOccurs=″1″/></SystemDefinition>3.7.3.1約束條件模型約束條件模型具有兩部分防護(hù)和判定。利用防護(hù)定義執(zhí)行判定的上下文。例如在一關(guān)系中,我們利用防護(hù)來標(biāo)識(shí)我們想執(zhí)行的斷定的類型的一特殊組合。在一對(duì)象內(nèi),我們利用防護(hù)來標(biāo)識(shí)與其他對(duì)象的一組關(guān)系。當(dāng)遇到防護(hù)的需求時(shí),執(zhí)行判定。我們有兩種形式的判定驗(yàn)證設(shè)置值的設(shè)置約束條件和驗(yàn)證一組約束條件的組約束條件。我們可在防護(hù)內(nèi)嵌套防護(hù),在這種情況下,當(dāng)滿足外防護(hù)時(shí)只檢查內(nèi)防護(hù)。這就允許我們建立支持關(guān)系結(jié)構(gòu)的驗(yàn)證的路徑。一防護(hù)及其判定的組合具有一基數(shù),其指示了防護(hù)應(yīng)該匹配且判定被評(píng)計(jì)為真的次數(shù)。更正式地,Guard=ObjectConstraint(ObjectDefintion,ObjectDefintion.required){(Guard|predicate)*}|RelationshipConstraint(RelationshipDefinition,Targetobject,1Bound,uBound){(Guard|predicate)*}防護(hù)被定義為ObjectConstraint或RelatiomshipConstraint。對(duì)象約束條件標(biāo)識(shí)了與關(guān)系兩端相關(guān)的兩個(gè)對(duì)象定義。關(guān)系約束條件標(biāo)識(shí)了一關(guān)系定義和一目標(biāo)對(duì)象定義。當(dāng)一關(guān)系約束條件具有一下限和一上限時(shí),對(duì)象約束條件是可選地或必需地。基數(shù)不同反映了一關(guān)系只能標(biāo)識(shí)兩種類型而一種類型可參與多個(gè)關(guān)系。predicat=Settingsconstraint(rule)|group{(group)*}判定是一個(gè)包含一規(guī)則的設(shè)置約束條件或者是包含了一組防護(hù)的組。在防護(hù)的上下文中評(píng)估約束條件。在其是設(shè)置約束條件的情況下,判定可標(biāo)識(shí)來自根防護(hù)的所有者以及由每個(gè)嵌套防護(hù)所標(biāo)識(shí)的內(nèi)容的設(shè)置。組用于標(biāo)識(shí)一組防護(hù),其中該防護(hù)中的至少一個(gè)應(yīng)匹配且評(píng)估為真。例1.RelationshipConstraint(containmentRelationship,webapp,0,1){}此例表示了一個(gè)防護(hù),其中只要存在包含webapp的包含關(guān)系,該防護(hù)就被評(píng)估為真。此防護(hù)最多一次評(píng)估為真。進(jìn)一步的匹配將向用戶返回一錯(cuò)誤。2.RelationshipConstraint(containmentRelationship.webapp,0,1){settingsconstraint(webapp.name=2)}此例給防護(hù)增加了一判定。只有當(dāng)關(guān)系和目標(biāo)定義相匹配并且設(shè)置約束條件被評(píng)估真時(shí),此防護(hù)被評(píng)估為真。假如關(guān)系和目標(biāo)定義相匹配且設(shè)置約束條件不為真,那么將向用戶返回一錯(cuò)誤。假如關(guān)系和目標(biāo)類型匹配且設(shè)置約束條件多次被評(píng)估為真,那么向用戶返回一錯(cuò)誤。3.RelationshipConstraint(containmentRelationship,webapp,0,1){RelationshipConstraint(containmentRelationship,vdir,0,1)}在此例中,在一防護(hù)中嵌套一防護(hù)。當(dāng)外部防護(hù)為真(包含約束條件的類型也包含一webapp),然后評(píng)估在外部防護(hù)上下文中的內(nèi)部防護(hù)。這意味著將在一webapp實(shí)例的上下文中評(píng)估內(nèi)部關(guān)系約束條件。假如webApp包含0或一個(gè)vdir,則此內(nèi)部約束條件將返回真,假如它包含超過一個(gè)vdir,則此約束條件將向用戶返回一錯(cuò)誤。4.objectConstraint(webapp,iis,0,1){RelationshipConstraint(containmentRelationship,systemType,0,1){ObjectConstraint(webapp,vdir,0,1)}}對(duì)象約束條件的上下文為第一對(duì)象定義(第一對(duì)象定義)。這意味著將在webapp的上下文中評(píng)估關(guān)系約束條件。此關(guān)系約束條件定義了兩種可能的上下文,第一種是關(guān)系,將成為用作對(duì)象約束條件的上下文,而第二種是目標(biāo)對(duì)象定義,其用作關(guān)系約束條件的上下文。5.RelationshipConstraint(containmentRelationship,webapp,0,1){group{RelationshipConstraint(containmentRelationship,vdir,0,1)RelationshipConstraint(containmentRelationship,directory,0,1)}}在此例中,我們利用一個(gè)組來包含將在Webapp上下文中評(píng)估的兩個(gè)關(guān)系約束條件。除非解除至少一個(gè)關(guān)系并返回真,否則此組將產(chǎn)生一個(gè)錯(cuò)誤。在此情況下,Webapp應(yīng)包含一Vdir或一目錄。3.7.3.2基本約束條件所有結(jié)構(gòu)的約束條件源自一個(gè)被稱為StructualConatraint的通用基本約束條件。每個(gè)結(jié)構(gòu)的約束條件可包含一描述元素和設(shè)計(jì)數(shù)據(jù)。當(dāng)所需約束條件失敗時(shí),此描述元素將作為錯(cuò)誤消息返回。每個(gè)約束條件也具有一個(gè)名稱和一個(gè)標(biāo)識(shí)此約束條件是必需還是僅僅是一形成較大約束條件的一部分的標(biāo)志。最后當(dāng)評(píng)估約束條件時(shí),約束條件的評(píng)估元素可用于指示。參看與約束條件評(píng)估相關(guān)的更多信息的3.7.3.7部分。<xscomplexTypename=″StructuralConstrainr><xssequence><xselementname=″Description″type=″Description″minOccurs=″0″/><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/></xssequence><xsatlributename=″Name″type=″SimpleName″use=″required″/><xsattributename=″Evaluate″type=″ConstraintEvaluation″use=″optional″/><xsattributename=″Required″type=″xsboolean″use=″optional″/></xscomplexType>3.7.3.3對(duì)象約束條件一對(duì)象約束條件描述了關(guān)系中一或兩個(gè)角色上的約束條件。此約束條件具有一名稱,其用于在它失敗的情況下輔助識(shí)別約束條件。此約束條件評(píng)估如下a)第一角色和第一定義與一對(duì)象實(shí)例是否匹配,而且假如被提供,第二角色和第二定義是否匹配一對(duì)象實(shí)例。假如這些不匹配,那么設(shè)置match=0并跳到c)b)評(píng)估第一對(duì)象實(shí)例上下文中的所有嵌套約束條件。假如所有的評(píng)估計(jì)均為真,那么設(shè)置match=1,否則設(shè)置match=0。c)假如匹配>MinOccurs且匹配<MaxOccurs,那么設(shè)置result=真,否則設(shè)置result=假。d)假如請(qǐng)求為真且結(jié)果為假,則向用戶返回一消息。e)向父上下文返回結(jié)果。<xscomplexTypename=″ObjectConstraint″><xscomplexContent><xsextensionbase=″StructuralConstraint″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″Constraint″type=″ConstraintMember″/><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″/><xselementname=″RelationshipConstraintGroup″type=″RelationshipConstraintGroup″/></xschoice><xsattributename=″PrimaryRole″type=″RolesList″use=″required″/><xsaltributename=″PrimaryObjectDefinition″type=″QualifiedName″use=″required″/><xsattributename=″SecondaryRole″type=″RolesList″use=″optional″/><xsattributename=″SecondaryObjectDeflnition″type=″QualifiedName″use=″optional″/><xsattributename=″MinOccurs″type=″MinOccurs″use=″optional″/><xsattributename=″MaxOccurs″type=″MaxOccurs″use=″optiona!″/></xsextension></xscomplexContent></xscomplexType>3.7.3.4對(duì)象約束條件組對(duì)象約束條件組允許多組對(duì)象約束條件的組合,從而它們可利用至少一語義來評(píng)估。除非組中至少一個(gè)約束條件被評(píng)估為真,否則此組將返回一錯(cuò)誤。約束條件組進(jìn)行如下評(píng)估a)依次評(píng)估每個(gè)嵌套約束條件組。假如至少一個(gè)被評(píng)估為真,那么設(shè)置result=真,否則設(shè)置result=假。b)假如result=假且required=真,那么產(chǎn)生一錯(cuò)誤。c)向父上下文返回結(jié)果。<xscomplexTypename=″ObjectConstraintGroup″><xscomplexContent><xsextensionbase=″Constraint″><xssequence><xselementname=″ObjectConstraint″type=″ObjectConstraint″maxOccurs=″unbounded″/></xssequence></xsextension></xscomplexContent></xscomplexType>3.7.3.5關(guān)系約束條件關(guān)系約束條件用于約束對(duì)象可參與的關(guān)系。一關(guān)系約束條件標(biāo)識(shí)關(guān)系定義,可選地標(biāo)識(shí)了在關(guān)系另一端的實(shí)例的對(duì)象定義和關(guān)系的基數(shù)。此約束條件被給定一名稱,這樣在錯(cuò)誤消息中就可以識(shí)別它。關(guān)系約束條件的主體包含進(jìn)一步提煉此約束條件的嵌套約束條件。關(guān)系約束條件可用于一些目的無需附加判定簡單地利用基數(shù),它們就能用于標(biāo)識(shí)為一實(shí)例正確操作所提供的關(guān)系,利用判定,它們用于縮小當(dāng)前實(shí)例希望交互作用的實(shí)例的配置。關(guān)系進(jìn)行如下的評(píng)估a)設(shè)置matches=0b)對(duì)于對(duì)象實(shí)例參與的每個(gè)關(guān)系實(shí)例a.關(guān)系定義與關(guān)系實(shí)例定義是否匹配,關(guān)系方向與目標(biāo)角色所標(biāo)識(shí)的方向是否匹配,而且假如提供了,目標(biāo)對(duì)象定義與關(guān)系的另一端的實(shí)例定義是否匹配。假如這些都不匹配則跳到下一關(guān)系b.評(píng)估關(guān)系實(shí)例上下文中的所有嵌套約束條件。假如均評(píng)估為真,設(shè)置matches=matches+1。c)假如matches>MinOccurs且matches<MaxOccurs則設(shè)置result=真,否則設(shè)置result=假。d)假如required為真result為假則向用戶返回一消息。e)向父上下文返回結(jié)果。<xscomplexTypename=″RelationshipConstraint″><xscomplexContent><xsextensionbase=″StructuralConstraint″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″Constraint″type=″ConstraintMember″/><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″/><xselementname=″RelationshipConstraintGroup″lype=″RelationshipConstraintGroup″/><xselementname=″ObjectConstraint″type=″ObjectConstraint″/><xselementname=″ObjectConstraintGroup″type=″ObjectConstraintGroup″/></xschoice><xsattributename=″RelationshipDefinition″type=″QualifiedName″use=″required″/><xsattributename=″TargetRole″type=″RolesList″use=″required″/><xsattributename=″TargetObjectDefinition″type=″QualifiedName″use=″optional″/><xsattributename=″MinOccurs″type=″MinOccurs″use=″optional″/><xsattributename=″MaxOccurs″type=″MaxOccurs″use=″optional″/><xsattributename=″DelegationAware″type=″xsboolean″use=″optional″/></xsextension></xscompiexContent></xscomplexType>3.7.3.6關(guān)系約束條件組關(guān)系約束條件允許多組關(guān)系約束條件組合到一起,這使得可將它們?cè)u(píng)估為具有至少一語義的一個(gè)判定。約束條件組進(jìn)行如下評(píng)計(jì)d)依次評(píng)估每個(gè)嵌套約束條件。假如至少一個(gè)被評(píng)估為真,那么設(shè)置result=真否則設(shè)置result=假。e)假如result=假且required=真,那么產(chǎn)生一錯(cuò)誤。f)向父上下文返回結(jié)果。<xscomplexTypenam′e=″RelationshipConstraintGroup″><xscomplexContent><xsextensionbase=″StructuralConstraint″><xssequence><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″maxOccurs=″unbounded7></xssequence></xsextension></xscomplexContent></xscomplexType>3.7.3.7約束條件評(píng)估在三個(gè)明顯的時(shí)機(jī)可評(píng)估一約束條件設(shè)計(jì)過程期間、一應(yīng)用程序的配置過程中以及一旦配置了應(yīng)用程序,在操作者想檢查或更新應(yīng)用程序配置的任何時(shí)候。評(píng)估一約束條件的時(shí)機(jī)改變了對(duì)約束條件有用的信息組。在設(shè)計(jì)期間評(píng)估的約束條件不能依賴于只在配置期間提供或在配置之后有效的值。在配置期間評(píng)估的約束條件不能依賴于只在配置之后有效的值。在配置之后評(píng)估的約束條件可訪問應(yīng)用程序中的任何設(shè)置。我們?cè)试S一約束條件開發(fā)者依據(jù)其何時(shí)運(yùn)行來標(biāo)記他們的約束條件。假如當(dāng)輸入無效時(shí)我們?cè)囍\(yùn)行一約束條件,此信息用于避免即將發(fā)生的錯(cuò)誤。編譯器然后能檢查一設(shè)計(jì)約束條件不依賴于它所知道的配置或確認(rèn)之后才生效的值,同樣它能檢查一調(diào)度約束條件不依賴于它所知道在的配置之后才生效的值。假如編譯器完全知曉何時(shí)設(shè)置將生效,那么可以計(jì)算可運(yùn)行約束條件的時(shí)機(jī),但不幸地,事實(shí)并非如此。為一設(shè)置提供值的時(shí)機(jī)可改變,例如,目錄名可預(yù)先知道或可利用產(chǎn)生獨(dú)一無二的標(biāo)識(shí)符的算法在配置過程中創(chuàng)建一目錄名。約束條件進(jìn)行如下標(biāo)記a)Design(設(shè)計(jì))——指示了在設(shè)計(jì)期間、配置期間或驗(yàn)證期間可運(yùn)行約束條件b)Deployment(配置)——指示了在配置或驗(yàn)證期間可運(yùn)行約束條件c)Validation(驗(yàn)證)——指示了只能在驗(yàn)證期間運(yùn)行約束條件d)Never(從不)——指示從不運(yùn)行約束條件以下列舉用于獲得這些選項(xiàng)<xssimpleTypename=″ConstraintEvaluation″><xsrestrictionbase=″xsstring″><xsenumerationvalue=″Design″/><xsenumerationvalue=″Deployment″/><xsenumerationvalue=″Validate″/><xsenumerationvalue=″Never″/></xsrestriction></xssimpleType>可對(duì)結(jié)構(gòu)的約束條件和約束條件成員設(shè)置約束條件的評(píng)估行為。在以上兩種情況下,對(duì)結(jié)構(gòu)的約束條件或約束條件成員應(yīng)用所有的嵌套約束條件。約束條件默認(rèn)地被標(biāo)記為設(shè)計(jì)期間約束條件并且其可在任何期間運(yùn)行。3.8授權(quán)授權(quán)的目的是允許一模型的開發(fā)者向一客機(jī)或父體公開主機(jī)或所包含的組件的特定行為。這允許開發(fā)者設(shè)計(jì)一個(gè)重用現(xiàn)有實(shí)施的組件,并提供一更全面的用于其客戶機(jī)的實(shí)施。圖19描述了一個(gè)利用授權(quán)向客機(jī)公開的主機(jī)的實(shí)施的例子。在圖19,應(yīng)用平臺(tái)部件利用一授權(quán)關(guān)系向客機(jī)公開了主機(jī)的文件系統(tǒng)、操作系統(tǒng)組件、應(yīng)用程序。這樣,此應(yīng)用平臺(tái)無需直接實(shí)現(xiàn)它們便能控制操作系統(tǒng)哪部分對(duì)其客機(jī)有效的。圖20描述了一個(gè)利用授權(quán)向父層公開一成員的實(shí)施的例子。在圖20中,客戶機(jī)應(yīng)用程序公開了票務(wù)應(yīng)用程序的定購服務(wù)端點(diǎn)。這允許票務(wù)應(yīng)用程序然后將此端點(diǎn)連接到服務(wù)器應(yīng)用程序,此服務(wù)器應(yīng)用程序反過來將其端點(diǎn)授權(quán)給用戶數(shù)據(jù)應(yīng)用程序。3.8.1原則以下原則指導(dǎo)了授權(quán)模型的設(shè)計(jì)?!ぴ谀繕?biāo)系統(tǒng)中不存在代理。代理對(duì)于模型來說是方便的并且無物理顯示。假如不為真,那么使用授權(quán)將對(duì)目標(biāo)系統(tǒng)具有側(cè)面影響?!ご聿荒芨淖兪跈?quán)的行為除非授權(quán)支持此改變。由于目標(biāo)系統(tǒng)中不存在代理,代理只能改變模型而非實(shí)際的系統(tǒng)行為。假如授權(quán)公開了影響其行為的設(shè)置,那么和其他關(guān)系一樣,授權(quán)關(guān)系可通過信息流來改變那些設(shè)置?!囊煌獠坑脩艚嵌葋砜?,用戶不用知道一特殊實(shí)例是否是一代理或一實(shí)際實(shí)施。假如不為真,那么約束條件和信息流作者將不得不覆蓋導(dǎo)致復(fù)雜和易碎代碼的情況。·一用戶能明確將代理作為約束條件表達(dá)的一部分。為了通過一部件邊界實(shí)現(xiàn)控制行為的約束條件,這是必需的。3.8.2情況以下是描述在一系統(tǒng)中與利用授權(quán)相關(guān)的問題的兩種情況3.8.2.1通信連接驗(yàn)證為驗(yàn)證一客戶機(jī)端口能連接到一服務(wù)器端口,通信關(guān)系包含一通到此服務(wù)器的約束條件,然后返回此服務(wù)器主機(jī),然后沿層3的通信關(guān)系返回,然后沿宿主關(guān)系到層4客戶機(jī)并且最后返回通信關(guān)系。這在圖21中示出。由于包含邊界的存在,在兩層的客戶機(jī)和服務(wù)器之間存在授權(quán)關(guān)系。圖22就描述了這樣的一個(gè)例子。為寫沿此路徑的約束條件,用戶應(yīng)當(dāng)能復(fù)制任意數(shù)量的這些關(guān)系,這使得約束條件的描述更復(fù)雜且減少了約束條件語言的可用性。為避免以上情況,我們需要用戶能夠不用事先知道是否將有代理且有多少代理的情況下寫約束條件。3.8.2.2區(qū)域邊界在數(shù)據(jù)中心,區(qū)域經(jīng)常用于區(qū)分帶有不同保密需要或行為的系統(tǒng)。當(dāng)一通信關(guān)系與區(qū)域邊界交叉時(shí),用戶希望在關(guān)系的行為上設(shè)置約束條件。例如,一用戶希望只允許在一特定端點(diǎn)與后終端服務(wù)器之間http通信。為此,用戶應(yīng)該在通訊關(guān)系與區(qū)域邊界交叉時(shí)能夠標(biāo)識(shí)該通信關(guān)系代理是他們唯一可取的方法。圖23描述了區(qū)域邊界的一個(gè)例子。在圖23中,假如開發(fā)者希望約束從區(qū)域1到區(qū)域2的輸出通信,那么他們將通過約束授權(quán)給區(qū)域邊界的端點(diǎn)來實(shí)現(xiàn)。例如,他們可寫一個(gè)只允許輸入http且輸出sql通信流的約束條件。此約束條件對(duì)區(qū)域公開的每個(gè)代理端點(diǎn)無效。為約束一代理,其對(duì)于約束條件應(yīng)該是可視的。這意味著約束條件能將代理所參與的關(guān)系與實(shí)現(xiàn)此行為的授權(quán)分離開來。這使得在與不對(duì)用戶透明的代理的情況相同先前情況下,期望的行為變得復(fù)雜。3.8.3與模型其他部分的交互作用利用如圖24所示的例實(shí)例空間來描述授權(quán)的規(guī)則。3.8.3.1代理和授權(quán)代理應(yīng)該與授權(quán)相同或是授權(quán)的一基本類。在如圖24的例子中,作為一代理的b,應(yīng)該與c相同是c的一基本定義,c是授權(quán)。因?yàn)榇韇只能公開c的行為,所以這是必需的。假如允許區(qū)分類型,那么所公開的b的行為可與c的行為不同,但沒有b的實(shí)現(xiàn)所需行為的物理顯示。在此實(shí)例空間,一代理實(shí)例只能有一個(gè)授權(quán),即只能有一個(gè)來自b的授權(quán)關(guān)系,其中b為此關(guān)系中的代理。此約束條件是必需的,因?yàn)闆]有它不可能返回授權(quán)的設(shè)置值或成員集合——運(yùn)行期間不會(huì)知道選擇哪個(gè)授權(quán)作為此值的源。3.8.3.2關(guān)系角色一代理可擔(dān)當(dāng)以下關(guān)系角色3.8,3.3成員過濾和路徑解析代理只公開來自被定義為部分代理定義的授權(quán)的成員。在代理和授權(quán)定義相同的情況下,代理公開了所有授權(quán)的成員。當(dāng)代理定義是授權(quán)定義的基本定義時(shí),代理將只能公開那些兩者定義通用的成員。以下給出的定義用于如圖24的B和C<DefinitionName=″B″><SettingDeclarationName=″height″Definition=″lnt″/></Definition><DefinitionName=″C″Extends=″B″><SettingDeclarationName=″weight″Definition=″lnt7></Definition>然后代理b將只公開高度設(shè)置而不公開重量設(shè)置。當(dāng)在一代理上設(shè)置一設(shè)置值時(shí),通過授權(quán)關(guān)系將此行為傳遞給授權(quán)直接將新設(shè)置值記錄在授權(quán)上并且其對(duì)于任何指向此授權(quán)的其他代理均是可視的。當(dāng)從一代理中檢索一設(shè)置值時(shí),請(qǐng)求被傳遞給授權(quán)并且直接從此授權(quán)返回設(shè)置值。對(duì)象和關(guān)系成員過濾與設(shè)置過濾工作方式相同。只有被聲明為代理定義的一部分的公共成員被此代理公開。成員的改變立即影響授權(quán)的成員,并且其對(duì)于所有指向此授權(quán)的代理均是可視的。當(dāng)一成員路徑引用一代理的成員時(shí),此路徑自動(dòng)解析成授權(quán)的成員。這意味著無論成員是代理或是授權(quán)都不改變此路徑的語法。3.8.3.4關(guān)系過濾每個(gè)對(duì)象實(shí)例參與一組關(guān)系。這些關(guān)系用于評(píng)估約束條件和信息流,并且用于控制例示的過程。為實(shí)現(xiàn)向用戶表示代理和授權(quán)的一致性,代理和授權(quán)都參與應(yīng)該結(jié)合在一起的關(guān)系組。從此代理中,我們需要公開與代理關(guān)系結(jié)合的授權(quán)關(guān)系的子集。假如我們隱藏實(shí)現(xiàn),那么此代理需要向用戶返回其自身的包含關(guān)系,且可能只是一個(gè)授權(quán)得關(guān)系的小型子集。假如我們希望代理完全透明,那么我們就公開所有授權(quán)的關(guān)系并隱藏代理的關(guān)系。從此代理中,我們需要結(jié)合其代理參與的關(guān)系子集公開它的的直接關(guān)系。也就是說,假如一代理與另一端點(diǎn)具有通信關(guān)系,那么它應(yīng)當(dāng)表現(xiàn)為好像授權(quán)直接參與此關(guān)系一樣。另一方面,我們不希望公開作為授權(quán)的一部分的代理的包含關(guān)系。由約束條件所造成的行為在3.8.3.6部分描述。3.8.3.4.1代理身份和關(guān)系過濾我們有兩種代理——透明代理和不透明代理。當(dāng)開發(fā)者希望向代理的客戶機(jī)公開授權(quán)的實(shí)施時(shí)使用透明代理,而當(dāng)開發(fā)者希望向授權(quán)的客戶機(jī)隱藏代理的實(shí)施時(shí)使用不透明代理。3.8.3.4.1.1透明協(xié)議透明代理用于向客戶機(jī)公開授權(quán)的實(shí)施。一典型的例子如圖23所示,其中區(qū)域純粹用作模型目的且不應(yīng)隱藏它們包含的系統(tǒng)。在這種情況下,與區(qū)域2的Sql系統(tǒng)通信的開發(fā)者知道授權(quán)端點(diǎn)的實(shí)施是一Sql服務(wù)器而不是一區(qū)域。透明代理從授權(quán)而非服務(wù)器中返回所有標(biāo)識(shí)信息。這意味著實(shí)例ID、定義、版本和包含信息都源自授權(quán)而非代理。當(dāng)查詢時(shí),透明代理也將返回代理所參與的關(guān)系集而不是那些授權(quán)。3.8.3.4.1.2不透明代理不透明代理用于隱藏授權(quán)的實(shí)施,這使得開發(fā)者不需斷開客戶機(jī)便可自由改變實(shí)施。例如在圖19中,IIS系統(tǒng)可利用不透明協(xié)議隱藏文件系統(tǒng)實(shí)施,這使得IIS的客戶不依賴實(shí)現(xiàn)此文件系統(tǒng)的操作系統(tǒng)。不透明協(xié)議將從代理而不是授權(quán)中返回實(shí)例ID、定義和版本和包含信息。當(dāng)查詢時(shí),不透明代理將只返回它所直接參與的不包括其授權(quán)關(guān)系的關(guān)系。3.8.3.5信息流指向一代理的信息流將無需知曉目標(biāo)是一代理而不是實(shí)際實(shí)施,就可以自動(dòng)重定向到授權(quán)。由于代理將對(duì)所有成員的請(qǐng)求發(fā)到與授權(quán)相關(guān)的實(shí)例,信息流得影響直接通過代理傳送到授權(quán)。被聲明為代理的一部分的信息流將不被評(píng)估。這是因?yàn)橛捎谑跈?quán)應(yīng)當(dāng)與代理定義相同或從代理定義導(dǎo)出,此信息流也將作為授權(quán)的一部分而進(jìn)行評(píng)估。假如其被評(píng)估,我們將獲得有關(guān)授權(quán)設(shè)置值的雙重信息流錯(cuò)誤。3.8.3.6約束條件約束條件可被寫入用以讓授權(quán)知曉也可不寫入。假如一約束條件是一授權(quán)知曉,那么無需出現(xiàn)任何此代理所參與的關(guān)系,就其將在每個(gè)代理實(shí)例上進(jìn)行評(píng)估。授權(quán)關(guān)系將對(duì)約束條件公開。例如,如圖24從x指向b的一授權(quán)知曉通信約束條件將看到代理b及其x、c、d、e和i所參與的關(guān)系。然后假設(shè)它向c傳遞授權(quán)關(guān)系,則其可看到從c到b、f、h和g的關(guān)系。假如一約束條件未被標(biāo)記為授權(quán)知曉,那么當(dāng)評(píng)估指向一代理的關(guān)系時(shí),此約束條件引擎將自動(dòng)跳過透明代理。假如約束條件的目標(biāo)實(shí)例是一代理,那么約束條件引擎將用授權(quán)替代它。此約束條件將不能看見授權(quán)關(guān)系。假如無授權(quán)知曉來評(píng)估相同約束條件,則該約束條件完全看不到b。取而代之,只能相對(duì)于c進(jìn)行評(píng)估。當(dāng)評(píng)估c時(shí),其可看見在c和x、d、f、h、g、I之間的關(guān)系。應(yīng)當(dāng)注意在此情況下,我們使所有來自b的關(guān)系都出現(xiàn),除了其包含關(guān)系,并且我們隱藏了授權(quán)關(guān)系。通過將一結(jié)構(gòu)的約束條件(對(duì)象或關(guān)系約束條件——參看3.7.3部分)的DelegationAware屬性設(shè)置為真,從而將一約束條件標(biāo)記為授權(quán)知曉。聲明作為代理定義的一部分進(jìn)行的約束條件將不在代理上進(jìn)行評(píng)估。這是因?yàn)榇思s束條件也將相對(duì)于授權(quán)被評(píng)估。而這對(duì)于代理和授權(quán)定義是通用的。3.9管理器管理器是類型和關(guān)系通過它將客戶行為插入到運(yùn)行期間環(huán)境的機(jī)制。對(duì)于其管理的每種類型,管理器可支持幾個(gè)作用它能參與類型安裝,它能提供類型的一CLR表達(dá),它能涉及關(guān)于如何解析類型間結(jié)合的策略決定中,并且它能提供用于復(fù)雜約束條件和信息流的實(shí)施。由CLR揭示的所有的對(duì)象管理器作為強(qiáng)大名稱類的輸入點(diǎn)。與SDM其他類型相同的方式一樣,對(duì)象管理器被打包并設(shè)置其版本;它們被分配在系統(tǒng)分布單元內(nèi),并且它們的版本和強(qiáng)大名稱源自聲明它們的SDM文件。<xscomplexTypename=″ManagerDeclaration″><xssequence><xselementname=″Description″type=″Description″minOccurs=″0″/></xssequence><xsattributename=″Name″type=″SimpleName″use=″required″/><xsattributename=″AssemblyName″type=″xsstring″use=″required″/><xsattributename=″Version″type=″FourPartVersionType″use=″optional″/><xsattributename=″PublicKeyToken″type=″PublicKeyTokenType″use=″optiona!″/><xsattributename=″Culture″typr″CultureNeutral″use=″optional″/><xsattributename=″Platform″type=″xsstring″use=″optional″/><xsattributename=″SourcePath″type=″xsstring″use=″optionai″/></xscomplexType>3.9.1作用一對(duì)象管理器能支持用于它所支持類型的一或多個(gè)作用。這些作用包括a)評(píng)估類型或關(guān)系的約束條件b)評(píng)估類型或關(guān)系的信息流c)構(gòu)建/消除/更新一類型的支持d)公開一個(gè)用于類型或關(guān)系的設(shè)置的對(duì)象表達(dá)e)執(zhí)行類型或關(guān)系的發(fā)現(xiàn)f)支持一類型或關(guān)系的設(shè)計(jì)表面特定UI3.9.2注意管理器依賴于其他管理器,但這些依賴應(yīng)反映在用戶管理器的SDM文件的導(dǎo)入語句。假如未描述這些依賴,那么將在運(yùn)行期間將不能裝載一特定管理器所依賴的其他管理器,并且管理器將不能運(yùn)行。3.10設(shè)計(jì)數(shù)據(jù)和描述描述包含描述相關(guān)SDM元素的文本。此文本采用以DocumentLanguage屬性標(biāo)識(shí)的文檔的語言。為支持文本定位,可提供一源標(biāo)識(shí)符。運(yùn)行期間將詢問描述中識(shí)別的管理器或是否沒應(yīng)用默認(rèn)管理器,該默認(rèn)管理器用于與描述相關(guān)的定位文本的文檔。<xscomplexTypename=″Description″mixed=″true″><xsattributename=″ResourcelcPtype=″xsstring″use=″optional″/><xsattributename=″Manager″type=″QualifiedName″use=″optiona!″/></xscomplexType>Adesigndatatypecontainsstructureddatathatdefinedbyadesignsurface.Eachdesignsurfaceshouldusetheirownschematoidentifyandtostricturethedata.<xscomplexTypename=″DesignData″><xssequence><xsanynamespace=″##other″processContents=″lax″minOccurs=″0″maxOccurs=″unbounded″/></xssequence></xscomplexType>3.11SDM文檔結(jié)構(gòu)SDM文檔提供了用于一組關(guān)系、對(duì)象和管理器的強(qiáng)大身份、版本和定位信息。<xselementname=″SystemDefinitionModer><xscomplexType><xssequence><xselementname=″lnformation″type=″lnformation″minOccurs=″0″/><xselementname=″lmport″type=″lmport″minOccurs=″0″maxOccurs=″unbounded″/><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/><xselementname=″SettingDefinitions″type=″SettingDefinitions″minOccurs=″0″/><xschoiceminOccurs=″0″maxQccurs=″unbounded″><xselementname=″CommunicationDefinition″type=″CommunicationDefinition″/><xselementname=″ContainmentDefinition″type=″ContainmentDefinition″/><xselementname=″DeIegationDefinition″type=″DelegationDefinition″/><xselementname=″ReferenceDefinition″type=″ReferenceDefinition″/><xselementname=″HostingDefinition″type=″HostingDefinition″/><xselementname=″EndpointDefinition″type=″EndpointDefinition″/><xselementname=″ResourceDefmition″type=″ResourceDefinition″/><xselementname=″SystemDefinition″type=″SystemDefinition″/><xselementname=″ConstraintDefinition″type=″ConstraintDefinition″/><xselementname=″FlowDefinition″type=″FlowDefinition″/><xselementname=″Manager″type=″ManagerDeclaration″/></xschoice></xssequence><xsattributeGroupref=″Namespaceldentity″/><xsattributename=″DocumentLanguage″type=″Culture″/></xscomplexType></xselement>3.11.1信息SDM文檔的信息部分包含支持SDM文檔的識(shí)別和管理的人類可讀信息。<xscomplexTypename=″Information″><xsannotation><xsdocumentation>HumanreadableinformattonabouttheSDMDefinitionlibrary.</xsdocumentation></xsannotation><xssequence><xselementname=″FriendlyName″type=″xsstring″minOccurs=″0″/><xselementname=″CompanyName″type=″xsstring″minOccurs=″0″/><xselementname=″Copyright″type=″xsstring″minOccurs=″0″/><xselementname=″Trademark″type=″xsstring″minOccurs=″0″/><xselementname=″Description″type=″Description″minOccurs=″0″/><xselementname=″Comments″type=″xsstring″minOccurs=″0″/></xssequence></xscomplexType>計(jì)算機(jī)環(huán)境舉例圖25描述了一通用計(jì)算機(jī)環(huán)境800,其可用于實(shí)現(xiàn)這里所描述的技術(shù)。計(jì)算機(jī)環(huán)境800只是計(jì)算機(jī)環(huán)境的一個(gè)例子,并不對(duì)計(jì)算機(jī)和網(wǎng)絡(luò)結(jié)構(gòu)的使用或功能范圍做任何限制。計(jì)算機(jī)環(huán)境800不解釋為涉及具有典型計(jì)算機(jī)環(huán)境800所述的組件或其組合的依賴性或要求。計(jì)算機(jī)環(huán)境800包括一通用目的的計(jì)算設(shè)備,其形式為計(jì)算機(jī)802。計(jì)算機(jī)802可以是,例如,圖1中的計(jì)算設(shè)備102,或圖2中的實(shí)現(xiàn)開發(fā)系統(tǒng)202或有效部件208。計(jì)算機(jī)802的部件可包括但不局限于,一或多個(gè)處理器或處理單元804,一系統(tǒng)存儲(chǔ)器806以及將包括處理器804的各系統(tǒng)組件耦合到系統(tǒng)存儲(chǔ)器806的一系統(tǒng)總線808。系統(tǒng)總線808表示幾種總線結(jié)構(gòu)中的一或多個(gè),其包括一存儲(chǔ)器總線或存儲(chǔ)控制器、一外圍總線、一加速圖形端口以及一處理器或采用任意一種總線結(jié)構(gòu)的局域總線。例如,此總線結(jié)構(gòu)可包括工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線,微通道結(jié)構(gòu)(MCA)總線,增強(qiáng)ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局域總線以及也稱之為夾層總線的外設(shè)部件互連(PCI)總線,。計(jì)算機(jī)802典型地包括多種計(jì)算機(jī)可讀介質(zhì)。此介質(zhì)可以是計(jì)算機(jī)802可訪問的任何可用得介質(zhì)并且包括易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器806包括易失性存儲(chǔ)器形式的計(jì)算機(jī)可讀介質(zhì),例如隨機(jī)存儲(chǔ)器(RAM)810,和/或非易失性存儲(chǔ)器,例如只讀存儲(chǔ)器(ROM)812。一存儲(chǔ)在ROM812中的基本輸入/輸出系統(tǒng)(BIOS)814,其包含有助于在計(jì)算機(jī)802內(nèi)的元素之間傳輸信息的基本例程,例如在啟動(dòng)過程中。RAM810典型地包含處理單元804可即時(shí)訪問和/或操作的數(shù)據(jù)和/或程序模型計(jì)算機(jī)802也可包括其他可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。例如,圖25描述了一個(gè)用于讀出和寫入一不可移動(dòng)非易失性磁介質(zhì)(未示出)的硬盤驅(qū)動(dòng)器816、一個(gè)用于讀出和寫入一可移動(dòng)非易失性磁盤驅(qū)動(dòng)器820(例如,一“軟盤”)的磁盤驅(qū)動(dòng)器818、以及一個(gè)用于讀出和/或?qū)懭胫T如一CD-ROM、DVD-ROM或其他光介質(zhì)的一可移動(dòng)非易失性光盤824的光盤驅(qū)動(dòng)器822。硬盤驅(qū)動(dòng)器816、磁盤驅(qū)動(dòng)器818和光盤驅(qū)動(dòng)器822都通過一或多個(gè)數(shù)據(jù)介質(zhì)接口826與系統(tǒng)總線808相連??蛇x地,硬盤驅(qū)動(dòng)器816、磁盤驅(qū)動(dòng)器818和光盤驅(qū)動(dòng)器822可通過一或多個(gè)接口(未示出)與系統(tǒng)總線808相連。盤驅(qū)動(dòng)器及其相關(guān)的計(jì)算機(jī)可讀介質(zhì)提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模型及其他計(jì)算機(jī)802的數(shù)據(jù)的非易失性存儲(chǔ)器。盡管此例描述了一硬盤816、一可移動(dòng)磁盤820以及一可移動(dòng)光盤824,也可以理解存儲(chǔ)計(jì)算機(jī)可訪問數(shù)據(jù)的其它類型的計(jì)算機(jī)可讀介質(zhì)也能用于實(shí)現(xiàn)典型的計(jì)算機(jī)系統(tǒng)和環(huán)境,例如盒式磁帶或其它磁性存儲(chǔ)設(shè)備、閃存卡、CD-ROM、數(shù)字化通用盤(DVD)或其它光學(xué)存儲(chǔ)器、隨機(jī)訪問存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)等。任何數(shù)量的程序模塊都可以存儲(chǔ)在硬盤816、磁盤820、光盤824、ROM812和/或RAM810中,包括例如,一操作系統(tǒng)826、一個(gè)或多個(gè)應(yīng)用程序828、其它程序模型830和程序數(shù)據(jù)832。此操作系統(tǒng)826、一或多個(gè)應(yīng)用程序828、其他程序模塊830和程序數(shù)據(jù)832或它們的組合中的每一個(gè)均可實(shí)現(xiàn)支持分布式文件系統(tǒng)的所有或部分常駐組件。用戶可經(jīng)由諸如鍵盤834和指示設(shè)備836(例如一“鼠標(biāo)”)的輸入設(shè)備將命令和信息輸入到計(jì)算機(jī)802中。其他輸入設(shè)備838(未特別示出)可包括一麥克風(fēng)、操縱桿、游戲盤、衛(wèi)星天線、串行端口、掃描儀等。這些和其他輸入設(shè)備經(jīng)由耦合到系統(tǒng)總線808的輸入/輸出接口840與處理單元804相連,也可通過其他接口和總線結(jié)構(gòu),例如一并行端口,游戲端口或一通用串行總線(USB)連接。監(jiān)視器842或其他類型的顯示設(shè)備也可經(jīng)由接口,例如一視頻適配器844,與系統(tǒng)總線808相連。除監(jiān)控器842之外,其他輸出外設(shè)可包括諸如揚(yáng)聲器(未示出)組件和一個(gè)經(jīng)由輸入/輸出接口840與計(jì)算機(jī)802相連的打印機(jī)846。利用與一個(gè)或多個(gè)例如一遠(yuǎn)程計(jì)算設(shè)備848的遠(yuǎn)程計(jì)算機(jī)的連接,,計(jì)算機(jī)802可工作在網(wǎng)絡(luò)環(huán)境中。例如,遠(yuǎn)程計(jì)算設(shè)備848可以是一個(gè)人計(jì)算機(jī)、便攜式計(jì)算機(jī)、一服務(wù)器、一路由器、一網(wǎng)絡(luò)計(jì)算機(jī)、一對(duì)等設(shè)備或其他通用網(wǎng)絡(luò)結(jié)點(diǎn)等。遠(yuǎn)程計(jì)算設(shè)備848被表示為一便攜式計(jì)算機(jī),其包括許多或所有此處描述的與計(jì)算機(jī)802相關(guān)的元素和特征。在計(jì)算機(jī)802和遠(yuǎn)程計(jì)算機(jī)848之間的邏輯連接被描述為一局域網(wǎng)(LAN)850和一通用廣域網(wǎng)(WAN)852。此網(wǎng)絡(luò)環(huán)境通常在辦公室、公司范圍的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)部網(wǎng)和Internet。當(dāng)在一LAN網(wǎng)絡(luò)環(huán)境中實(shí)施時(shí),計(jì)算機(jī)802經(jīng)由一網(wǎng)絡(luò)接口或適配器854與局域網(wǎng)850相連。當(dāng)在一WAN網(wǎng)絡(luò)環(huán)境中實(shí)施時(shí),計(jì)算機(jī)802典型地包括一調(diào)制解調(diào)器856或其他與廣域網(wǎng)852通信的裝置??稍谟?jì)算機(jī)802的內(nèi)部或外部的調(diào)制解調(diào)器856,,經(jīng)由輸入/輸出接口840或其他適當(dāng)結(jié)構(gòu)與系統(tǒng)總線808相連??梢岳斫馑枋龅木W(wǎng)絡(luò)連接是典型的并且可使用其他方式建立計(jì)算機(jī)802和848之間的通信鏈接。在一網(wǎng)絡(luò)環(huán)境中,例如計(jì)算環(huán)境800的描述,與計(jì)算機(jī)802相關(guān)的程序模塊,或其中的部分,可存儲(chǔ)在遠(yuǎn)程存儲(chǔ)設(shè)備中。例如,遠(yuǎn)程應(yīng)用程序858駐留在遠(yuǎn)程計(jì)算機(jī)848的存儲(chǔ)設(shè)備中。為方便描述,應(yīng)用程序和其他諸如操作系統(tǒng)的可運(yùn)行程序組件被描述為不連續(xù)塊,盡管此程序和組件在不同時(shí)段駐留在計(jì)算設(shè)備802的不同存儲(chǔ)組件中,并由計(jì)算機(jī)的數(shù)據(jù)處理器執(zhí)行。此處將描述在計(jì)算機(jī)可運(yùn)行指令的通用上下文中的由一或多個(gè)計(jì)算機(jī)或其他設(shè)備執(zhí)行的不同模塊和技術(shù),例如程序模塊。通常,程序模塊包括執(zhí)行特殊任務(wù)或?qū)崿F(xiàn)特殊抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等。典型地,在各實(shí)施例中可根據(jù)需要合并或分布程序模塊的功能。這些模塊和技術(shù)的實(shí)施存儲(chǔ)在或通過一些形式傳送到計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是任何計(jì)算機(jī)可訪問的有效介質(zhì)。例如,但不限于,計(jì)算機(jī)可讀介質(zhì)可包括“計(jì)算機(jī)存儲(chǔ)介質(zhì)”和“通信介質(zhì)”?!坝?jì)算機(jī)存儲(chǔ)介質(zhì)”包括以任何信息存儲(chǔ)的方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì),此信息例如是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不局限于,RAM、ROM、EEPROM、閃存或其他存儲(chǔ)技術(shù)、CD-ROM、數(shù)字通用磁盤(DVD)或其他光學(xué)存儲(chǔ)器、盒式磁帶、磁帶、磁盤存儲(chǔ)器或其它磁性存儲(chǔ)設(shè)備,或任何其它可用于存儲(chǔ)所需信息且計(jì)算機(jī)可訪問的介質(zhì)?!巴ㄐ沤橘|(zhì)”典型地是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或在調(diào)制數(shù)據(jù)信號(hào)中的其他數(shù)據(jù),例如載波或其他傳送機(jī)制。通信介質(zhì)也包括任何信息傳遞介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號(hào)”的意思是具有一個(gè)或多個(gè)特征設(shè)置或通過與編碼此信號(hào)中信息相同的方式來改變的信號(hào)。例如,但不限于,通信介質(zhì)包括諸如一有線網(wǎng)絡(luò)或直接有線連接的有線介質(zhì),以及諸如聲音、RF、紅外的無線介質(zhì)以及其它無線介質(zhì)。上述內(nèi)容的任何組合都包括在計(jì)算機(jī)可讀介質(zhì)范圍內(nèi)??蛇x地,可用硬件或硬件、軟件和/或固件的組合來實(shí)現(xiàn)框架部分。例如,可設(shè)計(jì)或編程一或多個(gè)專用集成電路(ASIC)或可編程邏輯設(shè)備(PLD)來實(shí)現(xiàn)一個(gè)或多個(gè)框架部分。結(jié)論盡管本發(fā)明已經(jīng)用特定于結(jié)構(gòu)特征和方法行為的語言進(jìn)行了描述,但是可以理解由所附權(quán)利要求所限定的本發(fā)明并不局限于所述特定特征或行為。相反地,所述特定特征和行為僅僅是實(shí)現(xiàn)所要求保護(hù)的發(fā)明的示例性的形式。權(quán)利要求1.一種方法,包括接收一個(gè)將要設(shè)計(jì)的系統(tǒng)的描述;接收一個(gè)將要設(shè)計(jì)的環(huán)境的描述;以及在所述系統(tǒng)正在設(shè)計(jì)期間并且將要配置所述系統(tǒng)之前,利用這兩個(gè)所接收的描述相對(duì)于所述環(huán)境驗(yàn)證所述系統(tǒng)。2.如權(quán)利要求1中所述的方法,所述系統(tǒng)的描述包括一個(gè)SDM文檔。3.如權(quán)利要求1中所述的方法,所述環(huán)境的描述包括一個(gè)LIM文檔。4.如權(quán)利要求1中所述的方法,所述系統(tǒng)包括一個(gè)軟件應(yīng)用程序,并且所述環(huán)境包括一個(gè)數(shù)據(jù)中心。5.如權(quán)利要求1中所述的方法,所述環(huán)境包括一個(gè)在其中預(yù)期部署所述系統(tǒng)的環(huán)境。6.一種或多種計(jì)算機(jī)可讀媒體,其上存儲(chǔ)了多條指令,當(dāng)一個(gè)或多個(gè)處理器執(zhí)行該指令時(shí),能夠使所述一個(gè)或多個(gè)處理器在一或多個(gè)處理器運(yùn)行地程序設(shè)計(jì)過程中,訪問描述了系統(tǒng)的系統(tǒng)描述;以及利用所述系統(tǒng)描述,相對(duì)于一個(gè)模擬的環(huán)境驗(yàn)證所述系統(tǒng)。7.如權(quán)利要求6所述的一種或多種計(jì)算機(jī)可讀媒體,所述多條計(jì)算機(jī)指令進(jìn)一步使所述處理器從一個(gè)請(qǐng)求者那里接收一個(gè)驗(yàn)證所述系統(tǒng)的請(qǐng)求;以及向所述請(qǐng)求者返回所述驗(yàn)證的結(jié)果。8.如權(quán)利要求6所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器相對(duì)于所述模擬的環(huán)境驗(yàn)證所述系統(tǒng)的指令進(jìn)一步使所述一個(gè)或多個(gè)處理器從所述系統(tǒng)描述中選擇一個(gè)最高級(jí)定義;為一個(gè)實(shí)例空間,產(chǎn)生一個(gè)由最高級(jí)定義所描述的適當(dāng)?shù)膶?shí)例;選擇嵌套在所述最高級(jí)定義中的附加定義;根據(jù)所述選擇的定義是限定了一個(gè)對(duì)象還是一個(gè)關(guān)系,為所述實(shí)例空間,產(chǎn)生一個(gè)由附加定義所描述的適當(dāng)實(shí)例;以及繼續(xù)進(jìn)行所述附加定義的選擇以及如所述附加定義所描述的適當(dāng)實(shí)例產(chǎn)生,直到為所述實(shí)例空間產(chǎn)生了嵌套在所述最高級(jí)定義中的所有定義的實(shí)例為止。9.如權(quán)利要求6所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器相對(duì)于所述模擬的環(huán)境驗(yàn)證所述系統(tǒng)的指令進(jìn)一步使所述一個(gè)或多個(gè)處理器識(shí)別一個(gè)實(shí)例空間中的一個(gè)或多個(gè)信息流,所述實(shí)例空間描述了所述系統(tǒng);為一個(gè)或多個(gè)信息流中的至少一個(gè)信息流的每一個(gè)識(shí)別所述信息流的一個(gè)或多個(gè)輸入值,所述輸入值從所述實(shí)例空間中的其它實(shí)例中獲得;以及至少部分地根據(jù)所述輸入值,產(chǎn)生所述信息流的輸出值。10.如權(quán)利要求6所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器相對(duì)于所述模擬的環(huán)境驗(yàn)證所述系統(tǒng)的指令進(jìn)一步使所述一個(gè)或多個(gè)處理器識(shí)別一個(gè)實(shí)例空間中的一個(gè)或多個(gè)約束條件,所述實(shí)例空間描述了所述系統(tǒng);檢查是否滿足了所述一個(gè)或多個(gè)約束條件;以及對(duì)于所述一個(gè)或多個(gè)約束條件的每一個(gè),返回表示是否滿足所述約束條件的一個(gè)值。11.一種裝置,包括加載器,其被配置為加載一個(gè)或多個(gè)描述了一個(gè)系統(tǒng)的文檔,所述加載所述一個(gè)或多個(gè)文檔時(shí),所述系統(tǒng)正在被設(shè)計(jì);模擬器,其被配置為模擬了一個(gè)數(shù)據(jù)中心的環(huán)境,并且相對(duì)于所述環(huán)境驗(yàn)證所述系統(tǒng);以及所述裝置與所述數(shù)據(jù)中心相分離。12.如權(quán)利要求11所述的裝置,其進(jìn)一步包括擴(kuò)展引擎,其用于從所述一個(gè)或多個(gè)文檔中的其中之一中識(shí)別一個(gè)最高級(jí)定義,并且通過例示嵌套在所述作高級(jí)定義中的成員,擴(kuò)展所述最高級(jí)定義,來填充一個(gè)實(shí)例空間。13.如權(quán)利要求12所述的裝置,其進(jìn)一步包括信息流引擎,其用于識(shí)別所述實(shí)例空間中的信息流,識(shí)別輸入到所述信息流中的所述值,以及根據(jù)所述信息流的所述輸入,設(shè)置所述信息流的一個(gè)輸出。14.如權(quán)利要求13所述的裝置,其進(jìn)一步包括約束條件引擎,其用于識(shí)別和評(píng)估所述實(shí)例空間中的約束條件。15.一種或多種計(jì)算機(jī)可讀媒體,其上存儲(chǔ)了多個(gè)指令,當(dāng)一個(gè)或多個(gè)處理器執(zhí)行該指令時(shí),能夠使所述一個(gè)或多個(gè)處理器訪問一個(gè)描述了一個(gè)系統(tǒng)的文檔,所述系統(tǒng)被設(shè)計(jì)用于一個(gè)數(shù)據(jù)中心的環(huán)境中;從所述文檔中選擇一個(gè)最高級(jí)定義;為一個(gè)實(shí)例空間,產(chǎn)生一個(gè)由所述最高級(jí)定義所描述的適當(dāng)實(shí)例;選擇嵌套在所述最高級(jí)定義中的附加定義;根據(jù)所述選擇的定義限定的是一個(gè)對(duì)象還是一個(gè)關(guān)系,為所述實(shí)例空間,產(chǎn)生一個(gè)由所述附加定義所描述的適當(dāng)實(shí)例;以及繼續(xù)進(jìn)行所述附加定義的選擇以及如所述附加定義所描述的適當(dāng)實(shí)例的產(chǎn)生,直到為所述實(shí)例空間產(chǎn)生了嵌套在所述最高級(jí)定義中的所有定義的實(shí)例為止。16.如權(quán)利要求15所述的一種或多種計(jì)算機(jī)可讀媒體,其中當(dāng)所述選擇的定義限定了一個(gè)關(guān)系時(shí),使所述一個(gè)或多個(gè)處理器產(chǎn)生一個(gè)如所述附加定義描述的適當(dāng)實(shí)例的所述系統(tǒng)指令進(jìn)一步使所述一個(gè)或多個(gè)處理器根據(jù)包含在所定義的關(guān)系中的許多源實(shí)例和許多目標(biāo)實(shí)例,識(shí)別許多要?jiǎng)?chuàng)建的關(guān)系實(shí)例;創(chuàng)建所標(biāo)識(shí)的數(shù)量的關(guān)系實(shí)例;以及為每個(gè)所創(chuàng)建的關(guān)系實(shí)例,將源和目標(biāo)實(shí)例與所述關(guān)系實(shí)例相聯(lián)系。17.如權(quán)利要求16所述的一種或多種計(jì)算機(jī)可讀媒體,所述選擇的定義限定了一個(gè)包含關(guān)系,該包含關(guān)系描述了一個(gè)實(shí)例可以包含在另一個(gè)實(shí)例中。18.如權(quán)利要求16所述的一種或多種計(jì)算機(jī)可讀媒體,所述選擇的定義限定了一個(gè)通信關(guān)系,該通信關(guān)系描述了在獨(dú)立部署的軟件元素之間的交互關(guān)系。19.如權(quán)利要求16所述的一種或多種計(jì)算機(jī)可讀媒體,所述選擇的定義限定了一個(gè)引用關(guān)系,該引用關(guān)系用于捕獲實(shí)例間的從屬關(guān)系。20.如權(quán)利要求16所述的一種或多種計(jì)算機(jī)可讀媒體,所述選擇的定義限定了一個(gè)宿主關(guān)系,該宿主關(guān)系將一個(gè)主機(jī)和一個(gè)或多個(gè)其客機(jī)成員實(shí)例相聯(lián)系。21.如權(quán)利要求16所述的一種或多種計(jì)算機(jī)可讀媒體,所述選擇的定義限定了一個(gè)授權(quán)關(guān)系,該授權(quán)關(guān)系將兩個(gè)系統(tǒng)的通信端點(diǎn)相聯(lián)系。22.如權(quán)利要求15所述的一種或多種計(jì)算機(jī)可讀媒體,其中當(dāng)所述選擇的定義限定了一個(gè)關(guān)系時(shí),使所述一個(gè)或多個(gè)處理器產(chǎn)生一個(gè)如所述附加定義描述的適當(dāng)實(shí)例的所述系統(tǒng)指令進(jìn)一步使所述一個(gè)或多個(gè)處理器識(shí)別在所選擇的定義中標(biāo)識(shí)的所述對(duì)象的最小出現(xiàn)次數(shù);根據(jù)所標(biāo)識(shí)的最小出現(xiàn)次數(shù)和已經(jīng)產(chǎn)生了所選定義的多少個(gè)實(shí)例,識(shí)別要產(chǎn)生的所選定義的實(shí)例的數(shù)量;以及產(chǎn)生所識(shí)別數(shù)量的所選定義的實(shí)例。23.如權(quán)利要求15所述的一種或多種計(jì)算機(jī)可讀媒體,其中其中當(dāng)所述選擇的定義限定了一個(gè)對(duì)象時(shí),使所述一個(gè)或多個(gè)處理器產(chǎn)生一個(gè)如所述附加定義描述的適當(dāng)實(shí)例的所述系統(tǒng)指令進(jìn)一步使所述一個(gè)或多個(gè)處理器觸發(fā)一個(gè)事件,該事件允許一監(jiān)聽器創(chuàng)建由所述附加信息描述的所述適當(dāng)實(shí)例。24.如權(quán)利要求15所述的一種或多種計(jì)算機(jī)可讀媒體,其中中當(dāng)所述選擇的定義限定了一個(gè)關(guān)系時(shí),使所述一個(gè)或多個(gè)處理器產(chǎn)生一個(gè)如所述附加定義描述的適當(dāng)實(shí)例的所述系統(tǒng)指令進(jìn)一步使所述一個(gè)或多個(gè)處理器觸發(fā)一個(gè)事件,該事件允許一監(jiān)聽器創(chuàng)建由所述附加信息描述的所述適當(dāng)實(shí)例。25.如權(quán)利要求15所述的一種或多種計(jì)算機(jī)可讀媒體,其中在開始在所述數(shù)據(jù)中心中部署所述系統(tǒng)之前,執(zhí)行所述指令。26.一種或多種計(jì)算機(jī)可讀媒體,其上存儲(chǔ)了多條指令,當(dāng)一個(gè)或多個(gè)處理器執(zhí)行該指令時(shí),能夠使所述一個(gè)或多個(gè)處理器識(shí)別一個(gè)實(shí)例空間中的一個(gè)或多個(gè)信息流,所述實(shí)例空間描述了為了用于數(shù)據(jù)中心的環(huán)境中而設(shè)計(jì)的系統(tǒng);為一個(gè)或多個(gè)信息流中的至少一個(gè)信息流的每一個(gè)識(shí)別所述信息流的一個(gè)或多個(gè)輸入值,所述輸入值從所述實(shí)例空間中的其它實(shí)例中獲得;以及至少部分地根據(jù)所述輸入值,產(chǎn)生所述信息流的輸出值。27.如權(quán)利要求26所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器識(shí)別所述信息流的一個(gè)或多個(gè)輸入值的所述指令進(jìn)一步使所述一個(gè)或多個(gè)處理器識(shí)別是否已經(jīng)指定了輸入值;如果已經(jīng)指定了輸入值,那么從其它的實(shí)例中獲得所述輸入值;如果至少一個(gè)所述輸入值還沒有被指定,那么對(duì)于每一個(gè)還沒有被指定的所述輸入值識(shí)別設(shè)定所述輸入值的一個(gè)其它的信息流;識(shí)別所述其它信息流的一個(gè)或多個(gè)輸入值,所述輸入值從所述實(shí)例空間的其它實(shí)例中獲得;以及至少部分地根據(jù)所述輸入值,產(chǎn)生所述其它信息流的一個(gè)輸出值。28.如權(quán)利要求26所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器至少部分地根據(jù)所述輸入值產(chǎn)生所述其它信息流的所述輸出值的所述指令進(jìn)一步使所述一個(gè)或多個(gè)處理器識(shí)別與所述信息流相關(guān)的一組指令,所述指令可以被執(zhí)行以產(chǎn)生一個(gè)結(jié)果;執(zhí)行所識(shí)別的指令組;以及用所產(chǎn)生的結(jié)果作為所述信息流的所述輸出值。29.如權(quán)利要求26所述的一種或多種計(jì)算機(jī)可讀媒體,所述系統(tǒng)包括一個(gè)部署在所述環(huán)境中的應(yīng)用程序。30.如權(quán)利要求26所述的一種或多種計(jì)算機(jī)可讀媒體,所述環(huán)境包括一數(shù)據(jù)中心的一硬件描述。31.如權(quán)利要求26所述的一種或多種計(jì)算機(jī)可讀媒體,其中在開始在所述環(huán)境中部署所述系統(tǒng)之前,執(zhí)行所述指令。32.一種或多種計(jì)算機(jī)可讀媒體,其上存儲(chǔ)了多個(gè)指令,當(dāng)一個(gè)或多個(gè)處理器執(zhí)行該指令時(shí),能夠使所述一個(gè)或多個(gè)處理器識(shí)別一個(gè)實(shí)例空間中的一個(gè)或多個(gè)約束條件,所述實(shí)例空間描述了一個(gè)為用于一數(shù)據(jù)中心的環(huán)境中而設(shè)計(jì)的系統(tǒng);檢查是否滿足了所述一個(gè)或多個(gè)約束條件;以及對(duì)于所述一個(gè)或多個(gè)約束條件,返回表示所述約束條件是否滿足的一個(gè)值。33.如權(quán)利要求32所述的一種或多種計(jì)算機(jī)可讀媒體,所述一個(gè)或多個(gè)約束條件包括設(shè)定約束條件、關(guān)系約束條件以及對(duì)象約束條件。34.如權(quán)利要求32所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器檢查是否滿足所述一個(gè)或多個(gè)約束條件的所述指令進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一識(shí)別與所述信息流相關(guān)的一組指令,所述指令可以被執(zhí)行以產(chǎn)生一個(gè)結(jié)果;執(zhí)行所識(shí)別的指令組;以及用所產(chǎn)生的結(jié)果作為表示所述約束條件是否滿足的所述返回值。35.如權(quán)利要求32所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器檢查是否滿足所述一個(gè)或多個(gè)約束條件的所述指令進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一識(shí)別所述約束條件的目標(biāo)實(shí)例的角色和對(duì)象定義;檢查所述約束條件的所述角色和所述對(duì)象定義是否與所述目標(biāo)實(shí)例的角色和對(duì)象定義相匹配;以及根據(jù)所述約束條件的所述角色和所述對(duì)象定義是否與所述目標(biāo)實(shí)例的角色和對(duì)象定義相匹配,產(chǎn)生表示所述約束條件是否滿足的所述返回值。36.如權(quán)利要求35所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器檢查是否滿足所述一個(gè)或多個(gè)約束條件的所述指令進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一識(shí)別所述約束條件的所述目標(biāo)實(shí)例的第二角色和第二對(duì)象定義;檢查所述約束條件的所述第二角色和所述第二對(duì)象定義是否與所述目標(biāo)實(shí)例的所述角色和所述對(duì)象定義相匹配;以及根據(jù)所述約束條件的所述角色和所述對(duì)象定義是否與所述目標(biāo)實(shí)例的所述角色和所述對(duì)象定義以及所述目標(biāo)實(shí)例的所述第二角色和所述第二對(duì)象定義相匹配,產(chǎn)生表示所述約束條件是否滿足的所述返回值。37.如權(quán)利要求35所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器檢查是否滿足所述一個(gè)或多個(gè)約束條件的所述指令進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一評(píng)估所述目標(biāo)實(shí)例的一個(gè)或多個(gè)嵌套約束條件;接收所述嵌套約束條件的一個(gè)或多個(gè)返回值,所述一個(gè)或多個(gè)返回值表示所述一個(gè)或多個(gè)嵌套約束條件是否滿足;以及根據(jù)所述嵌套約束條件的所述一個(gè)或多個(gè)返回值,產(chǎn)生表示所述約束條件是否滿足的返回值。38.如權(quán)利要求32所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器為每個(gè)所述一個(gè)或多個(gè)約束條件返回一個(gè)表示所述約束條件是否滿足的值的所述指令,進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一如果將返回的值表示所述約束條件沒有滿足,那么檢查是否產(chǎn)生了所述約束條件的一個(gè)錯(cuò)誤消息;以及如果產(chǎn)生了所述錯(cuò)誤消息,那么產(chǎn)生包括標(biāo)識(shí)所述約束條件的信息的所述錯(cuò)誤消息。39.如權(quán)利要求32所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器檢查是否滿足所述一個(gè)或多個(gè)約束條件的所述指令進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一初始化一個(gè)匹配計(jì)數(shù)變量;識(shí)別所述約束條件的所述目標(biāo)實(shí)例參與的一個(gè)或多個(gè)關(guān)系實(shí)例;為所述一個(gè)或多個(gè)關(guān)系實(shí)例中的每一個(gè),評(píng)估所述關(guān)系實(shí)例是否滿足所述約束條件;對(duì)于滿足所述約束條件的所述一個(gè)或多個(gè)關(guān)系實(shí)例中的每一個(gè),增加所述匹配計(jì)數(shù)變量;以及根據(jù)評(píng)估了所述一個(gè)或多個(gè)關(guān)系實(shí)例后的所述匹配計(jì)數(shù)變量的值,產(chǎn)生表示所述約束條件是否滿足的返回值。40.如權(quán)利要求39所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器為每個(gè)所述一個(gè)或多個(gè)關(guān)系實(shí)例評(píng)估所述關(guān)系實(shí)例是否滿足所述約束條件所述指令,進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一檢查所述約束條件的一關(guān)系定義是否與所述關(guān)系實(shí)例的一關(guān)系定義相匹配;檢查所述約束條件的一指向是否與所述關(guān)系實(shí)例的一指向相匹配;檢查是否所述關(guān)系實(shí)例的所有的嵌套約束條件都滿足;以及如果所述約束條件的所述關(guān)系定義與所述關(guān)系實(shí)例的所述關(guān)系定義相匹配,所述約束條件的所述指向與所述關(guān)系實(shí)例的所述指向相匹配以及所述關(guān)系實(shí)例的所有的嵌套約束條件都滿足,那么就返回一個(gè)表示所述約束條件滿足的值。41.如權(quán)利要求39所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器為每個(gè)所述一個(gè)或多個(gè)關(guān)系實(shí)例評(píng)估所述關(guān)系實(shí)例是否滿足所述約束條件所述指令,進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一檢查所述約束條件的一目標(biāo)對(duì)象是否與所述關(guān)系實(shí)例的另一方實(shí)例相匹配;如果所述約束條件的所述關(guān)系定義與所述關(guān)系實(shí)例的所述關(guān)系定義相匹配,所述約束條件的所述指向與所述關(guān)系實(shí)例的所述指向相匹配,所述關(guān)系實(shí)例的所有的嵌套約束條件都滿足以及所述約束條件的所述目標(biāo)對(duì)象與所述關(guān)系實(shí)例的所述另一方實(shí)例相匹配,那么就返回一個(gè)表示所述約束條件滿足的值。42.如權(quán)利要求39所述的一種或多種計(jì)算機(jī)可讀媒體,其中使所述一個(gè)或多個(gè)處理器根據(jù)評(píng)估所述一個(gè)或多個(gè)關(guān)系實(shí)例后的所述匹配計(jì)數(shù)變量的值,產(chǎn)生表示所述約束條件是否滿足的所述返回值的所述指令,進(jìn)一步使所述一個(gè)或多個(gè)處理器為所述約束條件的其中之一檢查所述匹配計(jì)數(shù)變量是否至少是所述約束條件的一最小值并且不大于所述約束條件的一最大值;以及如果所述匹配計(jì)數(shù)變量至少是所述約束條件的所述最小值并且不大于所述約束條件的所述最大值,那么產(chǎn)生表示滿足所述約束條件的所述返回值,否則產(chǎn)生表示所述約束條件不滿足的返回值。43.如權(quán)利要求32所述的一種或多種計(jì)算機(jī)可讀媒體,其中在將所述系統(tǒng)配置到所述系統(tǒng)中之前,執(zhí)行所述指令。全文摘要根據(jù)系統(tǒng)設(shè)計(jì)期間的驗(yàn)證的一個(gè)某些的方面,要接收將被設(shè)計(jì)的系統(tǒng)的描述和環(huán)境的描述。這些描述都用于在設(shè)計(jì)系統(tǒng)時(shí)以及在配置系統(tǒng)之前對(duì)照環(huán)境來驗(yàn)證系統(tǒng)。文檔編號(hào)G06Q50/00GK1570860SQ200410032700公開日2005年1月26日申請(qǐng)日期2004年3月5日優(yōu)先權(quán)日2003年3月6日發(fā)明者G·奧斯萊德,K·格里利希,R·門辛,B·塔巴拉,R·V·維蘭德申請(qǐng)人:微軟公司