트윈 모델 및 Azure Digital Twins에서 이를 정의하는 방법 알아보기

Azure Digital Twins의 주요 특징은 고유한 어휘를 정의하고 자체 정의된 비즈니스 조건에서 트윈 그래프를 작성하는 기능입니다. 이 기능은 사용자 제공 모델을 통해 제공됩니다. 사용자 설명에서 모델을 명사로 간주할 수 있습니다. Azure Digital Twins 모델은 JSON-LD 기반의 DTDL(디지털 트윈 정의 언어)로 표시됩니다.

모델은 개체 지향 프로그래밍 언어의 클래스와 비슷하며 실제 작업 환경에서 하나의 특정 개념에 대한 데이터 모양을 정의합니다. 모델에는 이름(예: Room 또는 TemperatureSensor)이 있고 속성, 구성 요소 및 관계 등 이 형식의 엔터티가 환경에서 무엇을 하는지 설명하는 요소가 포함됩니다. 나중에 이러한 모델을 사용하여 이 유형 설명을 충족하는 특정 엔터티를 나타내는 디지털 트윈을 만듭니다.

모델에 대한 DTDL(디지털 트윈 정의 언어)

Azure Digital Twins의 모델은 DTDL(디지털 트윈 정의 언어)을 사용하여 정의됩니다.

GitHub: DTDL 버전 3 언어 설명에서 DTDL v3에 대한 전체 언어 설명을 볼 수 있습니다. 이 페이지에는 자체 DTDL 모델 작성을 시작하는 데 도움이 되는 DTDL 참조 세부 정보 및 예제가 포함되어 있습니다.

DTDL은 JSON-LD를 기반으로 하며 프로그래밍 언어와 독립적입니다. DTDL은 Azure Digital Twins 전용이 아닙니다. 또한 IoT 플러그 앤 플레이와 같은 기타 IoT 서비스에서 디바이스 데이터를 나타내는 데도 사용됩니다.

이 문서의 나머지 부분에는 Azure Digital Twins에서 언어를 사용하는 방법이 요약되어 있습니다.

지원되는 DTDL 버전

Azure Digital Twins는 DTDL 버전 2와 3을 지원합니다(설명서에서 각각 v2 및 v3로 단축됨). V3는 다음을 포함하여 확장된 기능을 기반으로 Azure Digital Twins에서 모델링하는 데 권장되는 선택입니다.

설명서에서 이러한 기능에 대해 설명하는 경우 DTDL v3에서만 사용할 수 있다는 메모가 함께 제공됩니다. DTDL v2와 v3 간의 차이점에 대한 전체 목록은 DTDL v3 언어 설명: 버전 2와 비교한 변경 내용을 참조하세요.

또한 Azure Digital Twins는 동일한 인스턴스 내에서 v2 및 v3 모델의 혼합 사용을 지원합니다. 두 버전의 모델을 함께 사용하는 경우 다음 제한 사항에 유의하세요.

  • v2 인터페이스는 v3 인터페이스를 확장 하거나 v3 인터페이스가 포함된 구성 요소를 스키마로 가질 수 없습니다.
  • 반대로 v3 인터페이스는 v2 인터페이스를 확장할 수 있으며 v3 인터페이스는 v2 인터페이스가 포함된 구성 요소를 스키마로 가질 수 있습니다.
  • 관계는 v2 모델 원본에서 v3 모델 대상으로 또는 그 반대인 v3 모델 원본에서 v2 모델 대상으로의 모든 방향으로 연결될 수 있습니다.

기존 v2 모델을 v3으로 마이그레이션할 수도 있습니다. 이 작업을 수행하는 방법에 대한 지침은 v2 모델을 v3로 변환을 참조하세요.

참고 항목

현재 Azure Digital Twins Explorer는 DTDL v2 모델을 완벽하게 지원하고 DTDL v3 모델에 대해 제한된 기능을 지원합니다. Azure Digital Twins Explorer에서 DTDL v3 모델은 모델 패널에서 볼 수 있으며 DTDL v3 모델로 만든 트윈을 보고 편집할 수 있습니다(배열 속성이 포함된 트윈 포함). 그러나 DTDL v3 모델은 모델 그래프 패널에 표시되지 않으며 Azure Digital Twins Explorer를 사용하여 가져올 수 없습니다. DTDL v3 모델을 인스턴스로 가져오려면 API, SDK 또는 Azure CLI와 같은 다른 개발자 인터페이스를사용합니다.

모델 개요

트윈 형식 모델은 텍스트 편집기로 작성할 수 있습니다. DTDL 언어는 JSON 구문을 따르므로 .json 확장명을 사용하여 모델을 저장해야 합니다. JSON 확장명을 사용하면 많은 프로그래밍 텍스트 편집기에서 DTDL 문서에 대한 기본 구문 검사 및 강조 표시를 제공할 수 있습니다. Visual Studio Code에 사용할 수 있는 DTDL 확장명도 있습니다.

모델 인터페이스 내의 필드는 다음과 같습니다.

필드 설명
@id dtmi:<domain>:<unique-model-identifier>;<model-version-number> 형식에 있는 모델에 대한 DTMI(디지털 트윈 모델 식별자). DTDL v3에서 버전 번호를 생략하거나 두 부분(<major>.<minor>)으로 된 버전 번호로 구성할 수 있습니다.
@type 설명하는 정보의 종류를 식별합니다. 인터페이스의 경우 형식은 Interface입니다.
@context JSON 문서에 대한 컨텍스트를 설정합니다. 모델은 DTDL v2의 경우 dtmi:dtdl:context;2, DTDL v3의 경우 dtmi:dtdl:context;3을 사용해야 합니다. DTDL v3 모델은 이 필드에 추가 기능 확장의 이름을 지정할 수도 있습니다.
displayName [선택 사항] 모델의 친숙한 이름을 정의하는 옵션을 제공합니다. 이 필드를 사용하지 않으면 모델에서 전체 DTMI 값을 사용합니다.
contents 나머지 모든 인터페이스 데이터는 특성 정의의 배열로 여기에 배치됩니다. 각 특성은 설명하는 인터페이스 정보의 종류를 식별하는 @type(Property, Relationship 또는 Component) 및 실제 특성을 정의하는 속성의 집합을 제공해야 합니다. 다음 섹션에서는 모델 특성에 대해 자세히 설명합니다.

다음은 기본 DTDL 모델의 예입니다. 이 모델은 한 ID에 대해 하나의 속성을 사용하여 Home을 설명합니다. 또한 Home 모델은 Floor 모델에 대한 관계를 정의합니다. 이는 Home 트윈이 특정 Floor 트윈에 연결되었음을 나타내는 데 사용할 수 있습니다.

{
  "@id": "dtmi:com:adt:dtsample:home;1",
  "@type": "Interface",
  "@context": "dtmi:dtdl:context;3",
  "displayName": "Home",
  "contents": [
    {
      "@type": "Property",
      "name": "id",
      "schema": "string"     
    },    
    {
      "@type": "Relationship",
      "@id": "dtmi:com:adt:dtsample:home:rel_has_floors;1",
      "name": "rel_has_floors",
      "displayName": "Home has floors",
      "target": "dtmi:com:adt:dtsample:floor;1"
    }
  ]
}

모델 특성

모델에 대한 기본 정보는 모델 인터페이스의 contents 섹션 내에 정의된 특성에 의해 제공됩니다.

다음은 Azure Digital Twins에서 지원되며 DTDL에서 사용할 수 있는 특성입니다. Azure Digital Twins에 사용되는 DTDL 모델 인터페이스에는 다음 각 필드가 0개, 1개 또는 여러 개 포함될 수 있습니다.

  • 속성 - 속성은 엔터티의 상태를 나타내는 데이터 필드입니다(예: 많은 개체 지향 프로그래밍 언어의 속성). 속성에는 백업 스토리지가 있으며 언제든지 읽을 수 있습니다. 자세한 내용은 아래 속성을 참조하세요.

  • 관계 - 관계를 사용하면 디지털 트윈이 다른 디지털 트윈과 관련되는 방식을 나타낼 수 있습니다. 관계는 contains(“바닥은 방을 포함”), cools(“HVAC는 방을 식힘”), isBilledTo(“압축기는 사용자에게 청구됨”) 등 다양한 의미 체계를 나타낼 수 있습니다. 관계를 통해 솔루션은 상호 관련 엔터티의 그래프를 제공할 수 있습니다. 관계에도 고유한 속성이 있을 수 있습니다. 자세한 내용은 아래의 관계를 참조하세요.

  • 구성 요소 - 구성 요소를 사용하면 원하는 경우 모델 인터페이스를 다른 인터페이스의 어셈블리로 빌드할 수 있습니다. 구성 요소의 예로는 휴대폰에 대한 모델을 정의하는 데 사용되는 frontCamera 인터페이스(및 다른 구성 요소 인터페이스 backCamera)가 있습니다. 먼저 frontCamera의 인터페이스를 자체 모델인 것처럼 정의한 다음 Phone을 정의할 때 참조합니다.

    구성 요소를 사용하여 솔루션의 핵심 부분이지만 별도의 ID가 필요하지 않은 항목을 설명할 수 있으며 트윈 그래프에서 독립적으로 생성, 삭제 또는 다시 정렬할 필요가 없습니다. 트윈 그래프에서 엔터티가 독립적으로 존재하도록 하려면 관계로 연결된 서로 다른 모델의 별개 디지털 트윈으로 표시합니다.

    구성 요소를 사용하여 모델 인터페이스 내에서 관련된 속성 집합을 그룹화할 수도 있습니다. 이 경우 각 구성 요소를 인터페이스 내의 네임스페이스 또는 "폴더"로 간주할 수 있습니다.

    자세한 내용은 아래의 구성 요소를 참조하세요.

DTDL v3 언어 설명명령원격 분석도 정의 하지만 둘 다 AzureDigital Twins에서 사용되지 않습니다. 명령은 지원되지 않으며 원격 분석은 모델 정의에서 허용되지만 Azure Digital Twins 모델링에서 고유한 사용 사례가 없습니다. DTDL 원격 분석을 사용하는 대신 트윈 상태 정보를 저장하기 위해 DTDL 속성을 사용해야 합니다.

참고 항목

들어오는 디바이스 데이터를 저장하기 위해 DTDL 모델에 원격 분석 필드를 정의할 필요는 없지만 Azure Digital Twins는 SendTelemetry API를 사용하여 이벤트를 원격 분석으로 내보낼 수 있습니다. 이렇게 하면 이벤트 처리기가 수신하여 다른 트윈에 대한 작업을 수행하거나 다운스트림 서비스를 트리거할 수 있는 Digital Twin 원격 분석 메시지 이벤트가 트리거됩니다.

속성

이 섹션에서는 DTDL 모델의 속성에 대해 자세히 설명합니다.

속성의 일부로 표시할 수 있는 필드에 대한 자세한 내용은 DTDL v3 언어 설명의 속성을 참조하세요.

참고 항목

속성에 대한 writable DTDL 특성은 현재 Azure Digital Twins에서 지원되지 않습니다. 모델에 추가할 수 있지만 Azure Digital Twins는 이를 적용하지 않습니다. 자세한 내용은 서비스별 DTDL 참고 사항을 참조하세요.

스키마

DTDL에 따라 속성 특성의 스키마는 표준 기본 형식(integer, double, stringboolean) 및 기타 형식(예: dateTimeduration)이 될 수 있습니다.

기본 형식 외에도 속성 필드에는 다음과 같은 복합 형식이 있을 수 있습니다.

  • Object
  • Map
  • Enum
  • Array, DTDL v3에만 해당합니다. 속성에 대한 Array 형식은 DTDL v2에서 지원되지 않습니다.

단위로 값에 주석을 지정할 수 있는 의미 체계 형식일 수도 있습니다. DTDL v2에서는 의미 체계 형식이 기본적으로 지원됩니다. DTDL v3에서는 기능 확장으로 포함할 수 있습니다.

기본 속성 예제

다음은 DTDL 모델의 속성에 대한 기본 예입니다. 이 예제에서는 Home의 ID 속성을 보여 줍니다.

{
  "@id": "dtmi:com:adt:dtsample:home;1",
  "@type": "Interface",
  "@context": "dtmi:dtdl:context;3",
  "displayName": "Home",
  "contents": [
    {
      "@type": "Property",
      "name": "id",
      "schema": "string"     
    },    
    {
      "@type": "Relationship",
      "@id": "dtmi:com:adt:dtsample:home:rel_has_floors;1",
      "name": "rel_has_floors",
      "displayName": "Home has floors",
      "target": "dtmi:com:adt:dtsample:floor;1"
    }
  ]
}

복합 개체 형식 예제

속성은 Object 형식을 포함하여 복합 형식일 수 있습니다.

다음 예제에서는 해당 주소에 대한 속성이 있는 Home 모델의 다른 버전을 보여 줍니다. address는 거리, 도시, 주 및 우편 번호에 대한 자체 필드가 있는 개체입니다.

{
  "@id": "dtmi:com:adt:dtsample:home;1",
  "@type": "Interface",
  "@context": "dtmi:dtdl:context;3",
  "displayName": "Home",
  "extends": "dtmi:com:adt:dtsample:core;1",
  "contents": [
    {
      "@type": "Property",
      "name": "address",
      "schema": {
        "@type": "Object",
        "fields": [
          {
            "name": "street",
            "schema": "string"
          },
          {
            "name": "city",
            "schema": "string"
          },
          {
            "name": "state",
            "schema": "string"
          },
          {
            "name": "zip",
            "schema": "string"
          }
        ]
      }
    },
    {
      "@type": "Relationship",
      "@id": "dtmi:com:adt:dtsample:home:rel_has_floors;1",
      "name": "rel_has_floors",
      "displayName": "Home has floors",
      "target": "dtmi:com:adt:dtsample:floor;1",
      "properties": [
        {
          "@type": "Property",
          "name": "lastOccupied",
          "schema": "dateTime"
        }
      ]
    }
  ]
}

DTDL v2 의미 체계 형식 예제

의미 체계 형식은 단위로 값을 표현하기 위한 것입니다. Azure Digital Twins의 속성은 DTDL에서 지원하는 모든 의미 체계 형식을 사용할 수 있습니다.

DTDL v2에서는 의미 체계 형식이 기본적으로 지원됩니다. DTDL v2의 의미 체계 형식에 대한 자세한 내용은 DTDL v2 언어 설명의 의미 체계 형식을 참조하세요. DTDL v3의 의미 체계 형식에 대한 자세한 내용은 QuantitativeTypes DTDL v3 기능 확장을 참조하세요.

다음 예제에서는 습도 및 온도에 대한 의미 체계 형식 속성이 있는 DTDL v2 센서 모델을 보여 줍니다.

{
  "@id": "dtmi:com:adt:dtsample:v2sensor;1",
  "@type": "Interface",
  "@context": "dtmi:dtdl:context;2",
  "displayName": "Sensor (v2 model)",
  "contents": [
    {
      "@type": ["Property", "Temperature"],
      "name": "Temperature",
      "schema": "double",
      "unit": "degreeFahrenheit"    
    },
    {
      "@type": ["Property", "Humidity"],
      "name": "Humidity",
      "schema": "double",
      "unit": "gramPerCubicMetre" 
    }
  ]
}

Important

“속성”@type 배열의 첫 번째 요소여야 하고 다음에 의미 체계 형식이 나와야 합니다. 그렇지 않으면 Azure Digital Twins Explorer에 필드가 표시되지 않을 수 있습니다.

관계

이 섹션에서는 DTDL 모델의 관계에 대해 자세히 설명합니다.

관계의 일부로 표시될 수 있는 전체 필드 목록은 DTDL v3 언어 설명의 관계를 참조하세요.

참고 항목

관계에 대한 writable, minMultiplicitymaxMultiplicity DTDL 특성은 현재 Azure Digital Twins에서 지원되지 않습니다. 모델에 추가할 수 있지만 Azure Digital Twins는 이를 적용하지 않습니다. 자세한 내용은 서비스별 DTDL 참고 사항을 참조하세요.

기본 관계 예제

다음은 DTDL 모델의 관계에 대한 기본 예입니다. 이 예제에서는 Home 모델에서 Floor 모델에 연결할 수 있는 관계를 보여 줍니다.

{
  "@id": "dtmi:com:adt:dtsample:home;1",
  "@type": "Interface",
  "@context": "dtmi:dtdl:context;3",
  "displayName": "Home",
  "contents": [
    {
      "@type": "Property",
      "name": "id",
      "schema": "string"     
    },    
    {
      "@type": "Relationship",
      "@id": "dtmi:com:adt:dtsample:home:rel_has_floors;1",
      "name": "rel_has_floors",
      "displayName": "Home has floors",
      "target": "dtmi:com:adt:dtsample:floor;1"
    }
  ]
}

참고 항목

관계의 경우 @id는 선택적 필드입니다. @id를 제공하지 않으면 디지털 쌍 인터페이스 프로세서에서 하나를 할당합니다.

대상 관계 및 대상이 아닌 관계

관계는 대상을 지정하거나 지정하지 않고 정의할 수 있습니다. 대상은 관계가 도달할 수 있는 트윈 유형을 지정합니다. 예를 들어 Home 모델이 Floor 트윈인 트윈과 rel_has_floors 관계만 가질 수 있도록 지정하는 대상을 포함할 수 있습니다.

경우에 따라 관계가 다양한 유형의 트윈에 연결할 수 있도록 특정 대상 없이 관계를 정의할 수 있습니다.

다음은 대상이 없는 DTDL 모델의 관계 예입니다. 이 예제에서 관계는 Room에 있을 수 있는 센서를 정의하기 위한 것이며 관계는 모든 형식에 연결할 수 있습니다.

{
  "@id": "dtmi:com:adt:dtsample:room;1",
  "@type": "Interface",
  "@context": [
    "dtmi:dtdl:context;3",
    "dtmi:dtdl:extension:quantitativeTypes;1"
  ],
  "displayName": "Room",
  "extends": "dtmi:com:adt:dtsample:core;1",
  "contents": [
    {
      "@type": ["Property", "Humidity"],
      "name": "humidity",
      "schema": "double",
      "unit": "gramPerCubicMetre"
    },
    {
      "@type": "Component",
      "name": "thermostat",
      "schema": "dtmi:com:adt:dtsample:thermostat;1"
    },
    {
      "@type": "Relationship",
      "@id": "dtmi:com:adt:dtsample:room:rel_has_sensors;1",
      "name": "rel_has_sensors",
      "displayName": "Room has sensors"

관계의 속성

또한 DTDL은 관계가 자체 속성을 가질 수 있도록 합니다. DTDL 모델 내에서 관계를 정의하는 경우 관계는 사용자 지정 속성을 정의하여 관계별 상태를 설명하는 고유한 properties 필드를 가질 수 있습니다.

다음 예제에서는 rel_has_floors 관계에 관련 Floor가 마지막으로 점유된 시점을 나타내는 속성이 있는 홈 모델의 다른 버전을 보여 줍니다.

{
  "@id": "dtmi:com:adt:dtsample:home;1",
  "@type": "Interface",
  "@context": "dtmi:dtdl:context;3",
  "displayName": "Home",
  "extends": "dtmi:com:adt:dtsample:core;1",
  "contents": [
    {
      "@type": "Property",
      "name": "address",
      "schema": {
        "@type": "Object",
        "fields": [
          {
            "name": "street",
            "schema": "string"
          },
          {
            "name": "city",
            "schema": "string"
          },
          {
            "name": "state",
            "schema": "string"
          },
          {
            "name": "zip",
            "schema": "string"
          }
        ]
      }
    },
    {
      "@type": "Relationship",
      "@id": "dtmi:com:adt:dtsample:home:rel_has_floors;1",
      "name": "rel_has_floors",
      "displayName": "Home has floors",
      "target": "dtmi:com:adt:dtsample:floor;1",
      "properties": [
        {
          "@type": "Property",
          "name": "lastOccupied",
          "schema": "dateTime"
        }
      ]
    }
  ]
}

구성 요소

이 섹션에서는 DTDL 모델의 구성 요소에 대해 자세히 설명합니다.

구성 요소의 일부로 표시될 수 있는 전체 필드 목록은 DTDL v3 언어 설명의 구성 요소를 참조하세요.

기본 구성 요소 예제

다음은 DTDL 모델의 구성 요소에 대한 기본 예입니다. 이 예제에서는 자동 온도 조절기 모델을 구성 요소로 사용하는 Room 모델을 보여 줍니다.

[
  {
    "@id": "dtmi:com:adt:dtsample:room;1",
    "@type": "Interface",
    "@context": [
      "dtmi:dtdl:context;3",
      "dtmi:dtdl:extension:quantitativeTypes;1"
    ],
    "displayName": "Room",
    "extends": "dtmi:com:adt:dtsample:core;1",
    "contents": [
      {
        "@type": ["Property", "Humidity"],
        "name": "humidity",
        "schema": "double",
        "unit": "gramPerCubicMetre"
      },
      {
        "@type": "Component",
        "name": "thermostat",
        "schema": "dtmi:com:adt:dtsample:thermostat;1"
      },
      {
        "@type": "Relationship",
        "@id": "dtmi:com:adt:dtsample:room:rel_has_sensors;1",
        "name": "rel_has_sensors",
        "displayName": "Room has sensors"
      }
    ]
  },
  {
    "@context": [
      "dtmi:dtdl:context;3",
      "dtmi:dtdl:extension:quantitativeTypes;1"
    ],
    "@id": "dtmi:com:adt:dtsample:thermostat;1",
    "@type": "Interface",
    "displayName": "thermostat",
    "contents": [
      {
        "@type": ["Property", "Temperature"],
        "name": "temperature",
        "schema": "double",
        "unit": "degreeFahrenheit"
      }
    ]
  }
]

이 솔루션의 다른 모델에도 자동 온도 조절기를 포함해야 하는 경우에는 Room 모델처럼 동일한 자동 온도 조절기 모델을 자체 정의에서 구성 요소로 참조할 수 있습니다.

Important

구성 요소 참조를 찾기 위해 구성 요소 인터페이스(위 예제의 자동 온도 조절기)는 사용하는 인터페이스와 동일한 배열에서 정의해야 합니다.

모델 상속

경우에 따라 모델을 더 특수화할 수 있습니다. 예를 들어 일반 모델 Room및 특수화된 변형 ConferenceRoom 및 Gym을 포함하는 것이 유용할 수 있습니다. 특수화를 표현하기 위해 DTDL은 상속을 지원합니다. 인터페이스는 하나 이상의 인터페이스에서 상속할 수 있습니다. 모델에 extends 필드를 추가하면 됩니다.

extends 섹션은 인터페이스 이름이거나 인터페이스 이름의 배열입니다(확장 인터페이스가 여러 상위 모델에서 상속할 수 있도록 허용). 단일 부모가 여러 확장 인터페이스의 기본 모델로 사용될 수 있습니다.

참고 항목

DTDL v2에서는 각 extends에 대해 최대 두 개의 인터페이스가 나열될 수 있습니다. DTDL v3에서는 extends에 대한 직접 값 수에 제한이 없습니다.

DTDL v2 및 v3 모두에서 extends 계층 구조의 총 깊이 제한은 10입니다.

다음 예제에서는 이전 DTDL 예제의 Home 모델을 더 큰 "Core" 모델의 하위 형식으로 다시 재구상합니다. 부모 모델을 먼저 정의한 다음, extends를 사용하여 이 모델에 자식 모델(Home)을 작성합니다.

{
    "@id": "dtmi:com:adt:dtsample:core;1",
    "@type": "Interface",
    "@context": "dtmi:dtdl:context;3",
    "displayName": "Core",
    "contents": [
        {
            "@type": "Property",
            "name": "id",
            "schema": "string"
        },
        {
            "@type": "Property",
            "name": "name",
            "schema": "string"
        }
    ]
}
{
  "@id": "dtmi:com:adt:dtsample:home;1",
  "@type": "Interface",
  "@context": "dtmi:dtdl:context;3",
  "displayName": "Home",
  "extends": "dtmi:com:adt:dtsample:core;1",
  "contents": [
    {

이 경우 Core는 ID와 이름을 Home에 제공합니다. 다른 모델도 Core 모델을 확장하여 이러한 속성을 얻을 수 있습니다. 동일한 부모 인터페이스를 확장하는 Room 모델은 다음과 같습니다.

{
  "@id": "dtmi:com:adt:dtsample:room;1",
  "@type": "Interface",
  "@context": [
    "dtmi:dtdl:context;3",
    "dtmi:dtdl:extension:quantitativeTypes;1"
  ],
  "displayName": "Room",

상속이 적용되면 확장 인터페이스는 전체 상속 체인의 모든 속성을 노출합니다.

확장 인터페이스는 상위 인터페이스의 정의를 변경할 수 없고 추가만 할 수 있습니다. 또한 기능이 동일하게 정의된 경우에도 상위 인터페이스에 이미 정의된 기능을 다시 정의할 수 없습니다. 예를 들어 상위 인터페이스가 double 속성 mass를 정의하는 경우 확장 인터페이스 또한 double인 경우에도 mass에 대한 선언을 포함할 수 없습니다.

DTDL v3 기능 확장

DTDL v3는 더 풍부한 모델을 작성하는 데 사용할 수 있는 추가 메타 모델 클래스를 정의하는 언어 확장을 지원합니다. 이 섹션에서는 DTDL v3 모델에 비핵심 기능을 추가하는 데 사용할 수 있는 기능 확장 클래스에 대해 설명합니다.

각 기능 확장은 고유한 DTMI(디지털 트윈 모델 식별자) 값인 컨텍스트 지정자에 의해 식별됩니다. 모델에서 기능 확장을 사용하도록 설정하려면 확장의 컨텍스트 지정자를 모델의 @context 필드에 추가합니다(dtmi:dtdl:context;3의 일반 DTDL 컨텍스트 지정자와 함께). 동일한 모델에 여러 기능 확장을 추가할 수 있습니다.

다음은 기능 확장에서 해당 @context 필드의 모습에 대한 예입니다. 다음은 QuantitativeTypes 확장주석 확장을 모두 사용하는 모델에서 발췌한 내용입니다.

  "@context": [
      "dtmi:dtdl:context;3",
      "dtmi:dtdl:extension:quantitativeTypes;1",
      "dtmi:dtdl:extension:annotation;1"
  ]

모델에 기능 확장을 추가한 후에는 모델 내에서 해당 확장의 보조 형식에 액세스할 수 있습니다. DTDL 요소의 @type 필드에 보조 형식을 추가하여 요소에 추가 기능을 제공할 수 있습니다. 보조 형식은 요소에 속성을 추가할 수 있습니다.

예를 들어 주석 확장을 사용하는 모델에서 발췌한 내용은 다음과 같습니다. 이 확장에는 아래 예제에서 속성 요소에 추가되는 보조 형식 ValueAnnotation이 있습니다. 이 보조 형식을 속성 요소에 추가하면 이 요소에 의해 주석이 추가된 다른 속성을 나타내는 데 사용되는 추가 annotates 필드를 요소에 허용할 수 있습니다.

{
  "@type": [ "Property", "ValueAnnotation" ],
  "name": "currentTempAccuracy",
  "annotates": "currentTemp",
  "schema": "double"
  },

이 섹션의 나머지 부분에서는 주석 확장 및 기타 DTDL v3 기능 확장에 대해 자세히 설명합니다.

주석 확장

주석 확장은 DTDL v3 모델의 속성 요소에 사용자 지정 메타데이터를 추가하는 데 사용됩니다. 컨텍스트 지정자는 dtmi:dtdl:extension:annotation;1입니다.

이 확장에는 DTDL 속성 요소에 추가할 수 있는 ValueAnnotation 보조 형식이 포함됩니다. ValueAnnotation 형식은 요소에 하나의 필드 annotates를 추가합니다. 그러면 현재 요소에 의해 주석이 추가되는 다른 속성의 이름을 지정할 수 있습니다.

이 확장에 대한 자세한 내용과 예제는 DTDL v3 언어 설명의 주석 확장을 참조하세요.

히스토리화 확장

히스토리화 확장은 DTDL v3 모델의 속성을 히스토리화해야 하는 항목으로 지정하는 데 사용됩니다(즉, 값이 변경되는 시간과 함께 해당 값의 기록 시퀀스를 기록해야 함). 컨텍스트 지정자는 dtmi:dtdl:extension:historization;1입니다.

이 확장에는 서비스가 요소의 기록 값을 유지하여 쿼리 및 분석에 사용할 수 있도록 해야 함을 나타내기 위해 DTDL 속성 요소에 공동 형식으로 추가할 수 있는 보조 형식 Historized가 포함됩니다. Historized 보조 형식은 요소에 필드를 추가하지 않습니다.

이 확장에 대한 자세한 내용과 예제는 DTDL v3 언어 설명의 히스토리화 확장을 참조 하세요.

확장 재정의

재정의 확장은 DTDL v3 모델의 속성을 인스턴스 값으로 재정의하는 데 사용됩니다. 주석 확장과 함께 사용되며 컨텍스트 지정자는 dtmi:dtdl:extension:overriding;1입니다.

이 확장에는 또한 (주석 확장에서) ValueAnnotation과 공동 형식화될 수 있는 DTDL 속성에 추가할 수 있는 Override 보조 형식이 포함됩니다. Override 형식은 overrides 요소에 하나의 필드를 추가하므로 주석이 추가된 요소의 필드 이름을 지정하여 현재 요소의 값으로 재정의할 수 있습니다.

이 확장에 대한 자세한 내용과 예제는 DTDL v3 언어 설명의 확장 재정의를 참조하세요.

QuantitativeTypes 확장

QuantitativeTypes 확장은 DTDL v3 모델에서 의미 체계 형식, 단위 형식 및 단위를 사용하도록 설정하는 데 사용됩니다. 컨텍스트 지정자는 dtmi:dtdl:extension:quantitativeTypes;1입니다.

이 확장을 사용하면 여러 의미 체계 형식을 보조 형식으로 사용할 수 있으며, 이는 CommandRequest, Field, MapValue 또는 DTDL v3의 속성에 추가할 수 있습니다. 의미 체계 형식은 의미 체계 형식에 해당하는 유효한 단위를 허용하는 요소 unit에 하나의 필드를 추가합니다.

확장에 대한 자세한 내용(예제 및 지원되는 의미 체계 형식 및 단위의 전체 목록 포함)은 DTDL v3 언어 설명의 QuantitativeTypes 확장을 참조하세요.

서비스별 DTDL 참고 사항

DTDL을 사용하는 모든 서비스가 DTDL과 똑같은 기능을 구현하는 것은 아닙니다. Azure Digital Twins에서 현재 지원하지 않는 몇 가지 DTDL 기능은 다음과 같습니다.

  • DTDL 명령
  • 속성 또는 관계의 writable 특성입니다. 이 특성은 DTDL 사양에 따라 설정할 수 있지만 Azure Digital Twins에서 사용되지 않습니다. 대신, 이러한 특성은 항상 Azure Digital Twins 서비스에 대한 일반 쓰기 권한이 있는 외부 클라이언트에서 쓰기 가능으로 처리됩니다.
  • 관계의 minMultiplicitymaxMultiplicity 속성입니다. 이러한 특성은 DTDL 사양에 따라 설정할 수 있지만 값은 Azure Digital Twins에 의해 적용되지 않습니다.

DTDL 모델이 Azure Digital Twins와 호환되려면 다음 요구 사항도 충족해야 합니다.

  • 모델의 모든 최상위 DTDL 요소는 Interface 형식이어야 합니다. 이 요구 사항의 이유는 Azure Digital Twins 모델 API가 인터페이스 또는 인터페이스 배열을 나타내는 JSON 개체를 받을 수 있기 때문입니다. 따라서 최상위 수준에서 다른 DTDL 요소 형식이 허용되지 않습니다.
  • Azure Digital Twins의 DTDL은 명령을 정의하지 않아야 합니다.
  • Azure Digital Twins는 단일 수준의 구성 요소 중첩만 허용합니다. 즉, 구성 요소로 사용되는 인터페이스는 구성 요소 자체를 가질 수 없습니다.
  • 인터페이스는 다른 DTDL 인터페이스 내에서 인라인으로 정의될 수 없습니다. 자체 ID를 사용하여 별도의 최상위 엔터티로 정의해야 합니다. 그런 다음 다른 인터페이스가 해당 인터페이스를 구성 요소나 상속을 통해 포함하려는 경우 해당 ID를 참조할 수 있습니다.

모델링 도구 및 모범 사례

이 섹션에서는 모델링에 대한 추가 고려 사항 및 권장 사항에 대해 설명합니다.

기존 업계 표준 온톨로지 사용

온톨로지는 제조, 건물 구조, IoT 시스템, 스마트 도시, 에너지 그리드, 웹 콘텐츠 등과 같은 특정 영역을 포괄적으로 설명하는 모델 집합입니다.

솔루션이 특정 종류의 모델링 표준을 사용하는 특정 업계를 위한 것인 경우 모델을 처음부터 설계하는 대신 해당 업계용으로 설계된 기존 모델 집합으로 시작하는 것이 좋습니다. Microsoft는 도메인 전문가와 협력하여 업계 표준에 따라 DTDL 모델 온톨로지를 만들어 재창조를 최소화하고 업계 솔루션 전반에서 일관성과 간소화를 장려합니다. 온톨로지란?에서 온톨로지의 사용 방법 및 현재 사용할 수 있는 온톨로지를 포함하여 온톨로지에 대해 자세히 읽어볼 수 있습니다.

쿼리에 미치는 영향 고려

사용자 환경에서 엔터티를 반영하도록 모델을 설계할 때 설계의 쿼리 의미를 미리 확인하는 것이 유용할 수 있습니다. 그래프 순회에서 많은 결과 집합을 방지하는 방식으로 속성을 설계할 수 있습니다. 단일 쿼리에서 단일 수준 관계로 응답해야 하는 관계를 모델링할 수도 있습니다.

모델 유효성 검사

모델을 만든 후에는 Azure Digital Twins 인스턴스에 업로드하기 전에 오프라인으로 모델의 유효성을 검사하는 것이 좋습니다.

모델의 유효성을 검사하는 데 도움이 되도록 NuGet: DTDLParser에 .NET 클라이언트 측 DTDL 구문 분석 라이브러리가 제공됩니다. C# 코드에서 직접 파서 라이브러리를 사용할 수 있습니다. GitHub의 DTDLParserResolveSample에서 파서의 샘플 사용을 볼 수도 있습니다.

대량으로 모델 업로드 및 삭제

모델 만들기, 확장 또는 선택이 완료되면 솔루션에서 사용할 수 있도록 모델을 Azure Digital Twins 인스턴스에 업로드해야 합니다.

작업 가져오기 API를 사용하여 단일 API 호출에서 많은 모델을 업로드할 수 있습니다. API는 인스턴스에 있는 모델 수에 대해 Azure Digital Twins 한도까지 동시에 수락할 수 있으며, 필요한 경우 모델 간의 종속성을 확인하기 위해 모델을 자동으로 다시 정렬합니다. 이 API를 사용하는 자세한 지침 및 예제는 모델에 대한 대량 가져오기 지침을 참조하세요.

작업 가져오기 API의 대안은 개별 모델 API를 사용하여 여러 모델 파일을 한 번에 업로드하는 모델 업로더 샘플입니다. 이 샘플에서는 모델 종속성 확인을 위해 자동 순서 변경도 구현합니다. 현재 DTDL 버전 2에서만 작동합니다.

Azure Digital Twins 인스턴스에서 모든 모델을 한 번에 삭제해야 하는 경우 모델 삭제자 샘플을 사용할 수 있습니다. 삭제 프로세스를 통해 모델 종속성을 처리하는 재귀 논리가 포함된 프로젝트입니다. 현재 DTDL 버전 2에서만 작동합니다.

또는 모든 트윈 및 관계와 함께 모든 모델을 삭제하여 인스턴스의 데이터를 지우려면 작업 삭제 API를사용할 수 있습니다.

모델 시각화

Azure Digital Twins 인스턴스에 모델을 업로드한 후에는 Azure Digital Twins Explorer를 사용하여 모델을 볼 수 있습니다. 탐색기에는 인스턴스의 모든 모델 목록과 상속 및 모델 관계를 포함하여 서로 관련되는 방식을 보여 주는 모델 그래프가 포함되어 있습니다.

참고 항목

현재 Azure Digital Twins Explorer는 DTDL v2 모델을 완벽하게 지원하고 DTDL v3 모델에 대해 제한된 기능을 지원합니다. Azure Digital Twins Explorer에서 DTDL v3 모델은 모델 패널에서 볼 수 있으며 DTDL v3 모델로 만든 트윈을 보고 편집할 수 있습니다(배열 속성이 포함된 트윈 포함). 그러나 DTDL v3 모델은 모델 그래프 패널에 표시되지 않으며 Azure Digital Twins Explorer를 사용하여 가져올 수 없습니다. DTDL v3 모델을 인스턴스로 가져오려면 API, SDK 또는 Azure CLI와 같은 다른 개발자 인터페이스를사용합니다.

다음은 모델 그래프의 모습에 대한 예시입니다.

Screenshot of Azure Digital Twins Explorer. The Model Graph panel is highlighted.

Azure Digital Twins Explorer의 모델 환경에 대한 자세한 내용은 모델 및 모델 그래프 살펴보기를 참조하세요.

다음 단계