分類スキーマの作成

組織に分類スキーマを割り当てる前に、有効な JSON ファイルで分類の構成オプションを定義し、分類スキーマを作成する必要があります。 作成する分類スキーマは、分類スキーマを記述および検証する分類の文法 (Portal for ArcGIS に含まれる JSON スキーマ) に従う必要があります。

組織のニーズに応じて、最低限必要なプロパティのみを定義するシンプルなスキーマを作成することも、ArcGIS Arcadeを使用して、アイテムの非常に詳細な分類を行う複雑なスキーマを作成することもできます。 以下の分類スキーマの詳細な例を参照するか、ArcGIS/Classification GitHub リポジトリからサンプル スキーマをダウンロードしてください。

注意:

以下の例および ArcGIS/Classification GitHub リポジトリ内のサンプル スキーマは、組織のニーズを満たす分類スキーマを作成する際の参考としてご利用ください。

分類スキーマを作成する際は、最初に次のプロパティを定義します。

注意:

特に指定しない限り、プロパティはオプションです。

注意:

Arcade 式は、文字 <> をサポートしていません。

  • name - 分類スキーマの名前を識別する必須プロパティ。
  • version - 分類スキーマのバージョンを識別する必須プロパティ。
  • grammarVersion - スキーマが準拠する分類の文法のバージョンを指定する必須プロパティ。 分類の文法のバージョンは、ポータル サイトの [組織] > [設定] > [アイテム] > [アイテムの分類] を参照して確認できます。
  • helpToolTip - 分類フォームの上部にある [情報] ボタン 情報 にポインターを合わせたときに表示されるヘルプ テキスト。
  • helpURL - 分類フォームの上部にある [情報] ボタン 情報 をクリックしたときに新しいタブで開くスキーマ ヘルプ ドキュメントの URL。
  • bannerExpression - アイテム ページの [分類] の下に表示される分類情報。 Arcade 式を使用してバナー テキストを作成したり、値を空の文字列に設定して、分類フォームの uiElements に定義された一般的なエンコーディング ロジック (例: bannerOrderbannerLabellabelDelimiter) を実装することができます。
    注意:

    このプロパティを省略するか、空の文字列として定義する場合、一般的なエンコーディング ロジックを実装するには、bannerOrder が定義された 1 つ以上の属性が存在する必要があります。

  • selectionTextExpression - [分類の編集] ダイアログ ボックスに表示される分類情報。 Arcade 式を使用してバナー テキストを作成したり、値を空の文字列に設定して、分類フォームの uiElements に定義された一般的なエンコーディング ロジック (例: selectionDisplayOrderselectionDisplayLabellabelDelimiter) を実装することができます。
    注意:

    このプロパティを省略するか、空の文字列として定義する場合、一般的なエンコーディング ロジックを実装するには、selectionDisplayOrder が定義された 1 つ以上の属性が存在する必要があります。

  • attributeCategories - 分類フォームのセクションまたはタブとして表示される属性カテゴリのリスト。
    注意:

    default という単語は予約済みキーワードであり、属性カテゴリとして使用することはできません。

{ 
  "name": "academic-institution-classification-schema", 
  "version": "2.0", 
  "grammarVersion": "2.0", 
  "helpURL": "https://ansible.hynes.com/portal/home/schema_help.pdf", 
  "helpTooltip": "Click to open the schema help document", 
  "bannerExpression": "", 
  "selectionTextExpression": "", 
  "attributeCategories": [] 
}

classificationMetadata の定義

必須の classificationMetadata オブジェクトには、次のようなプロパティがあります。

  • primaryAttribute - 分類フォームの主な分類フィールドとして表示される属性を識別する必須プロパティ。
  • defaultValue - primaryAttribute プロパティのデフォルト値を指定する必須プロパティ。
  • classificationValueProperties - 各オブジェクトが primaryAttribute 値として識別される属性の分類オプションを表し、そのオプションの特定のプロパティを定義する、必須のオブジェクト配列。 各分類オプションには、次のプロパティを定義できます。
    • value - 分類フォームで使用されるオプションのラベルを指定する必須プロパティ。
    • acronym - オプションの略語。
    • textColor - オプションが選択されると、分類フォームの [現在の選択] の下に、この色でラベルが表示されます。 色は、定義済みの色名、または RGB および HEX 値で指定できます。
    • backgroundColor - オプションが選択されると、分類フォームの [現在の選択] の下に、この色でラベルがハイライト表示されます。 色は、定義済みの色名、または RGB および HEX 値で指定できます。
{ 
... 
 
"classificationMetadata": { 
    "primaryAttribute": "classification", 
    "defaultValue": "Public Data", 
    "classificationValueProperties": [ 
      { 
        "value": "Public Data", 
        "acronym": "Public Data", 
        "backgroundColor": "Green", 
        "textColor": "Black" 
      }, 
      { 
        "value": "Restricted", 
        "acronym": "Restricted", 
        "backgroundColor": "Yellow", 
        "textColor": "Black" 
      }, 
      { 
        "value": "Confidential", 
        "acronym": "Confidential", 
        "backgroundColor": "Red", 
        "textColor": "Black" 
      } 
    ] 
  } 
}

属性の定義

必須の attributes オブジェクトで定義された各属性は、分類フォームの入力フィールドに対応します。 各属性には、次のプロパティを定義できます。

  • label - 分類フォームで使用される属性のラベルを指定する必須プロパティ。
  • description - 入力フィールドのプレースホルダーとして使用される説明。
  • type - 属性のデータタイプを識別する必須プロパティ。 サポートされているデータ タイプは、文字列、日付、整数、float、Boolean です。
  • isRequired - 属性が必須かどうかを指定するブール値 (true または false)。 空の文字列として定義することはできません。
  • uiElement - 分類フォームで属性の UI エレメント タイプを識別する必須プロパティ。 設定可能な 7 つの値は、次のとおりです。
    • text - 1 行のテキスト ボックス。
    • checkbox - 標準のチェックボックス。
    • date - カレンダーから日付を選択できる日付ピッカー (DD/MM/YYYY 形式)。
    • single-select - 単一のオプションを選択できるドロップダウン メニュー。
    • multi-select - 複数のオプションを選択できるドロップダウン メニュー。
    • multi-grouped-select - 関連するオプション グループから個別のオプションを選択できるドロップダウン メニュー (ただし、最上位グループ自体は選択できません)。
    • multi-grouped-select-nested - 関連するオプション グループ、またはそれらのグループの個別のオプションを選択できるドロップダウン メニュー。
  • defaultValue - 属性に割り当てられたデフォルト値。 このプロパティは、単一選択、複数選択、複数グループ選択、複数グループ選択ネスト型の uiElement タイプに対してのみ設定できます。
  • defaultDateTimeline - defaultDateTimelineUnits と組み合わせて使用され、属性のデフォルトの日付を設定します。 このプロパティは日付 uiElement タイプに対してのみ設定できます。
  • defaultDateTimelineUnits - defaultDateTimeline と組み合わせて使用され、属性のデフォルトの日付を設定します。 設定可能な値は年、月、日です。 このプロパティは日付 uiElement タイプに対してのみ設定できます。
  • validValues - 分類フォームの単一選択または複数選択 uiElement タイプのドロップダウン メニューに表示されるオプションのリスト。 オプションが valueExpressionArcade 式によって生成される場合は、空の文字列として定義できます。
  • validValuesMap - 分類フォームの複数グループ選択または複数グループ選択ネスト型 uiElement タイプのドロップダウン メニューに表示されるオプションのマップ。 オプションが valueExpressionArcade 式によって生成される場合は、空の文字列として定義できます。
  • valueExpression - validValues および validValuesMap が定義されていないか、空の文字列として定義されている場合に、オプションのリストを返す Arcade 式。
  • isAttributeEnabled - 分類フォームで属性の表示/非表示を指定するブール値を返す Arcade 式。
  • attributeValidation - 分類フォームで属性に選択された値に基づいて、空の文字列またはエラー メッセージを返す Arcade 式。
  • arcadeResultLookup - valueExpression で定義された Arcade 式がリストを生成できるようにするキーと値のマップ。
  • attributeCategory - 分類フォームで属性が表示される attributeCategories セクションまたはタブ。
  • selectionDisplayOrder - 属性が selectionTextExpression テキストに表示される順序。
    注意:

    selectionTextExpression を省略するか、空の文字列として定義する場合、分類の 1 つ以上の属性に対してこのプロパティを定義する必要があります。

  • selectionDisplayLabel - selectionTextExpression テキストで使用される属性のラベル。
  • bannerOrder - 属性が bannerExpression テキストに表示される順序。
    注意:

    bannerExpression を省略するか、空の文字列として定義する場合、分類の 1 つ以上の属性に対してこれを定義する必要があります。

  • bannerLabel - bannerExpression テキストで使用される属性のラベル。
  • labelDelimiter - selectionTextExpression および bannerExpression テキストで属性のラベルと値を区切る区切り文字。
  • valueDelimiter - 複数選択 uiElement タイプで選択された値が selectionTextExpression および bannerExpression テキストに表示される際に、それらの値を区切る区切り文字。
  • attributeDelimiter - selectionTextExpression および bannerExpression テキストで属性とその前の属性を区切る区切り文字。
  • labelTooltip - 属性のラベルの横にある [情報] ボタン 情報 にポインターを合わせたときに表示されるヘルプ テキスト。
{ 
... 
 
"attributes": { 
    "classification": { 
      "label": "Classification", 
      "description": "Classification", 
      "type": "string", 
      "uiElement": "single-select", 
      "validValues": [{"label": "Public Data", "value": "Public Data"}, {"label": "Restricted", "value": "Restricted"}, {"label": "Confidential", "value": "Confidential"}], 
      "selectionDisplayOrder": 1, 
      "bannerOrder": 1, 
      "labelDelimiter": "", 
      "valueDelimiter": "-", 
      "attributeDelimiter": ";" 
    }, 
    "program": { 
      "label": "Program", 
      "description": "Program", 
      "type": "string", 
      "uiElement": "single-select", 
      "valueExpression": "function getProgramValidValues(schemaJsonString, valueJsonString, attributeId) {\n    var valueJson = Dictionary(valueJsonString)\n    var schemaJson = Dictionary(schemaJsonString)\n    if (!HasKey(valueJson, \"classification\"))\n        return null;\n    if (valueJson.classification == \"Public Data\")\n        return schemaJson.attributes[attributeId].arcadeResultLookup[\"Public_Data_List\"];\n    if (valueJson.classification == \"Restricted\")\n        return schemaJson.attributes[attributeId].arcadeResultLookup[\"Restricted_List\"];\n    if (valueJson.classification == \"Confidential\")\n        return schemaJson.attributes[attributeId].arcadeResultLookup[\"Confidential_List\"];\n    return null;\n}\ngetProgramValidValues(schemaJsonString, valueJsonString, attributeId)", 
      "arcadeResultLookup": { 
        "Public_Data_List": [{"label": "Intra-agency", "value": "Intra-agency"}, {"label": "Marketing", "value": "Marketing"}, {"label": "Promotional", "value": "Promotional"}], 
        "Restricted_List": [{"label": "Compliance", "value": "Compliance"}, {"label": "Financial", "value": "Financial"}, {"label": "Human Resources", "value": "Human Resources"}, {"label": "Market Data", "value": "Market Data"}, {"label": "PII", "value": "PII"}, {"label": "Proprietary", "value": "Proprietary"}], 
        "Confidential_List": [{"label": "Intellectual Property", "value": "Intellectual Property"}, {"label": "Legal", "value": "Legal"}, {"label": "Security", "value": "Security"}] 
      }, 
      "selectionDisplayOrder": 2, 
      "bannerOrder": 2, 
      "labelDelimiter": "", 
      "valueDelimiter": "-", 
      "attributeDelimiter": ";" 
    } 
  } 
}

レイアウトの定義

必須の layouts オブジェクトは、分類フォームに表示される属性の順序を指定します。 たとえば、次のものがあります。

  • default - 特定のレイアウトの詳細を含むオブジェクト。 オブジェクト内に次のプロパティを定義できます。
    • layoutElements - 分類フォームの属性とその順序をマッピングする必須オブジェクト。 オブジェクト内の各属性には、次のプロパティを定義できます。
      • formDisplayOrder - 分類フォームに属性が表示される順序を識別する必須の整数。
{ 
... 
 
"layouts": { 
    "default": { 
      "layoutElements": { 
        "classification": { 
          "formDisplayOrder": 1 
        }, 
        "program": { 
          "formDisplayOrder": 2 
        } 
      } 
    } 
  } 
}

詳細な例

次に、分類スキーマの詳細な例を示します。

注意:

以下のスキーマ例および ArcGIS/Classification GitHub リポジトリ内のサンプル スキーマは、組織のニーズを満たす分類スキーマを作成する際の参考としてご利用ください。

{  
  "name": "academic-institution-classification-schema",  
  "version": "2.0",  
  "grammarVersion": "2.0",  
  "helpURL": "https://ansible.hynes.com/portal/home/schema_help.pdf",  
  "helpTooltip": "Click to open the schema help document",  
  "bannerExpression": "",  
  "selectionTextExpression": "",  
  "attributeCategories": [], 
  "classificationMetadata": {  
    "primaryAttribute": "classification",  
    "defaultValue": "Public Data",  
    "classificationValueProperties": [  
      {  
        "value": "Public Data",  
        "acronym": "Public Data",  
        "backgroundColor": "Green",  
        "textColor": "Black"  
      },  
      {  
        "value": "Restricted",  
        "acronym": "Restricted",  
        "backgroundColor": "Yellow",  
        "textColor": "Black"  
      },  
      {  
        "value": "Confidential",  
        "acronym": "Confidential",  
        "backgroundColor": "Red",  
        "textColor": "Black"  
      }  
    ]  
  }, 
  "attributes": {  
    "classification": {  
      "label": "Classification",  
      "description": "Classification",  
      "type": "string",  
      "uiElement": "single-select",  
      "validValues": [{"label": "Public Data", "value": "Public Data"}, {"label": "Restricted", "value": "Restricted"}, {"label": "Confidential", "value": "Confidential"}],  
      "selectionDisplayOrder": 1,  
      "bannerOrder": 1,  
      "labelDelimiter": "",  
      "valueDelimiter": "-",  
      "attributeDelimiter": ";"  
    },  
    "program": {  
      "label": "Program",  
      "description": "Program",  
      "type": "string",  
      "uiElement": "single-select",  
      "valueExpression": "function getProgramValidValues(schemaJsonString, valueJsonString, attributeId) {\n    var valueJson = Dictionary(valueJsonString)\n    var schemaJson = Dictionary(schemaJsonString)\n    if (!HasKey(valueJson, \"classification\"))\n        return null;\n    if (valueJson.classification == \"Public Data\")\n        return schemaJson.attributes[attributeId].arcadeResultLookup[\"Public_Data_List\"];\n    if (valueJson.classification == \"Restricted\")\n        return schemaJson.attributes[attributeId].arcadeResultLookup[\"Restricted_List\"];\n    if (valueJson.classification == \"Confidential\")\n        return schemaJson.attributes[attributeId].arcadeResultLookup[\"Confidential_List\"];\n    return null;\n}\ngetProgramValidValues(schemaJsonString, valueJsonString, attributeId)",  
      "arcadeResultLookup": {  
        "Public_Data_List": [{"label": "Intra-agency", "value": "Intra-agency"}, {"label": "Marketing", "value": "Marketing"}, {"label": "Promotional", "value": "Promotional"}],  
        "Restricted_List": [{"label": "Compliance", "value": "Compliance"}, {"label": "Financial", "value": "Financial"}, {"label": "Human Resources", "value": "Human Resources"}, {"label": "Market Data", "value": "Market Data"}, {"label": "PII", "value": "PII"}, {"label": "Proprietary", "value": "Proprietary"}],  
        "Confidential_List": [{"label": "Intellectual Property", "value": "Intellectual Property"}, {"label": "Legal", "value": "Legal"}, {"label": "Security", "value": "Security"}]  
      },  
      "selectionDisplayOrder": 2,  
      "bannerOrder": 2,  
      "labelDelimiter": "",  
      "valueDelimiter": "-",  
      "attributeDelimiter": ";"  
    }  
  }, 
  "layouts": {  
    "default": {  
      "layoutElements": {  
        "classification": {  
          "formDisplayOrder": 1  
        },  
        "program": {  
          "formDisplayOrder": 2  
        }  
      }  
    }  
  } 
}