建立自訂機密資訊類型

Office 365 中的資料外洩防護 (DLP) 已為您準備許多現成的機密資訊類型,方便您在 DLP 原則中使用。這類內建資料類型可協助識別及保護信用卡號、銀行帳戶號碼、護照號碼等資料。

但如果您需要識別及保護不同類型的機密資訊,像是採用組織專用格式的員工 ID,則可建立自訂的機密資訊類型。機密資訊類型是在稱為規則套件的 XML 檔案中定義。

本主題將向您介紹如何建立定義您專屬自訂機密資訊類型的 XML 檔。您必須知道如何建立規則運算式。為進行示範,這篇主題將建立可識別員工 ID 的自訂機密資訊類型。您可以使用此範例 XML 開始建立您專屬的 XML 檔。

您妥善建立 XML 檔後,即可使用 PowerShell 將檔案上傳至 Office 365。接著,您便可以開始在 DLP 原則中使用自訂的機密資訊類型,並測試是否能正常偵測機密資訊。

內容

範例規則套件 XML 檔

以下是我們即將在本主題中製作的範例規則套件 XML 檔。元素和屬性如下節所述。

<?xml version="1.0" encoding="UTF-16"?>
<RulePackage xmlns="http://schemas.microsoft.com/office/2011/mce">

<RulePack id="DAD86A92-AB18-43BB-AB35-96F7C594ADAA">
	<Version build="0" major="1" minor="0" revision="0"/>
	<Publisher id="619DD8C3-7B80-4998-A312-4DF0402BAC04"/>
	<Details defaultLangCode="en-us">
		<LocalizedDetails langcode="en-us">
			<PublisherName>Contoso</PublisherName>
			<Name>Employee ID Custom Rule Pack</Name>
			<Description>
			This rule package contains the custom Employee ID entity.
			</Description>
		</LocalizedDetails>
	</Details>
</RulePack>

<Rules>
<!-- Employee ID -->
	<Entity id="E1CC861E-3FE9-4A58-82DF-4BD259EAB378" patternsProximity="300" recommendedConfidence="70">
		<Pattern confidenceLevel="60">
			<IdMatch idRef="Regex_employee_id"/>
		</Pattern>
		<Pattern confidenceLevel="70">
			<IdMatch idRef="Regex_employee_id"/>
			<Match idRef="Func_us_date"/>
		</Pattern>
		<Pattern confidenceLevel="80">
			<IdMatch idRef="Regex_employee_id"/>
			<Match idRef="Func_us_date"/>
			<Any minMatches="1">
				<Match idRef="Keyword_badge" minCount=”2”/>
				<Match idRef="Keyword_employee"/>
			</Any>
			<Any maxMatches="0">
				<Match idRef="Keyword_false_positives_local"/>
				<Match idRef="Keyword_false_positives_intl"/>
			</Any>
		</Pattern>
	</Entity>

	<Regex id="Regex_employee_id">(\s)(\d{9})(\s)</Regex>
	<Keyword id="Keyword_employee">
		<Group matchStyle="word">
			<Term>Identification</Term>
			<Term>Contoso Employee</Term>
		</Group>
	</Keyword>
	<Keyword id="Keyword_badge">
		<Group matchStyle="string">
			<Term>card</Term>
			<Term>badge</Term>
			<Term caseSensitive="true">ID</Term>
		</Group>
	</Keyword>
	<Keyword id="Keyword_false_positives_local">
		<Group matchStyle="word">
			<Term>credit card</Term>
			<Term>national ID</Term>
		</Group>
	</Keyword>
	<Keyword id="Keyword_false_positives_intl">
		<Group matchStyle="word">
			<Term>identity card</Term>
			<Term>national ID</Term>
			<Term>EU debit card</Term>
		</Group>
	</Keyword>
	<LocalizedStrings>
		<Resource idRef="E1CC861E-3FE9-4A58-82DF-4BD259EAB378">
			<Name default="true" langcode="en-us">Employee ID</Name>
			<Description default="true" langcode="en-us">
			A custom classification for detecting Employee IDs.
			</Description>
			<Name default="true" langcode="de-de">Name for German locale</Name>
			<Description default="true" langcode="de-de">
			Description for German locale.
			</Description>
		</Resource>
	</LocalizedStrings>
</Rules>
</RulePackage>

您的關鍵需求為何?[Rule、Entity、Pattern 元素]

開始前,建議您先了解規則 XML 結構描述的基本結構,以及您可如何使用此結構定義自訂機密資訊類型,以便它識別正確的內容。

規則會定義一或多個實體 (機密資訊類型),而每個實體則可定義一或多個模式。當 DLP 評估電子郵件和文件這類內容時,它的方法是尋找模式

(詞彙小備註 - 如果您對於 DLP 原則非常熟悉,則您會知道原則包含一或多個規則,而規則是由條件和動作所構成的。不過,在本主題中,XML 標記使用了規則來表示定義實體 (也就是所謂的機密資訊類型) 的模式。因此在本主題中,當您看見規則時,請當做是實體或機密資訊類型,而非條件和動作)。

最簡單的案例:只有一個模式的實體

以下將介紹最簡單的案例。您想讓 DLP 原則識別含有貴組織員工 ID (採用九位數數字格式) 的內容。因此,模式指的是識別九位數數字的規則中所含的規則運算式。任何包含九位數數字的內容都符合此模式。

含有一個模式的項目圖表

不過,雖然這個模式很簡單,但也可能會出現誤判,像是比對出含有任何九位數數字,但不一定是員工 ID 的內容。

更常見的案例:有多個模式的實體

有鑑於此,使用一個以上模式來定義實體會更為常見,在這種情況下,除了實體 (九位數數字) 以外,模式還會識別支援辨識項 (像是關鍵字或日期)。

舉例來說,若要更順利地成功識別出含有員工 ID 的內容,除了識別九位數數字以外,您還可以定義另一個可以識別雇用日期的模式,以及另一個可識別雇用日期和關鍵字 (像是「員工 ID」) 的模式。

含有多個模式的項目圖表

請注意此結構的幾個重要面向:

  • 模式所需的辨識項越多,信賴等級就越高。之後您在 DLP 原則中使用此機密資訊類型時,便可以針對可信度較高的比對結果使用限制較嚴苛的動作 (像是封鎖內容);反之,您可以對可信度較低的比對結果使用限制較不嚴苛的比對結果,相當實用。

  • 支援的 IdMatch 和 Match 元素會參照是 Rule 元素實際子項目的 regex 和關鍵字,而非 Pattern 元素。這類支援元素會由 Pattern 參照,但包含在 Rule 中。這表示,如規則運算式或關鍵字清單等支援元素的某個定義,可以由多個實體或模式參照。

您需要識別什麼實體?[Entity 元素、id 屬性]

實體即機密資訊類型,例如信用卡號是具有明確定義的模式。每個實體都具有獨特的 GUID 做為 ID。

命名實體並產生專屬 GUID

新增 Rule 和 Entity 元素。接著新增含有您自訂實體名稱的備註,在本例中即為「員工 ID」。之後,您便可以在當地語言字串區段中新增實體名稱,該名稱會在您建立 DLP 原則時顯示在 UI 中。

接著產生實體的 GUID。有多種方式均可產生 GUID,較簡單的方法是在 PowerShell 中輸入 [guid]::NewGuid() 即可。接著,您也可以將實體 GUID 新增至當地語言字串區段中。

顯示 Rules 和 Entity 元素的 XML 標記

您想要比對什麼模式?[Pattern 元素、IdMatch 元素、Regex 元素]

模式包含機密資訊類型所需的項目清單,可能是 regex、關鍵字和內建函數 (這類函數可執行運作 regex 等任務,以尋找日期或地址)。機密資訊類型可能會有多個模式,而每個模式的可信度都不同。

所有下列模式的共通點便是,它們全參照相同的規則運算式,也就是尋找由空格 (\s)... (\s) 區隔的九位數數字 (\d{9})。此規則運算式由 IdMatch 元素參照,這是所有尋找員工 ID 實體之模式的共同需求。IdMatch 是模式嘗試比對的識別碼,如員工 ID、信用卡號或社會安全號碼。Pattern 元素必須確實要有一個 IdMatch 元素。

顯示參照單一 Regex 元素之多個 Pattern 元素的 XML 標記

當條件獲得滿足時,模式會傳回計數和信賴等級,以便您用於 DLP 原則中的條件。當您在 DLP 原則中新增要用於偵測機密資訊類型的條件時,您可以編輯計數和信賴等級,如下所示。我們會在本主題後段說明信賴等級 (又稱為比對精確度)。

執行個體計數和比對精確度選項

當您建立規則運算式時,請留意需注意的潛在問題。舉例來說,如果您撰寫並上傳可識別過多內容的 regex,便可能會影響到效能。若要深入了解這類潛在問題,請參閱之後的需注意的潛在驗證問題章節。

您是否需要其他辨識項?[Match 元素、minCount 屬性]

除了 IdMatch 以外,模式可以使用 Match 元素來要求額外的支援辨識項,如關鍵字、regex、日期或地址。

Pattern 可以包含多個 Match 元素;它們可能會直接加入 Pattern 元素中,或是以 Any 元素合併。Match 元素會以隱含的 AND 運算子合併;所有 Match 元素都必須先獲得滿足,模式才能獲得滿足。您可以使用 Any 元素來使用 AND 或 OR 運算子 (之後的章節會說明)。

您可以使用選擇性的 minCount 屬性來指定每個 Match 元素要尋找的比對例項數目。比方說,您可以指定只有當找到關鍵字清單中的最少兩個關鍵字時,模式才能算是獲得滿足。

顯示 Match 元素和 minOccurs 屬性的 XML 標記

關鍵字 [Keyword、Group 和 Term 元素,matchStyle 和 caseSensitive 屬性]

當您識別員工 ID 等機密資訊時,您通常會想要要求關鍵字做為確切辨識項。例如,除了比對九位數數字以外,您可能也會想要一併尋找「card」、「badge」或「ID」等字。若要這麼做,請使用 Keyword 元素。Keyword 元素具備 id 屬性,可由多個模式或實體中的 Match 元素參照。

關鍵字會在 Group 元素中做為 Term 元素清單納入。Group 元素的 matchStyle 屬性有兩種可能的值:

  • matchStyle=”word” Word 比對結果會識別以空格或其他分隔符號區隔的整個字詞。除非您要比對的是部分字詞或亞洲語言字詞,否則應一律使用 word。

  • matchStyle=”string” string 比對結果會識別所有字串,不限區隔這些字串的項目。舉例來說,「id」即會比對「bid」和「idea」。建議只有當您需要比對亞洲語言字詞,或是您的關鍵字有部分是由其他字詞所構成時,才使用 string。

最後,您可以使用 Term 元素的 caseSensitive 屬性來指定內容必須完全符合關鍵字,包括大小寫格式在內。

顯示參照關鍵字之 Match 元素的 XML 標記

規則運算式 [Regex 元素]

在本例中,員工 ID 實體已使用 IdMatch 元素為模式參照 Regex,即以空格區隔的九位數數字。此外,模式也可以使用 Match 元素來參照其他 Regex 元素,藉此識別確切辨識項,如美國郵遞區號格式的五位或九位數數字。

其他模式,如日期或地址 [內建函數]

除了內建機密資訊類型外,DLP 也包含了可識別確切識別項的內建函數,如美式日期、歐盟日期、有效日期或美國地址。DLP 不支援上傳您自己的自訂函數,但當您建立自訂機密資訊類型時,您的實體可參照內建函數。

舉例來說,員工 ID 徽章中具有雇用日期,因此此自訂實體可使用內建函數 Func_us_date 來識別常見的美式日期。

如需詳細資訊,請參閱 DLP 功所能尋找的項目

顯示參照內建函數之 Match 元素的 XML 標記

不同的辨識項組合 [Any 元素、minMatches 和 maxMatches 屬性]

在 Pattern 元素中,所有 IdMatch 和 Match 元素都是以隱含的 AND 運算子合併;也就是所有比對結果都必須先獲得滿足,模式才能獲得滿足。不過,您可以使用 Any 元素將 Match 元素進行分組,藉此建立更有彈性的比對邏輯。例如,您可以使用 Any 元素來完全比對、排除比對或是部分比對子 Match 元素。

Any 元素具備選擇性的 minMatches 和 maxMatches 屬性,以便您用於定義在模式獲得滿足前,需先行滿足的子 Match 元素數目。請注意,這類屬性會定義必須獲得滿足的 Match 元素數目,而非針對比對結果找到的辨識項例項數目。若要定義特定比對結果的最低例項數目,像是必須比對清單中的兩個關鍵字,則請為 Match 元素使用 minCount 屬性 (請見前文說明)。

比對至少一個子 Match 元素

如果您只想要求滿足最低 Match 元素數目,您可以使用 minMatches 屬性。事實上,這類 Match 元素會以隱含的 OR 運算子合併。只要找到清單中的美式日期或關鍵字,即可滿足此 Any 元素。

顯示 Any 元素與 minMatches 屬性的 XML 標記

比對任一子 Match 元素的精確子集

如果您想要比對特定數目的 Match 元素,您可以將 minMatches 和 maxMatches 設為同樣的值。此 Any 元素只會在確實找到一個日期或關鍵字時獲得滿足;超過這個數字,模式便不會比對成功。

顯示 Any 元素與 minMatches 和 maxMatches 屬性的 XML 標記

排除子 Match 元素

如果您想要將模式的比對目標設為排除特定辨識項,則可將 maxMatches 設為 0。如果您擁有很可能代表誤判的關鍵字清單或其他辨識項時,這麼做便非常實用。

舉例來說,員工 ID 實體會尋找關鍵字「card」,因為「card」可能表示「ID card」。不過,如果 card 只出現在「credit card」片語中時,此內容中的「card」便不太可能是「ID card」。因此,您可以將「credit card」做為比對模式時排除字詞清單中的關鍵字。

顯示零 maxMatches 屬性值的 XML 標記

其他辨識項必須與實體多接近?[patternsProximity 屬性]

您的機密資訊類型會尋找代表員工 ID 的模式,而在模式中,系統也會尋找確切辨識項,如 ID 等關鍵字。當辨識項越接近、就越有可能是實際員工 ID 模式的邏輯非常合理。您可以決定模式中的其他辨識項需距離實體多接近,方法是使用必要 Entity 元素的 patternsProximity 屬性。

XML 標記顯示 patternsProximity 屬性

對實體中的每個模式來說,patternsProximity 屬性值可以定義所有其他針對該模式所指定的 Match 與 IdMatch 位置相隔的距離 (以 Unicode 字元形式)。鄰近區段會以 IdMatch 的位置定位,且區段會延展到 IdMatch 的左右兩側。

鄰近區段的圖表

以下示範鄰近區段如何影響模式比對,並以員工 ID 自訂實體的 IdMatch 元素必須至少要有一個關鍵字或日期的確切比對結果為例。只有 ID1 會成功比對,因為在鄰近區段中都找不到 ID2 和 ID3,或是只找到部分確切辨識項。

確切辨識項和鄰近區段的圖表

請注意,若是電子郵件,則郵件內文和每個附件都會視為是不同的項目來處理。這表示鄰近區段不會延伸超過這些項目的個別範圍。就每個項目 (也就是附件或內文) 而言,idMatch 和確切辨識項都需要同時存在於該項目中。

不同模式的合適信賴等級為何?[confidenceLevel 屬性、recommendedConfidence 屬性]

模式需要的辨識項越多,則您對於成功比對模式後所識別出的實際實體 (例如員工 ID) 可信度也就越高。舉例來說,比起只需在模式中比對九位數 ID 號碼,您對於需要在鄰近區段中比對出九位數 ID 數字、雇用日期和關鍵字的模式,會更有把握。

Pattern 元素有必要的 confidenceLevel 屬性。您可以為實體中的每個模式設定 confidenceLevel (介於 1 和 100 的整數) 的值做為不重複 ID;換句話說,您為實體中各個模式所指定信賴等級必須不同。整數的精確值並不是關鍵,您只要依據貴公司合規性小組的標準挑選適當的數字即可。當您上傳自訂機密資訊類型,然後建立 DLP 原則後,您便可以在您建立的規則條件中參照這些信賴等級。

顯示 Pattern 元素和多個 confidenceLevel 屬性值的 XML 標記

除了每個 Pattern 的 confidenceLevel 以外,Entity 還具有 recommendedConfidence 屬性。建議的信賴屬性可視為規則的預設信賴等級使用。當您在 DLP 原則中建立規則時,若您不針對要使用的規則指定信賴等級,則該規則會根據實體的建議信賴等級來比對。

您想要在安全性與合規性中心的 UI 中支援其他語言嗎?[LocalizedStrings 元素]

如果貴公司的合規性小組是使用 Office 365 安全性與合規性中心,在不同的地區使用不同的語言來建立 DLP 原則,則您可以提供自訂機密資訊類型的當地語言版本名稱和敘述。當貴公司的合規性小組以您的支援語言使用 Office 365 時,即可在 UI 中看到以當地語言顯示的名稱。

執行個體計數和比對精確度選項

Rule 元素必須包含 LocalizedStrings 元素,該元素包含了可參照您自訂實體 GUID 的 Resource 元素。接著,每個 Resource 元素會包含一或多個 Name 和 Description 元素,這些元素會根據 langcode 屬性為特定語言提供翻譯字串。

顯示 LocalizedStrings 元素內容的 XML 標記

請注意,您只能針對自訂機密資訊類型在安全性與合規性中心 UI 顯示的方式使用當地語言字串。您無法使用當地語言字串提供關鍵字清單或規則運算式的不同翻譯版本。

其他規則套件標記 [RulePack GUID]

最後,每個 RulePackage 的開頭都包含您需填入的部分一般資訊。您可以使用下列標記做為範本,並以您自己的資訊取代「. . .」的預留位置。

最重要的是,您需產生 RulePack 的 GUID。在前文中,您已產生了實體的 GUID,而此處指的是 RulePack 的另一個 GUID。有多種方式均可產生 GUID,較簡單的方法是在 PowerShell 中輸入 [guid]::NewGuid() 即可。

Version 元素也相當重要。當您初次上傳規則套件時,Office 365 會註記版本編號。之後,如果您更新規則套件,並上傳了新版本,請務必一併更新版本編號,否則 Office 365 不會部署此規則套件。

<?xml version="1.0" encoding="utf-16"?>
<RulePackage xmlns="http://schemas.microsoft.com/office/2011/mce">
  <RulePack id=". . .">
    <Version major="1" minor="0" build="0" revision="0" />
    <Publisher id=". . ." /> 
    <Details defaultLangCode=". . .">
      <LocalizedDetails langcode=" . . . ">
         <PublisherName>. . .</PublisherName>
         <Name>. . .</Name>
         <Description>. . .</Description>
      </LocalizedDetails>
    </Details>
  </RulePack>
  
 <Rules>

	. . .

 </Rules>
</RulePackage>

完成時,您的 RulePack 看起來應該像這個樣子:

顯示 RulePack 元素的 XML 標記

Exchange Online 的變更

以前您可能使用 Exchange Online PowerShell 來為 DLP 匯入您的自訂機密資訊類型。現在您的自訂機密資訊類型可在 Exchange 系統管理中心和安全性與合規性中心使用。自這項改善起,您應使用安全性與合規性中心 PowerShell 來匯入您的自訂機密資訊類型 – 您再也無法從 Exchange PowerShell 匯入它們。自訂機密資訊類型將繼續以與過去相同的方式運作,不過,要讓安全性與合規性中心的自訂機密資訊類型的變更顯示在 Exchange 系統管理中心,最多可能需要一個小時。

請注意,在安全性與合規性中心,您使用 DlpSensitiveInformationTypeRulePackage Cmdlet 來上傳規則套件。以前在 Exchange 系統管理中心,您使用 ClassificationRuleCollection Cmdlet。

上傳規則套件

若要上傳您的規則套件,請進行以下步驟。

  1. 以 Unicode 編碼將套件儲存為 .xml 檔。

  2. 使用遠端 PowerShell 連線至 Office 365 安全性與合規性中心

  3. 在安全性與合規性中心 PowerShell 中,輸入 New-DlpSensitiveInformationTypeRulePackage -FileData (Get-Content -Path "C:\custompath\MyNewRulePack.xml" -Encoding Byte)

    請務必確認您使用的檔案位置是規則套件儲存的實際位置。C:\custompath\ 是預留位置。

  4. 若要確認,請輸入 Y,然後按 ENTER。

  5. 輸入 Get-DlpSensitiveInformationType 就能查看所有機密類型清單,藉此驗證您的新機密資訊類型已成功上傳。您可以查看 Publisher 欄,藉此快速區隔自訂和內建的機密資訊類型。您可以篩選清單中的特定機密資訊類型,方法是執行 Get-DlpSensitiveInformationType -Identity “name of sensitive information type”

需注意的潛在驗證問題

當您上傳規則套件 XML 檔時,系統會驗證 XML 並檢查已知的錯誤模式和明顯的效能問題。以下是驗證為規則運算式進行檢查的部分已知問題:

  • 不得以垂直線 "|" 開頭或結尾,它會比對所有項目,因此會視為是空白比對結果。

    例如,"|a" 或 "b|" 不會通過驗證。

  • 不得以 ".{0,m}" 模式開頭或結尾,它沒有可進行的目的,只能修復效能。

    例如,"{0,50}ASDF" 或 "ASDF.{0,50}" 將不會通過驗證。

  • 群組中不得有 ".{0,m}" 或 ".{1,m}",也不得有 ".*" 或 ".+"。

    例如,"(.{0,50000})" 不會通過驗證。

  • 群組中不得有含有 "{0,m}" 或 "{1,m}" 重複項的任何字元。

    例如,"(a*)" 不會通過驗證。

  • 不得以 ".{1,m}" 開頭或結尾;請改用 "."。

    例如,".{1,m}asdf" 不會通過驗證,請改用 ".asdf"。

  • 群組中不得有未綁定的重複項 (例如 "*" 或 "+")。

    例如,"(xx)*" 或 "(xx)+" 不會通過驗證。

如果自訂機密資訊類型含有可能影響效能的問題,就無法順利上傳,且您可能會看見下列其中一個錯誤訊息:

  • 一般運算符可比對出比預期更多的內容 (例如 '+'、'*')

  • 查詢斷定

  • 搭配使用複雜群組與一般運算符

重新編目內容以識別機密資訊

DLP 會使用搜尋檢索器識別及分類網站內容中的機密資訊。每次上傳 SharePoint Online 和商務用 OneDrive 網站中的內容時,系統即會自動重新編目。但是,為了要在所有現有內容中識別您的新機密資訊自訂類型,該內容必須重新編目。

在 Office 365 中,您不得手動要求重新編目整個租用戶的內容,但您可以針對網站集合、清單或文件庫這麼做;請參閱針對網站、文件庫或清單手動要求編目和重新建立索引

移除自訂機密資訊類型

  1. 使用遠端 PowerShell 連線至 Office 365 安全性與合規性中心

  2. 在安全性與合規性中心 PowerShell 中執行下列其中一項操作:

    • 若要移除整個規則套件和套件中所包含的所有實體

      輸入 Remove-DlpSensitiveInformationTypeRulePackage "NameOfYourRulePack" – 若是上述的範例 XML,則您應輸入 Remove-DlpSensitiveInformationTypeRulePackage "Employee ID Custom Rule Pack"

      請注意,若要識別您的規則套件,您可以使用 <Rule Pack> 元素中的 <Name> 元素 (不限語言),或是 RulePack 元素的 id 屬性 GUID。

    • 若要移除規則套件中的單一項目

      您必須在新版規則套件中移除該特定實體,再使用 Set-DlpSensitiveInformationTypeRulePackage 上傳該套件。移除前,您必須確認任何 DLP 原則或 Exchange 傳輸規則都不再需要參照該機密資訊類型。

  3. 若要確認,請輸入 Y,然後按 ENTER。

  4. 輸入 Get- DlpSensitiveInformationType,藉此驗證您的新規則已順利移除,不會再顯示您機密資訊類型的名稱。

參考:規則套件 XML 結構描述定義

您可以複製此標記、將其儲存為 XSD 檔,然後用它來驗證您的規則套件 XML 檔。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:mce="http://schemas.microsoft.com/office/2011/mce"
           targetNamespace="http://schemas.microsoft.com/office/2011/mce" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           id="RulePackageSchema">
  <!-- Use include if this schema has the same target namespace as the schema being referenced, otherwise use import -->
  <xs:element name="RulePackage" type="mce:RulePackageType"/>
  <xs:simpleType name="LangType">
    <xs:union memberTypes="xs:language">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value=""/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
  <xs:simpleType name="GuidType" final="#all">
    <xs:restriction base="xs:token">
      <xs:pattern value="[0-9a-fA-F]{8}\-([0-9a-fA-F]{4}\-){3}[0-9a-fA-F]{12}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="RulePackageType">
    <xs:sequence>
      <xs:element name="RulePack" type="mce:RulePackType"/>
      <xs:element name="Rules" type="mce:RulesType">
        <xs:key name="UniqueRuleId">
          <xs:selector xpath="mce:Entity|mce:Affinity|mce:Version/mce:Entity|mce:Version/mce:Affinity"/>
          <xs:field xpath="@id"/>
        </xs:key>
        <xs:key name="UniqueProcessorId">
          <xs:selector xpath="mce:Regex|mce:Keyword|mce:Fingerprint"></xs:selector>
          <xs:field xpath="@id"/>
        </xs:key>
        <xs:key name="UniqueResourceIdRef">
          <xs:selector xpath="mce:LocalizedStrings/mce:Resource"/>
          <xs:field xpath="@idRef"/>
        </xs:key>        
        <xs:keyref name="ReferencedRuleMustExist" refer="mce:UniqueRuleId">
          <xs:selector xpath="mce:LocalizedStrings/mce:Resource"/>
          <xs:field xpath="@idRef"/>
        </xs:keyref>
        <xs:keyref name="RuleMustHaveResource" refer="mce:UniqueResourceIdRef">
          <xs:selector xpath="mce:Entity|mce:Affinity|mce:Version/mce:Entity|mce:Version/mce:Affinity"/>
          <xs:field xpath="@id"/>
        </xs:keyref>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="RulePackType">
    <xs:sequence>
      <xs:element name="Version" type="mce:VersionType"/>
      <xs:element name="Publisher" type="mce:PublisherType"/>
      <xs:element name="Details" type="mce:DetailsType">
        <xs:key name="UniqueLangCodeInLocalizedDetails">
          <xs:selector xpath="mce:LocalizedDetails"/>
          <xs:field xpath="@langcode"/>
        </xs:key>
        <xs:keyref name="DefaultLangCodeMustExist" refer="mce:UniqueLangCodeInLocalizedDetails">
          <xs:selector xpath="."/>
          <xs:field xpath="@defaultLangCode"/>
        </xs:keyref>
      </xs:element>
      <xs:element name="Encryption" type="mce:EncryptionType" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="id" type="mce:GuidType" use="required"/>
  </xs:complexType>
  <xs:complexType name="VersionType">
    <xs:attribute name="major" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="minor" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="build" type="xs:unsignedShort" use="required"/>
    <xs:attribute name="revision" type="xs:unsignedShort" use="required"/>
  </xs:complexType>
  <xs:complexType name="PublisherType">
    <xs:attribute name="id" type="mce:GuidType" use="required"/>
  </xs:complexType>
  <xs:complexType name="LocalizedDetailsType">
    <xs:sequence>
      <xs:element name="PublisherName" type="mce:NameType"/>
      <xs:element name="Name" type="mce:RulePackNameType"/>
      <xs:element name="Description" type="mce:OptionalNameType"/>
    </xs:sequence>
    <xs:attribute name="langcode" type="mce:LangType" use="required"/>
  </xs:complexType>
  <xs:complexType name="DetailsType">
    <xs:sequence>
      <xs:element name="LocalizedDetails" type="mce:LocalizedDetailsType" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="defaultLangCode" type="mce:LangType" use="required"/>
  </xs:complexType>
  <xs:complexType name="EncryptionType">
    <xs:sequence>
      <xs:element name="Key" type="xs:normalizedString"/>
      <xs:element name="IV" type="xs:normalizedString"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="RulePackNameType">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="64"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NameType">
    <xs:restriction base="xs:normalizedString">
      <xs:minLength value="1"/>
      <xs:maxLength value="256"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OptionalNameType">
    <xs:restriction base="xs:normalizedString">
      <xs:minLength value="0"/>
      <xs:maxLength value="256"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RestrictedTermType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="RulesType">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="Entity" type="mce:EntityType"/>
        <xs:element name="Affinity" type="mce:AffinityType"/>
        <xs:element name="Version" type="mce:VersionedRuleType"/>
      </xs:choice>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Regex" type="mce:RegexType"/>
        <xs:element name="Keyword" type="mce:KeywordType"/>
        <xs:element name="Fingerprint" type="mce:FingerprintType"/>
        <xs:element name="ExtendedKeyword" type="mce:ExtendedKeywordType"/>
      </xs:choice>
      <xs:element name="LocalizedStrings" type="mce:LocalizedStringsType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="EntityType">
    <xs:sequence>
      <xs:element name="Pattern" type="mce:PatternType" maxOccurs="unbounded"/>
      <xs:element name="Version" type="mce:VersionedPatternType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="id" type="mce:GuidType" use="required"/>
    <xs:attribute name="patternsProximity" type="mce:ProximityType" use="required"/>
    <xs:attribute name="recommendedConfidence" type="mce:ProbabilityType"/>
    <xs:attribute name="workload" type="mce:WorkloadType"/>
  </xs:complexType>
  <xs:complexType name="PatternType">
    <xs:sequence>
      <xs:element name="IdMatch" type="mce:IdMatchType"/>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Match" type="mce:MatchType"/>
        <xs:element name="Any" type="mce:AnyType"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="confidenceLevel" type="mce:ProbabilityType" use="required"/>
  </xs:complexType>
  <xs:complexType name="AffinityType">
    <xs:sequence>
      <xs:element name="Evidence" type="mce:EvidenceType" maxOccurs="unbounded"/>
      <xs:element name="Version" type="mce:VersionedEvidenceType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="id" type="mce:GuidType" use="required"/>
    <xs:attribute name="evidencesProximity" type="mce:ProximityType" use="required"/>
    <xs:attribute name="thresholdConfidenceLevel" type="mce:ProbabilityType" use="required"/>
    <xs:attribute name="workload" type="mce:WorkloadType"/>
  </xs:complexType>
  <xs:complexType name="EvidenceType">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="Match" type="mce:MatchType"/>
        <xs:element name="Any" type="mce:AnyType"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="confidenceLevel" type="mce:ProbabilityType" use="required"/>
  </xs:complexType>
  <xs:complexType name="IdMatchType">
    <xs:attribute name="idRef" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="MatchType">
    <xs:attribute name="idRef" type="xs:string" use="required"/>
    <xs:attribute name="minCount" type="xs:positiveInteger" use="optional"/>
    <xs:attribute name="uniqueResults" type="xs:boolean" use="optional"/>
  </xs:complexType>
  <xs:complexType name="AnyType">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="Match" type="mce:MatchType"/>
        <xs:element name="Any" type="mce:AnyType"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="minMatches" type="xs:nonNegativeInteger" default="1"/>
    <xs:attribute name="maxMatches" type="xs:nonNegativeInteger" use="optional"/>
  </xs:complexType>
  <xs:simpleType name="ProximityType">
    <xs:union>
      <xs:simpleType>
        <xs:restriction base='xs:string'>
          <xs:enumeration value="unlimited"/>
        </xs:restriction>
      </xs:simpleType>
      <xs:simpleType>
        <xs:restriction base="xs:positiveInteger">
          <xs:minInclusive value="1"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
  <xs:simpleType name="ProbabilityType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="WorkloadType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Exchange"/>
      <xs:enumeration value="Outlook"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="EngineVersionType">
    <xs:restriction base="xs:token">
      <xs:pattern value="^\d{2}\.01?\.\d{3,4}\.\d{1,3}$"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="VersionedRuleType">
    <xs:choice maxOccurs="unbounded">
      <xs:element name="Entity" type="mce:EntityType"/>
      <xs:element name="Affinity" type="mce:AffinityType"/>
    </xs:choice>
    <xs:attribute name="minEngineVersion" type="mce:EngineVersionType" use="required" />
  </xs:complexType>
  <xs:complexType name="VersionedPatternType">
    <xs:sequence>
      <xs:element name="Pattern" type="mce:PatternType" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="minEngineVersion" type="mce:EngineVersionType" use="required" />
  </xs:complexType>
  <xs:complexType name="VersionedEvidenceType">
    <xs:sequence>
      <xs:element name="Evidence" type="mce:EvidenceType" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="minEngineVersion" type="mce:EngineVersionType" use="required" />
  </xs:complexType>
  <xs:simpleType name="FingerprintValueType">
    <xs:restriction base="xs:string">
      <xs:minLength value="2732"/>
      <xs:maxLength value="2732"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="FingerprintType">
    <xs:simpleContent>
      <xs:extension base="mce:FingerprintValueType">
        <xs:attribute name="id" type="xs:token" use="required"/>
        <xs:attribute name="threshold" type="mce:ProbabilityType" use="required"/>
        <xs:attribute name="shingleCount" type="xs:positiveInteger" use="required"/>
        <xs:attribute name="description" type="xs:string" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="RegexType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="id" type="xs:token" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="KeywordType">
    <xs:sequence>
      <xs:element name="Group" type="mce:GroupType" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:token" use="required"/>
  </xs:complexType>
  <xs:complexType name="GroupType">
    <xs:sequence>
      <xs:choice>
        <xs:element name="Term" type="mce:TermType" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="matchStyle" default="word">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="word"/>
          <xs:enumeration value="string"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="TermType">
    <xs:simpleContent>
      <xs:extension base="mce:RestrictedTermType">
        <xs:attribute name="caseSensitive" type="xs:boolean" default="false"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="ExtendedKeywordType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="id" type="xs:token" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="LocalizedStringsType">
    <xs:sequence>
      <xs:element name="Resource" type="mce:ResourceType" maxOccurs="unbounded">
      <xs:key name="UniqueLangCodeUsedInNamePerResource">
        <xs:selector xpath="mce:Name"/>
        <xs:field xpath="@langcode"/>
      </xs:key>
      <xs:key name="UniqueLangCodeUsedInDescriptionPerResource">
        <xs:selector xpath="mce:Description"/>
        <xs:field xpath="@langcode"/>
      </xs:key>
    </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ResourceType">
    <xs:sequence>
      <xs:element name="Name" type="mce:ResourceNameType" maxOccurs="unbounded"/>
      <xs:element name="Description" type="mce:DescriptionType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="idRef" type="mce:GuidType" use="required"/>
  </xs:complexType>
  <xs:complexType name="ResourceNameType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="default" type="xs:boolean" default="false"/>
        <xs:attribute name="langcode" type="mce:LangType" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="DescriptionType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="default" type="xs:boolean" default="false"/>
        <xs:attribute name="langcode" type="mce:LangType" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>

其他資訊

擴展您的技能
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×