目的: JSON スキーマ を生成してビルドし、プラットフォーム に公開します
複雑さ: 初心者向け
所要時間: 20 分
前提条件: 資格情報を取得し、資格情報を確認します
HERE platform では、他のプラットフォーム ユーザーとパイプラインの間でデータを共有および転送するために使用されるスキーマを定義できます。 スキーマ は、カタログレイヤー内のパーティション の構造を記述する関連メッセージのコレクションです。 一連のアーティファクトで構成される高レベルの構造体です。
このチュートリアルでは、 JSON スキーマ を生成して構築し、プラットフォーム に公開する方法を示します。 公開されている JSON スキーマ に関する情報の取得方法および JSON スキーマ のダウンロード方法について説明します。
このチュートリアルでは、次のトピックについて説明します。
このチュートリアルを実行 するには、 CLI がインストールされ、プラットフォームとリポジトリ資格情報の両方がローカルマシンに設定されている必要があります。
プラットフォーム資格情報が正しく設定されていることを確認する には、「資格情報の確認」チュートリアルで予期した結果が返されていることを確認してください。
JSON スキーマ を生成します
JSON スキーマ を生成するに は、 OLP CLI を使用する方法と Maven 原型を使用する方法の 2 つの方法があります。
このチュートリアルでは、 OLP CLI を使用して JSON スキーマ を生成します。
OLP CLI には 、スキーマ の新しい Maven
プロジェクトを生成する olp schema generate
コマンドが用意されています。
com.here.platform.tutorial
グループ ID と generate_json_schema
アーティファクト ID を使用して、現在のディレクトリに JSON スキーマ プロジェクトを生成しましょう。
olp schema generate com.here.platform.tutorial generate_json_schema
注
グループ ID には、通常、などのグループ ID に対するチーム / 製品の階層が含まれている必要 com.some-company.automated-driving.schema
があります。 このようにして、異なるチームがスキーマを個別に管理できます。
スキーマ をアーティファクトサービスに展開すると、そのグループ ID が組織によって予約され、この場合は他のレルムで再利用できなくなります。 したがって com.example
、、 com.here.schema
、、などの汎用グループ ID の値を指定 com.here.example
すると、スキーマ をアーティファクトサービスリポジトリにアップロードできなくなり、カタログで使用したり、他のユーザーと共有したりできなくなります。
OLP CLI は次の出力を返します。
Schema has been successfully generated in /home/user/generate_json_schema.
JSON スキーマ が生成されたら、生成されたプロジェクトの構造を確認できます。
JSON スキーマ 構造体
olp schema generate
このコマンドは、次の構造のプロジェクトを生成します。
generate_json_schema/
├── ds
│ ├── pom.xml
│ └── src
│ ├── assembly
│ │ └── json.xml
│ └── main
│ └── resources
│ ├── renderers
│ │ └── ReadMe.txt
│ └── ResourcesReadMe.txt
├── json
│ ├── pom.xml
│ └── src
│ ├── assembly
│ │ └── json.xml
│ └── main
│ ├── json
│ │ └── com
│ │ └── here
│ │ └── platform
│ │ └── tutorial
│ │ └── generate_json_schema
│ │ └── v1
│ │ └── generate_json_schema.json
│ └── resources
│ └── description.md
├── pom.xml
└── schema.yml
上の構造から 、生成されたプロジェクトにds
、json
、モジュール、schema.yml
および pom.xml
ファイルが含まれていることがわかります。
ds
このモジュールには、 Data スキーマ ( DS; データセンター)バンドルが含まれています。 ds/src/main/resources/renderers
このフォルダーは、 HERE platform に公開された後にスキーマ にバンドルされる GeoJSON レンダラーを配置できる場所です。 レンダラーは JavaScript で記述され、 HERE platform ポータルのベース マップ の上にパーティション データ を表示するために使用されます。 詳細について は、 GeoJSON レンダラの実装のドキュメントを参照してください。
json
このモジュールには、スキーマ の JSON メッセージの定義が含まれています。 json/src/main/json/com/here/platform/tutorial/generate_json_schema/v1/generate_json_schema.json
このファイルは、データ形式を記述するメインの JSON ファイルです。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "mainMessageId",
"definitions": {
"MainMessage": {
"type": "object",
"properties": {
"lat": {
"description": "Latitude",
"type": "integer"
},
"lon": {
"description": "Longitude",
"type": "integer"
}
},
"required": [
"lat", "lon"
]
}
}
デフォルトのメイン JSON ファイルには、 2 つの必須プロパティ lat
および integer
タイプの lon
を含むデータ形式が記述されています。
メインの JSON ファイルの内容は 、 JSON 構文に準拠し、 JSON スキーマ を参照するプロパティを含み、そのスキーマ 仕様に従う必要があります。 これらの要件は、バリデータによって確認されます。
このjson/src/main/resources/description.md
ファイルは空のファイル で、スキーマ の詳細なドキュメントをマークダウン形式で保存できます。
pom.xml
スキーマ プロジェクトのルートにあるファイルには name
、、 description
、などのスキーマ の主な詳細情報 version
が含まれています。 pom.xml
のデフォルト値を上書きする場合 は、olp schema generate
コマンドの実行時に、name
、description
または version
のパラメータを指定します。
特定のスキーマ が依存している他のスキーマの宣言も pom.xml
、次の場所に含まれています。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.here.platform.tutorial</groupId>
<artifactId>generate_json_schema_v1</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>JSON Schema</name>
<description>JSON Schema project for OLP</description>
<inceptionYear>2022</inceptionYear>
<distributionManagement>
<repository>
<id>HERE_PLATFORM_ARTIFACT</id>
<layout>here</layout>
<url>here+artifact-service://artifact-service</url>
</repository>
</distributionManagement>
<parent>
<groupId>com.here.platform</groupId>
<artifactId>sdk-standalone-bom_2.12</artifactId>
<version>2.43.1</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<here.plugin.version>2.1.18</here.plugin.version>
<artifact.wagon.version>2.0.11</artifact.wagon.version>
</properties>
<repositories>
<repository>
<id>HERE_PLATFORM_ARTIFACT</id>
<layout>here</layout>
<url>here+artifact-service://artifact-service</url>
</repository>
</repositories>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<inherited>false</inherited>
<executions>
<execution>
<id>copy-schema</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echoproperties destfile="${project.build.directory}/build.properties"/>
<copy file="${project.basedir}/schema.yml" overwrite="true" todir="${project.build.directory}">
<filterset begintoken="${" endtoken="}" filtersfile="${project.build.directory}/build.properties"/>
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M2</version>
<executions>
<execution>
<id>enforce-property</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<property>project.groupId</property>
<message>Project groupId must be specified.</message>
<regex>^[a-zA-Z_]+[a-zA-Z0-9_-]*(\.[a-zA-Z0-9_]+[a-zA-Z0-9_-]*)+$</regex>
<regexMessage>Project groupId must be specified as reverse domain name.</regexMessage>
</requireProperty>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.6</version>
<inherited>false</inherited>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/schema.yml</file>
<type>yml</type>
<classifier>here-schema</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<flattenMode>bom</flattenMode>
<outputDirectory>${project.build.directory}</outputDirectory>
<flattenedPomFilename>${project.artifactId}-${project.version}.pom</flattenedPomFilename>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>com.here.platform.artifact</groupId>
<artifactId>artifact-wagon</artifactId>
<version>${artifact.wagon.version}</version>
</extension>
</extensions>
</build>
<modules>
<module>json</module>
<module>ds</module>
</modules>
</project>
schema.yml
プロジェクトのルートにあるファイルは、プロジェクトがスキーマ プロジェクトであることを示す記述子ファイルです。
name: "${project.name}"
summary: "${project.description}"
layerSchema: true
type: "json"
name
および summary
のプロパティは 、それぞれスキーマ の name
および description
を定義します。 デフォルト pom.xml
では、これらの値はファイルから取得されます。 一般的な目安 は、schema.yml
ファイル内のこれらのプロパティを変更せず、pom.xml
でのみ定義することです。
layerSchema
このスキーマ をスタンドアロンスキーマ として使用するかどうかを定義します。 これをに設定 false
すると、スキーマ は別のスキーマ の依存関係としてのみ使用され、プラットフォーム にも OLP CLI にも表示されなくなります。
注
プロジェクトがビルドされ、ルートフォルダーに schema.myl が含まれていない状態で展開された場合、スキーマ はプラットフォーム に表示されません。
JSON スキーマ プロジェクトを更新します
JSON スキーマ プロジェクトを作成したら、ニーズを反映してプロジェクトを更新できます。
このチュートリアルで json/src/main/json/com/here/platform/tutorial/generate_json_schema/v1/generate_json_schema.json
は、追加のプロパティを提供し documentation
、このスキーマ をファイルに記述することで、メインの JSON ファイルを更新します。
まず、メインの JSON ファイルの更新から始めましょう。
zoom_level
タイトル、 Zoom Level
説明 The relative vertical stacking of multiple points with the same latitude and longitude.
、およびタイプを含む新しいオプションプロパティ integer
を追加します。
更新されたメイン JSON ファイルは次のようになります。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "mainMessageId",
"definitions": {
"MainMessage": {
"type": "object",
"properties": {
"lat": {
"description": "Latitude",
"type": "integer"
},
"lon": {
"description": "Longitude",
"type": "integer"
},
"zoom_level":{
"description": "The relative vertical stacking of multiple points with the same latitude and longitude.",
"type": "integer"
}
},
"required": [
"lat", "lon"
]
}
}
}
次のステップでは、スキーマ に関するドキュメントを追加します。 olp schema generate
新しいスキーマ プロジェクトを生成するとき --documentation
に、パラメーターで OLP CLI コマンドを使用して、準備したドキュメントを追加できます。 ドキュメントをスキーマ プロジェクトに渡すには、 2 つの方法があります。 外部ドキュメントまたは特定の HERE ドキュメントを参照する場合は、 URL をドキュメントに渡すことができます。また、独自のスキーマ の説明を含める場合は、マークダウンファイルへのパスを指定することもできます。
すでに生成されたスキーマ プロジェクトがあり、ドキュメントを更新または追加する場合 は、json/src/main/resources/description.md
ファイルを更新するか、schema.yml
ファイルのdocUrl
フィールドを追加または更新する必要があります。
json/src/main/resources/description.md
次のドキュメントをファイルに追加します。
This schema was generated for the `Publish JSON schema to the Platform` tutorial.
The main json file describes the data format including the following properties required and optional parameters:
Required properties:
`lat` - the measurement of distance north or south of the Equator.
`lon` - the measurement east or west of the prime meridian.
Optional properties:
`zoom_level` - a number that defines how large or small the contents of a map appear in a map view.
スキーマ プロジェクトが更新されたら、プロジェクトを検証してパッケージ化し、変更内容がプロジェクト自体に影響を与えていないことを確認する必要があります。
JSON スキーマ を検証してパッケージ化します
OLP CLI に olp schema package
は、スキーマ プロジェクトをビルドおよび検証するためのコマンドが用意されています。
olp schema package
このコマンドは、スキーマ プロジェクトを更新し、プラットフォーム に展開する前にプロジェクトが有効であることを確認する場合に役立ちます。 スキーマ を変更しない場合は、このコマンドを使用する必要はありません。
スキーマ のビルド中に、プラグインの検証によって、 JSON スキーマ プロジェクトに有効なメイン JSON ファイルが含まれていることを確認します。 2 つのJSONSyntax
と JSONSchema
バリデータがあります。 JSONSyntax
バリデータは、ファイルの内容が構文的に正しい JSON であることを確認します。 JSONSchema
バリデータは、 JSON に $schema
スキーマ 仕様を定義し、その仕様に従うプロパティが含まれていることを確認します。 olp schema package
コマンドの実行後、json/target/json/META-INF/validation-results.json
ファイルに検索できる検証結果。
次の OLP CLI コマンドを使用して、更新された JSON スキーマ プロジェクトをビルドしましょう。
olp schema package --input /home/user/generate_json_schema
OLP CLI は次の出力を返します。
Schema has been built successfully.
上記のメッセージは、 JSON スキーマ プロジェクトが有効で、メインの JSON メッセージが Maven プラグインによって検証されたことを示しています。 次 json/target/json/META-INF/validation-results.json
のファイルが生成されます。
{
"passedValidators" : [ "JSONSyntax", "JSONSchema" ]
}
スキーマ プロジェクトに無効な JSON ファイルが含まれている場合、 olp schema package
コマンドは次の出力をログファイルへのパスで返します。このログファイルでは、プロジェクトの問題に関する追加情報を見つけることができます。
ERROR: Schema packaging failed.
Log file path: /tmp/olpcli2445382190186474494.log
スキーマ プロジェクトでバリデータを無効にするには 、 json/pom.xml
および ds/pom.xml
ファイルで jsonSyntax
および jsonSchema
を false
に設定します。
<plugin>
<groupId>com.here.platform.schema.maven_plugins</groupId>
<artifactId>json-validate-plugin</artifactId>
<version>${here.plugin.version}</version>
<executions>
<execution>
<id>validate</id>
<phase>compile</phase>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
<configuration>
<jsonSyntax>false</jsonSyntax>
<jsonSchema>false</jsonSchema>
</configuration>
</plugin>
注
プラグインを無効にすることはお勧めしません。無効にすると、スキームが正しく動作しなくなる可能性があります。
プロジェクトが検証およびパッケージ化されたら、プラットフォーム に公開できます。
olp schema put
OLP CLI コマンドを使用して、 JSON スキーマ をプラットフォーム に展開してみましょう。
olp schema put --input /home/user/generate_json_schema
OLP CLI は次の出力を返します。
WARNING: Please wait while the command is completed. This may take several minutes.
Schema hrn:here:schema::realm:com.here.tutorial:generate_json_schema_v1:1.0.0 has been created.
Please use 'olp schema show' command to get more information.
スキーマ が展開されると、 OLP CLI またはポータル で詳細を確認できます。
公開されたスキーマ の詳細情報を取得します
次 olp schema show
のコマンドを使用して、展開されたスキーマ についての詳細情報を取得しましょう。
olp schema show hrn:here:schema::realm:com.here.test:test_schema_v1:1.0.0
OLP CLI は、次の情報を返します。
Details of the JSON schema:
schema version 1.0.0
artifact id generate_json_schema_v1
group id com.here.platform.tutorial
type json
summary JSON Schema project for HERE Platform
Schema validation results:
module JSON syntax JSON schema
json true true
ds true true
Artifacts:
hrn:here:artifact::realm:com.here.platform.tutorial:generate_json_schema_v1_json:1.0.0
hrn:here:artifact::realm:com.here.platform.tutorial:generate_json_schema_v1_ds:1.0.0
上記の出力から、展開されたスキーマ 、特にスキーマ version
、 group id
、、についての一般的な情報を取得します。 artifact id
スキーマ type
、およびスキーマ summary
。 スキーマ の検証結果は、どのプラグインがどのモジュールに使用されたかを示します。 出力の最後の情報はアーティファクトです。
JSON スキーマ を展開すると、次の 2 つのアーティファクトも展開されます。 _json
および _ds
。
_json
アーティファクトには、スキーマ の定義 JSON メッセージを含む zip ファイルが含まれています。 アーティファクトには、メインの JSON ファイルと JSON 形式の検証結果が含まれています。 オプションのファイルはです description.md
。 このファイルにはドキュメントが含まれています
注
documentation.md
ファイルは docUrl
、ファイルの schema.yml
プロパティで上書きできます。 に docUrl
は高い優先順位が付け docUrl
られているため、 documentation.md と docUrl の両方が指定されている場合は、が使用されます。
スキーマ の生成時に documentation.md
ファイルを上書きするに olp schema generate
は、コマンドで --doc-url <URL to the documentation>
パラメーターを使用します。
_ds
アーティファクトには、 JSON メッセージとデータスキーマ (DS) バンドルを含む zip ファイルが含まれています。 _ds
アーティファクトをダウンロードするには 、「 Download スキーマ 」セクションを参照してください。
スキーマ をダウンロードします
_ds
JSON メッセージを含むパッケージをダウンロードする olp schema get
ために、 OLP CLI にはコマンドが用意されています。
olp schema get hrn:here:schema::realm:com.here.test:test_schema_v1:1.0.0 --output ~/Desktop/ds_package
OLP CLI は次の出力を返します。
Schema package was successfully downloaded to ~/Desktop/ds_package/generated_schema_v1_ds-1.0.0.zip
ダウンロードされた zip ファイルの構造は次のとおりです。
generated_schema_v1_ds-1.0.0/
├── com
│ └── here
│ └── platform
│ └── tutorial
│ └── generate_json_schema
│ └── v1
│ └── generate_json_schema.json
├── META-INF
│ ├── layer.manifest.json
│ └── validation-results.json
├── renderers
│ └── ReadMe.txt
└── ResourcesReadMe.txt
上記のプロジェクト構造から _ds
、パッケージにメイン generate_json_schema.json
メッセージ、 validation-results.json
検証結果、 layer.manifest.json
およびトップレベルメッセージを宣言するマニフェストが含まれていることがわかります。
Maven 原型を使用します
スキーマを生成、検証、アップロードするオプションが追加されました。 JSON スキーマ プロジェクトは Maven プロジェクトなので 'Maven のコマンドを使用してスキーマを操作できます この目的のために、 SDK for Java & Scala では json_archetype
、を使用して JSON スキーマ プロジェクトを生成できるを提供しています。
注
以下のコマンドを実行するに Maven
は、ローカルマシンにがインストールされている必要があります。
で JSON スキーマ プロジェクトを生成 json_archetype
するには、 olp schema generate com.here.platform.tutorial generate_json_schema
JSON スキーマ を生成 セクションのコマンドと同じように、次の Maven コマンドを使用します。
mvn archetype:generate -DarchetypeGroupId=com.here.platform.schema \
-DarchetypeArtifactId=json_archetype \
-DarchetypeVersion=2.1.129 \
-DartifactId=generate_json_schema \
-Dversion=1.0.0 \
-DgroupId=com.here.platform.tutorial \
-DmajorVersion=1
mvn archetype:generate -DarchetypeGroupId=com.here.platform.schema ^
-DarchetypeArtifactId=json_archetype ^
-DarchetypeVersion=2.1.129 ^
-DartifactId=generate_json_schema ^
-Dversion=1.0.0 ^
-DgroupId=com.here.platform.tutorial ^
-DmajorVersion=1
生成されたスキーマ を検証してビルドするに は、olp schema package
コマンドに類似したプロジェクトのルートから mvn install
コマンドを使用します。
olp schema put
コマンドを使用せ mvn deploy
ずにスキーマ を展開するには、生成されたプロジェクトのルートからコマンドを実行します。
スキーマ を展開したら、このチュートリアルで説明した OLP CLI コマンドを使用して、展開済みのスキーマ を検査できます。
結論
このチュートリアルでは、 OLP CLI および Maven を使用して JSON スキーマ をプラットフォーム に生成、構築、および公開する方法を練習しました。また、 JSON スキーマ 構造体と JSON スキーマを操作できる OLP CLI コマンドについても学習しました。
- OLP CLI を使用してスキーマを操作する方法の詳細について は、『 OLP CLI ガイド』を参照してください。