共用方式為


延伸本體

本文使用智慧建築的 DTDL 型 RealEstateCore 本體,作為使用新 DTDL 屬性擴充本體的範例基礎。 不過,這裡所述是通用技術,而且可以透過與任何 Azure Digital Twins 相容之 DTDL 功能 (屬性、關聯性、元件) 套用至 DTDL 型本體的任何部分。

Microsoft 業界標準的本體 (例如 DTDL 型 RealEstateCore 本體) 是開始建置 IoT 解決方案的絕佳方式。 產業本體提供一組專為您網域所設計的豐富基底介面,經過工程設計後,可在 Azure IoT 服務 (例如 Azure Digital Twins) 中現成運作。

不過,您的解決方案可能會有產業本體未涵蓋的特定需求。 例如,您可能會想要將數位對應項連結到儲存在個別系統中的 3D 模型。 在此情況下,您可以擴充其中一個本體來新增自己的功能,同時保留原始本體的所有優點

RealEstateCore 空間階層

在 DTDL 型 RealEstateCore 本體中,空間階層會用來定義各種空間:房間、建築物、區域等等。 階層會從這每個模型中延伸,以定義各種房間、建築物和區域。

階層的一部分如下圖所示。

Diagram showing part of the RealEstateCore space hierarchy. It shows elements for Space, Room, ConferenceRoom, and Office.

如需有關 RealEstateCore 本體的詳細資訊,請在 GitHub 上參閱智慧建築物的數位對應項定義語言型 RealEstateCore 本體

擴充 RealEstateCore 空間階層

有時候您的解決方案會有產業本體未涵蓋的特定需求。 在此情況下,擴充階層可讓您繼續使用產業本體,同時針對您的需求進行自訂。

在本文中,我們將討論兩個擴充本體階層很有用的不同案例:

  • 為不在產業本體中的概念新增介面。
  • 將額外的屬性、關聯性或元件新增至現有的介面。

為新概念新增介面

在此案例中,您可以為解決方案所需但不在產業本體中的概念新增介面。 例如,如果您的解決方案有其他類型的房間,但未在 DTDL 型 RealEstateCore 本體中表示,則您可以直接從 RealEstateCore 介面進行擴充來進行新增。

下列範例呈現需要顯示「焦點會議室」的解決方案,而使會議室不存在於 RealEstateCore 本體中。 焦點會議室是一個小型空間,其設計訴求是讓人們一次專注於一個工作達數小時。

若要使用此新概念來擴充產業本體,請建立從產業本體中介面延伸的新介面。

新增焦點會議室介面之後,擴充階層會顯示新的房間類型。

Diagram showing part of the RealEstateCore space hierarchy, including a new addition of Focus Room.

將額外的功能新增至現有介面

在此案例中,您可以將更多屬性、關聯性或元件新增至產業本體中的介面。

在本節中,您會看到兩個範例:

  • 如果您要建置一個解決方案來顯示現有系統中已有的 3D 空間繪圖,您可以將每個數位對應項與其 3D 繪圖 (依據識別碼) 產生關聯,如此一來,當解決方案顯示空間的相關資訊時,也可以從現有的系統擷取 3D 繪圖。
  • 如果您的解決方案需要追蹤會議室的線上/離線狀態,您可以追蹤會議室狀態以用於顯示或查詢。

這兩個範例都可以使用新的屬性來實作:將 3D 繪圖與數位對應項建立關聯的 drawingId 屬性,以及指出會議室是否在線上的 online 屬性。

一般而言,您不會想直接修改產業本體,因為您希望未來可以在解決方案中納入更新 (會覆寫新增項目)。 相反地,這類新增項目可以在從 DTDL 型 RealEstateCore 本體延伸的自訂介面階層中建立。 您建立的每個介面都會使用多個介面繼承,從而擴充其父系 RealEstateCore 介面和所擴充介面階層中的父系介面。 此方法可讓您一起使用產業本體和新增項目。

若要擴充產業本體,請建立從產業本體中介面擴充的自訂介面,並將新功能新增至擴充的介面。 針對您想要擴充的每個介面,建立新的介面。 擴充介面是以 DTDL 撰寫 (請在本文件稍後參閱用於擴充介面的 DTDL)。

擴充上方所示的階層部分之後,擴充階層看起來如下所示。 在這裡,擴充的「空間」介面新增了 drawingId 屬性,其中包含使數位對應項與 3D 繪圖產生關聯的識別碼。 此外,「會議室」介面新增了 online 屬性,其中包含會議室的線上狀態。 透過繼承,「會議室」介面就會包含「RealEstateCore 會議室」介面的所有功能,以及擴充的「空間」介面中的所有功能。

Diagram showing the extended RealEstateCore space hierarchy, with more new additions as described.

您不需要擴充產業本體中的每個介面,只需擴充需要新增功能的介面。 例如,如果您需要新增的功能是將 arterial 屬性新增至 「走廊」介面,您可以只擴充該介面,而不需要擴充其他也從「房間」延伸的介面。

Diagram showing an extended RealEstateCore space hierarchy, containing an extended Hallway interface with an arterial property.

擴充介面的關聯性

擴充介面也可以當做關聯性的目標使用,即使關聯性原本已模型化為以基底介面為目標也一樣。 例如,在 DTDL 型 RealEstateCore 本體中,「公寓」介面具有名為「包含」的關聯性,其目標為會議室介面 (如下圖所示)。 這可讓您建立組成「公寓」的房間圖表。

根據上一節的「房間」階層部分,「公寓」數位對應項可以包含房間類型的對應項,而「走廊」是「房間」的延伸 (因此「公寓」可以包含「走廊」)。 這也表示「公寓」可以包含具有 arterial 屬性且已擴充的「走廊」,因為延伸的「走廊」可計算為一個「走廊」(因為是原始關聯性中的參考項目)。

Diagram showing an extended RealEstateCore space hierarchy, with an extended Hallway interface and relationships to it.

使用擴充的空間階層

當您使用擴充的空間階層來建立數位對應項時,每個數位對應項的模型都會是來自擴充空間階層的模型 (不是原始本體),而且會包含業界本體的所有功能和透過介面繼承延伸的介面。

每個數位對應項的模型都會是延伸階層中的介面,如下圖所示。

Diagram showing the extended RealEstateCore space hierarchy, including the connected models Space, Room, ConferenceRoom, Office, and FocusRoom.

使用模型識別碼查詢數位對應項 (IS_OF_MODEL 運算子) 時,應該使用擴充階層中的模型識別碼。 例如: SELECT * FROM DIGITALTWINS WHERE IS_OF_MODEL('dtmi:com:example:Office;1')

回饋原始本體

在某些情況下,您會以對大多數本體使用者而言非常實用的方式,來擴充產業本體。 在此情況下,您應該考慮將延伸項目回饋給原始本體。 每個本體都有不同的回饋程序,因此請檢查本體的 GitHub 存放庫以取得回饋詳細資料。

新介面的 DTDL

直接從產業本體延伸的新介面 DTDL 看起來會像這樣。

{
  "@id": "dtmi:com:example:FocusRoom;1", 
  "@type": "interface", 
  "extends": "dtmi:digitaltwins:rec_3_3:building:Office;1", 
  "@context": "dtmi:dtdl:context;2" 
} 

擴充介面的 DTDL

擴充介面的 DTDL (僅限於上述部分) 看起來會像這樣。

[
  {
    "@id": "dtmi:com:example:Space;1",
    "@type": "Interface",
    "extends": "dtmi:digitaltwins:rec_3_3:core:Space;1",
    "contents": [
      {
        "@type": "Property",
        "name": "drawingid",
        "schema": "string"
      }
    ],
    "@context": "dtmi:dtdl:context;2"
  },
  {
    "@id": "dtmi:com:example:Room;1",
    "@type": "Interface",
    "extends": [
      "dtmi:digitaltwins:rec_3_3:core:Room;1",
      "dtmi:com:example:Space;1"
    ],
    "@context": "dtmi:dtdl:context;2"
  },
  {
    "@id": "dtmi:com:example:ConferenceRoom;1",
    "@type": "Interface",
    "extends": [
      "dtmi:digitaltwins:rec_3_3:building:ConferenceRoom;1",
      "dtmi:com:example:Room;1"
    ],
    "contents": [
      {
        "@type": "Property",
        "name": "online",
        "schema": "boolean"
      }
    ],
    "@context": "dtmi:dtdl:context;2"
  },
  {
    "@id": "dtmi:com:example:Office;1",
    "@type": "Interface",
    "extends": [
      "dtmi:digitaltwins:rec_3_3:building:Office;1", 
      "dtmi:com:example:Room;1" 
    ],
    "@context": "dtmi:dtdl:context;2" 
  }, 
  {
    "@id": "dtmi:com:example:FocusRoom;1", 
    "@type": "Interface", 
    "extends": "dtmi:com:example:Office;1", 
    "@context": "dtmi:dtdl:context;2" 
  }
]

下一步

繼續在以本體為基礎的開發模型路徑上前進:完整模型開發路徑