XML 資訊清單檔案格式

更新日期: 2014年9月

XML 資訊清單檔案會描述封裝的內容,並指定封裝的內容是如何對應至每個角色的目錄結構中。通常,其他角色也會需要為給定角色所部署的檔案。新封裝格式的單一資訊清單只可讓建立者包含重複的檔案一次,然後再以宣告方式描述如何將該檔案部署至多個角色。新的封裝格式簡化了封存結構,並且可讓封裝建立者最佳化跨角色或在角色內共用檔案的封存。這會造成比較小型的封裝,而可以更快速地部署至 Windows Azure。

依慣例,XML 資訊清單檔案的名稱是 package.xml。不過,只要關聯性是指向 XML 資訊清單檔案,並且 XML 資訊清單檔案符合結構描述,則 XML 資訊清單可以是封存中的任何檔案。

本主題會使用範例來描述 XML 資訊清單檔案的格式。若要檢視 XML 資訊清單檔案的結構描述,請參閱<XML 資訊清單檔案結構描述>。

基本的 XML 格式如下所示:

<?xml version="1.0" encoding="utf-8"?>
<PackageDefinition xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure">
  <PackageMetaData />
  <PackageContents />
  <PackageLayouts />
</PackageDefinition>

下面是 XML 資訊清單檔案的 XML 命名空間:

http://schemas.microsoft.com/windowsazure

XML 資訊清單包含三個區段。每個區段都是具名資源的集合,其中所有名稱都是使用“a/b/c…”語法的相對 URI。在判斷是否相等時,這些名稱有區分大小寫,並且應該要遵循一般 URI 的編碼和逸出慣例。本主題會依下面順序描述這三個區段:

PackageMetaData 集合是索引鍵值組的存放區,其中索引鍵是字串,而值也是字串。下面是 PackageMetaData 集合的範例:

<PackageMetaData>
  <KeyValuePair>
    <Key>http://schemas.microsoft.com/windowsazure/ProductVersion/</Key>
    <Value>1.7.30308.2000 </Value>
  </KeyValuePair>
</PackageMetaData>

用來將索引鍵和值編碼的 UTF-8 位元組的總和不能超過 1MB。包含超過 1 MB 中繼資料的封裝處理器可能會被任何封裝處理器拒絕。

爲了避免命名空間衝突,中繼資料索引鍵應該是 URI,而該 URI 遵循 XML 命名空間所使用的相同慣例。

PackageContents 集合會描述組成封裝的檔案。這包括檔案名稱、長度、選用的內容 sha256 雜湊,以及路徑。下面是 PackageContents 集合的範例:

<PackageContents>
  <ContentDefinition>
    <Name>Content/Example/WithoutHash</Name>
    <ContentDescription>
      <LengthInBytes>123</LengthInBytes>
      <IntegrityCheckHashAlgortihm>None</IntegrityCheckHashAlgortihm>
      <IntegrityCheckHash/>
      <DataStorePath>File00</DataStorePath>
    </ContentDescription>
  </ContentDefinition>
  <ContentDefinition>
    <Name>Content/Example/WithHash</Name>
    <ContentDescription>
      <LengthInBytes>123</LengthInBytes>
      <IntegrityCheckHashAlgortihm>Sha256</IntegrityCheckHashAlgortihm>          <IntegrityCheckHash>AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=</IntegrityCheckHash>
      <DataStorePath>File01</DataStorePath>
    </ContentDescription>
  </ContentDefinition>
</PackageContents>

內容項目是具名的位元組資料流,以及大小無限制的內容 Blob 資源。此位元組資料流可以選擇是否要有完整性檢查,以確認位元組得到適當的傳輸而沒有損毀。

IntegrityCheckHashAlgortihm 項目的有效值為 NoneSha256。如果指定了 None,則 IntegrityCheckHash 項目必須是空的項目。如果是 Sha256,則該字串應該是 Base-64 編碼的雜湊位元組。這個字串必須是 XSD 類型 xs:base64Binary

名稱是有區分大小寫的相對 URI。每個內容項目都有 DataStorePath 項目,這是一個相對 URI,會參考該項目之 OPC 封存中的位元組資料流。DataStorePath 的名稱可自行決定。為了確保 OPC 檔案可以在不同的檔案系統上輕鬆地解除封裝及重新封裝,OPC 項目名稱應該是 US-ASCII,並且應該是唯一的 (以不區分大小寫的方式比較時)。此外,您應該使用簡短的名稱,以避免檔案系統路徑限制。

PackageLayouts 集合會將內容資源對應至 Windows Azure VM 上的檔案和目錄的特定配置。檔案配置會包含建立及修改時間,以及相對路徑。該路徑應該要專用於給定的目標檔案系統。因為路徑的語法和作業系統有關,所以應該將它們視為不透明值。又因為配置只是對應的說明,所以配置的大小是與配置中的檔案數目成正比,而不是與內容的大小成正比。這表示封裝的作者在未來可能會包含替代的配置;例如包含一個以 Linux 為目標的配置,以及一個以 Windows 作業系統為目標的配置,然後建置與作業系統無關的封裝。不過,如果是 Windows Azure SDK 1.7,封裝就必須遵循 Windows 慣例。

PackageLayouts 集合會將封裝內容對應至 Windows Azure 虛擬機器上的檔案和目錄的特定配置。封裝配置具有名稱,並且一個封裝可以有數個不同的配置。每個配置都會描述如何將封裝內容項目的位元組資料流擷取至目標檔案系統上的檔案。每個配置都是一份唯一檔案路徑的清單,而這些檔案路徑都是使用目標檔案系統的命名慣例。封裝的作者可能會包含替代配置,並建置與作業系統無關的封裝。例如,封裝可能會包含一個以 Linux 為目標的配置,以及一個以 Windows 為目標的配置。此外,配置也會包含檔案中繼資料,例如 UTC 建立及修改時間和唯讀屬性。

下面的 PackageLayouts 集合範例中包含兩個配置,分別名為 fileCollection1fileCollection2。這兩個配置會從封裝資源 Content/Example/WithoutHashContent/Example/WithHash 來描述兩個檔案的建立。只不過,它們會將內容對應至不同的檔案名稱。在 fileCollection1 中,檔案名稱是唯一的 (組成字母都不一樣)。在 fileCollection2 中,名稱只是大小寫不同而已。這個範例示範了要如何將封裝格式設計成獨立無關的封裝,但建立檔案配置的封裝作者必須知道目標檔案系統的慣例。第二個檔案配置 (fileCollection2) 只能在檔案系統有區分大小寫的作業系統上加以擷取。特別要說明的是,以區分大小寫的方式比較時,編碼在 FilePath 引數中的字串會視為是不透明索引鍵。

<PackageLayouts>
    <LayoutDefinition>
      <Name>fileColletion1</Name>
      <LayoutDescription>
        <FileDefinition>
          <FilePath>Readme.txt</FilePath>
          <FileDescription>
            <DataContentReference>Content/Example/WithoutHash</DataContentReference>
            <CreatedTimeUtc>2012-02-01T01:16:33.9633733Z</CreatedTimeUtc>
            <ModifiedTimeUtc>2012-02-01T01:16:33.9643734Z</ModifiedTimeUtc>
            <ReadOnly>false</ReadOnly>
          </FileDescription>
        </FileDefinition>
        <FileDefinition>
          <FilePath>ReadmeToo.txt</FilePath>
          <FileDescription>
            <DataContentReference>Content/Example/WithHash</DataContentReference>
            <CreatedTimeUtc>2012-02-01T01:16:33.9643734Z</CreatedTimeUtc>
            <ModifiedTimeUtc>2012-02-01T01:16:33.9643734Z</ModifiedTimeUtc>
            <ReadOnly>false</ReadOnly>
          </FileDescription>
        </FileDefinition>
      </LayoutDescription>
    </LayoutDefinition>
    <LayoutDefinition>
      <Name>fileColletion2</Name>
      <LayoutDescription>
        <FileDefinition>
          <FilePath>README</FilePath>
          <FileDescription>
            <DataContentReference>Content/Example/WithoutHash</DataContentReference>
            <CreatedTimeUtc>2012-02-01T01:16:33.9643734Z</CreatedTimeUtc>
            <ModifiedTimeUtc>2012-02-01T01:16:33.9643734Z</ModifiedTimeUtc>
            <ReadOnly>false</ReadOnly>
          </FileDescription>
        </FileDefinition>
        <FileDefinition>
          <FilePath>Readme</FilePath>
          <FileDescription>
            <DataContentReference>Content/Example/WithHash</DataContentReference>
            <CreatedTimeUtc>2012-02-01T01:16:33.9643734Z</CreatedTimeUtc>
            <ModifiedTimeUtc>2012-02-01T01:16:33.9643734Z</ModifiedTimeUtc>
            <ReadOnly>false</ReadOnly>
          </FileDescription>
        </FileDefinition>
      </LayoutDescription>
    </LayoutDefinition>
  </PackageLayouts>

另請參閱

顯示: