目的: Protobuf スキーマ を生成してビルドし、プラットフォーム に公開します
複雑さ: 初心者向け
所要時間: 20 分
前提条件: 資格情報を取得し、資格情報を確認します
HERE platform では、他のプラットフォーム ユーザーとパイプラインの間でデータを共有および転送するために使用されるスキーマを定義できます。 HERE platform ポータルは、スキーマ アーティファクトを使用して、プラットフォーム に保存されているデータを動的にデコードします。 プラットフォーム は、 Protobuf ファイルを使用してこれらのスキーマを定義します。 スキーマ は、カタログレイヤー内のパーティション の構造を記述する、関連する Protobuf メッセージのコレクションです (1 つ以上の .proto ファイルに保存されます ) 。 一連のアーティファクトで構成される高レベルの構造体です。
このチュートリアルでは、 Protobuf スキーマ を生成して構築し、プラットフォーム に公開する方法を示します。 公開されている Protobuf スキーマ に関する情報の取得方法および Protobuf スキーマ のダウンロード方法について説明します。
このチュートリアルでは、次のトピックについて説明します。
このチュートリアルでは 、 CLI をインストールし、ローカル マシンにプラットフォーム とレポジトリ資格情報 の両方を設定する必要があります。
プラットフォーム資格情報が正しく設定されていることを確認する には、「資格情報の確認」チュートリアルで予期した結果が返されていることを確認してください。
Protobuf スキーマ を生成します
Protobuf スキーマ を生成するに は、 OLP CLI を使用する方法と Maven 原型を使用する方法の 2 つの方法があります。 このチュートリアルでは、 OLP CLI を使用して Protobuf スキーマ を生成します。 OLP CLI には 、スキーマ の新しいMaven
プロジェクトを生成するolp schema generate
コマンドが用意されています。
注
は olp schema generate
、 Protobuf スキーマ 生成に Java JDK を必要とします。 JDK ではなく Java JRE をインストールすると、スキーマ の生成に失敗します。
com.here.platform.tutorial
グループ ID と generate_protobuf_schema
アーティファクト ID を使用して、現在のディレクトリに Protobuf スキーマ プロジェクトを生成しましょう。
olp schema generate com.here.platform.tutorial generate_protobuf_schema --type proto
注
グループ 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_protobuf_schema.
Protobuf スキーマ が生成されたら、生成されたプロジェクトの構造を確認できます。
Protobuf スキーマ 構造体
olp schema generate
このコマンドは、次の構造のプロジェクトを生成します。
generate_protobuf_schema/
├── ds
│ ├── pom.xml
│ └── src
│ ├── assembly
│ │ └── proto.xml
│ └── main
│ └── resources
│ ├── renderers
│ │ └── ReadMe.txt
│ └── ResourcesReadMe.txt
├── java
│ └── pom.xml
├── proto
│ ├── pom.xml
│ └── src
│ ├── assembly
│ │ └── proto.xml
│ └── main
│ ├── proto
│ │ └── com
│ │ └── here
│ │ └── platform
│ │ └── tutorial
│ │ └── generate_protobuf_schema
│ │ └── v1
│ │ └── generate_protobuf_schema.proto
│ └── resources
│ └── description.md
├── scala_2.12
│ └── pom.xml
├── pom.xml
└── schema.yml
上の構造から 、生成されたプロジェクトにds
、java
、proto
、scala_2.12
モジュール、schema.yml
およびpom.xml
ファイルが含まれていることがわかります。
ds
このモジュールには、パーティションの動的デコードに使用される Data スキーマ ( DS; データソース)バンドルが含まれています。 スキーマ HERE の GeoJSON レンダラーを配置できます。 HERE platform ポータルでは、レンダラーを使用してベース マップ の上にパーティション データ を表示します。 ds/src/main/resources/renderers
このフォルダーは、 HERE platform に公開された後にスキーマ にバンドルされる GeoJSON レンダラーを配置できる場所です。 レンダラーは JavaScript で記述され、 HERE platform ポータルのベース マップ の上にパーティション データ を表示するために使用されます。 詳細について は、 GeoJSON レンダラの実装のドキュメントを参照してください。
proto
このモジュールには、スキーマ の Protobuf メッセージの定義が含まれています。 proto/src/main/proto/com/here/platform/tutorial/generate_protobuf_schema/v1/generate_protobuf_schema.proto
このファイルは、データ形式を記述するメインの Protobuf ファイルです。
syntax = "proto3";
package com.here.platform.tutorial.generate_protobuf_schema.v1;
message MainProtobufMessage {
int32 lat = 1;
int32 lon = 2;
}
デフォルトのメイン Protobuf ファイルには、 2 つの必須プロパティ lat
および lon
int32
タイプを含むデータ形式が記述されています。
メイン Protobuf ファイルの内容は 、 Protobuf 構文に準拠している必要があります。
このproto/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_protobuf_schema_v1</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>Schema</name>
<description>Schema project for OLP</description>
<inceptionYear>2019</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.54.3</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>
<protobuf.version>3.11.4</protobuf.version>
<protoc.version>3.11.4</protoc.version>
<here.plugin.version>2.1.20</here.plugin.version>
<artifact.wagon.version>2.0.19</artifact.wagon.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
<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.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>com.here.platform.schema.maven_plugins</groupId>
<artifactId>proto-unpack-plugin</artifactId>
<versionRange>[0.0.1,)</versionRange>
<goals>
<goal>unpack</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>false</runOnIncremental>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<versionRange>[0.0.1,)</versionRange>
<goals>
<goal>compile</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>false</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
<plugin>
<groupId>com.here.platform.schema.maven_plugins</groupId>
<artifactId>proto-unpack-plugin</artifactId>
<version>${here.plugin.version}</version>
<executions>
<execution>
<id>unpack</id>
<phase>validate</phase>
<goals>
<goal>unpack</goal>
</goals>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/proto</outputDirectory>
</configuration>
</plugin>
<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>proto</module>
<module>java</module>
<module>scala_2.12</module>
<module>ds</module>
</modules>
</project>
schema.yml
プロジェクトのルートにあるファイルは、プロジェクトがスキーマ プロジェクトであることを示す記述子ファイルです。
name: "${project.name}"
summary: "${project.description}"
layerSchema: true
type: "proto"
name
およびsummary
のプロパティは 、それぞれスキーマ のname
およびdescription
を定義します。 デフォルト pom.xml
では、これらの値はファイルから取得されます。 一般的な目安 は、schema.yml
ファイル内のこれらのプロパティを変更せず、pom.xml
でのみ定義することです。 スキーマ の命名およびスキーマ の説明については、次のベストプラクティスに従うことをお勧めします
layerSchema
このスキーマ をスタンドアロンスキーマ として使用するかどうかを定義します。 これをに設定 false
すると、スキーマ は別のスキーマ の依存関係としてのみ使用され、プラットフォーム にも OLP CLI にも表示されなくなります。
注
プロジェクトがビルドされ、ルートフォルダーに schema.yml ファイルがない状態で展開された場合、スキーマ はプラットフォーム に表示されません。
既存の Protobuf スキーマ で拡張
Protobuf スキーマ プロジェクトを作成したら、他の Protobuf スキーマ で拡張できます。
このチュートリアルでは proto/src/main/proto/com/here/platform/tutorial/generate_protobuf_schema/v1/generate_protobuf_schema.proto
、追加のプロパティを提供し documentation
、このスキーマ をファイルに記述することで、メインの Protobuf ファイルを更新します。
まず、 com.here.schema.rib:address-attributes_v2
依存関係としてパブリックスキーマ を追加します。 version
プロパティを指定する必要はあり ません。このプロパティは、 Java/Scala Data SDK の BOM ファイルから取得されます。 HERE 利用可能な依存関係のリストを見つけることができます
ファイルに依存関係 generate_protobuf_schema/proto/pom.xml
を追加します。
<dependency>
<groupId>com.here.schema.rib</groupId>
<artifactId>address-attributes_v2_proto</artifactId>
<type>zip</type>
</dependency>
ファイルに依存関係 generate_protobuf_schema/java/pom.xml
を追加 :
<dependency>
<groupId>com.here.schema.rib</groupId>
<artifactId>address-attributes_v2_java</artifactId>
<type>jar</type>
</dependency>
ファイルに依存関係 generate_protobuf_schema/scala_2.12/pom.xml
を追加 :
<dependency>
<groupId>com.here.schema.rib</groupId>
<artifactId>address-attributes_v2_scala_2.12</artifactId>
<type>jar</type>
</dependency>
com.here.schema.rib:address-attributes_v2
スキーマ は、アドレッシング情報を含むアドレスアトリビューションモデルを提供します。 これらのモデルは、メインのスキーマ メッセージの定義に使用される場合があります。 特に、スキーマ は com.here.schema.rib.v2.PostalCode
、ファイルで定義 com/here/schema/rib/v2/address_attributes.proto
されている郵便番号を記述するモデルを提供します。
postal_code
type の新しいプロパティを com.here.schema.rib.v2.PostalCode
メインの Protobuf ファイルに追加します。 更新されたメイン Protobuf ファイルは次のようになります。
syntax = "proto3";
package com.here.platform.tutorial.generate_protobuf_schema.v1;
import "com/here/schema/rib/v2/address_attributes.proto";
message MainProtobufMessage {
int32 lat = 1;
int32 lon = 2;
com.here.schema.rib.v2.PostalCode postal_code = 3;
}
Protobuf コードのスタイル設定のベストプラクティスに従うことをお勧めします。
次のステップでは、スキーマ に関するドキュメントを追加します。
olp schema generate
新しいスキーマ プロジェクトを生成するとき --documentation
に、パラメーターで OLP CLI コマンドを使用して、準備したドキュメントを追加できます。
ドキュメントをスキーマ プロジェクトに渡すには、次の 2 つの方法があります。
- 外部ドキュメントまたは特定の HERE ドキュメントを参照する場合は、 URL をドキュメントに渡します。
- 独自のスキーマ の説明を含める場合は、マークダウンファイルへのパスを指定します。
すでに生成されたスキーマ プロジェクトがあり、ドキュメントを更新または追加する場合 は、proto/src/main/resources/description.md
ファイルを更新するか、schema.yml
ファイルのdocUrl
フィールドを追加または更新する必要があります。
proto/src/main/resources/description.md
次のドキュメントをファイルに追加します。
This schema was generated for the `Publish Protobuf schema to the Platform` tutorial.
The main protobuf file describes the data format including the following properties:
`lat` - the measurement of distance north or south of the Equator.
`lon` - the measurement east or west of the prime meridian.
`postal_code` - represents the code generated by the government to facilitate mail delivery.
スキーマ プロジェクトが更新されたら、プロジェクトを検証してパッケージ化し、変更内容がプロジェクト自体に影響を与えていないことを確認する必要があります。
Protobuf スキーマ を検証してパッケージ化します
OLP CLI に olp schema package
は、スキーマ プロジェクトをビルドおよび検証するためのコマンドが用意されています。
olp schema package
このコマンドは、スキーマ プロジェクトを更新し、プラットフォーム に展開する前にプロジェクトが有効であることを確認する場合に役立ちます。 スキーマ を変更しない場合は、このコマンドを使用する必要はありません。
スキーマ のビルド中に、次の検証プラグインによって、 Protobuf スキーマ プロジェクトに有効なメイン Protobuf ファイルが含まれていることが確認されます。
GoogleStyle
バリデータ は、スキーマメッセージが Google の Protobuf スタイルガイドに従っていることを確認します。 FileExtension
バリデータ .proto
は、すべての Protobuf ファイルが拡張子を使用していることを確認します。 MajorVersionInPackage
バリデータによって、アーティファクトのメジャーバージョンがパッケージに含まれていることが確認されます。 たとえば、バージョン 2.3 のパッケージには「 v2 」が含まれている必要があります。" com.here.platform.schema.foo.v2" 。 BackwardsCompatibility
バリデータ .proto
は、特定のメジャーバージョン内のファイルの変更内容が下位互換性があることを確認します。 変更内容を更新するには、メジャーバージョンの更新が必要です。 バリデータは、次の変更を探します。 - ファイルが削除されました
- メッセージが削除されました
- フィールドが削除されました
- フィールドタイプが変更されました
- フィールドラベルが変更されました
- フィールド番号が変更されました
- 列挙型 (enum) を削除しました
- 列挙型 (enum) 値が削除されました
- 列挙型 (enum) 値が変更されました
- プロトタイプの構文が変更されました
PackageConsistency
バリデータは、 Protobuf ソースファイルのディレクトリツリーが、個々のファイルの Protobuf パッケージ宣言に対応していることを確認します。
olp schema package
コマンド の実行後、proto/target/proto/META-INF/validation-results.json
ファイルに検証結果が表示されます。
次の OLP CLI コマンドを使用して、更新された Protobuf スキーマ プロジェクトをビルドしましょう。
olp schema package --input /home/user/generate_protobuf_schema
OLP CLI は次の出力を返します。
Schema has been packaged successfully.
上記のメッセージは、 Protobuf スキーマ プロジェクトが有効で、メインの Protobuf メッセージが Maven プラグインによって検証されたことを示しています。 次 proto/target/proto/META-INF/validation-results.json
のファイルが生成されます。
{
"passedValidators" : [ "GoogleStyle", "FileExtension", "MajorVersionInPackage", "BackwardsCompatibility" ]
}
スキーマ プロジェクトに無効なメインメッセージファイルがある場合、 olp schema package
コマンドは次の出力をログファイルへのパスとともに返します。このログファイルでは、プロジェクトで発生した問題についての追加情報を確認できます。
ERROR: Schema packaging failed.
Log file path: /tmp/olpcli2202976880595062312.log
スキーマ プロジェクトでバリデータを無効にするには 、 proto/pom.xml
および ds/pom.xml
ファイルでgoogleStyle
、fileExtension
、backwardsCompatibility
、majorVersionInPackage
、packageConsistency
、、の設定をfalse
に設定します。
<plugin>
<groupId>com.here.platform.schema.maven_plugins</groupId>
<artifactId>proto-validate-plugin</artifactId>
<version>${here.plugin.version}</version>
<executions>
<execution>
<id>validate</id>
<phase>compile</phase>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
<configuration>
<googleStyle>false</googleStyle>
<fileExtension>false</fileExtension>
<backwardsCompatibility>false</backwardsCompatibility>
<majorVersionInPackage>false</majorVersionInPackage>
<ignorePackages>
<ignorePackage>google.protobuf</ignorePackage>
</ignorePackages>
</configuration>
</plugin>
注
プラグインを無効にすることはお勧めしません。無効にすると、スキームが正しく動作しなくなる可能性があります。
プロジェクトが検証およびパッケージ化されたら、プラットフォーム に公開できます。
olp schema put
OLP CLI コマンドを使用して、 Protobuf スキーマ をプラットフォーム に展開してみましょう。
olp schema put --input /home/user/generate_protobuf_schema
OLP CLI は次の出力を返します。
WARNING: Please wait while the command is completed. This may take several minutes.
Schema hrn:here:schema::olp-here:com.here.tutorial:generate_protobuf_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::olp-here:com.here.tutorial:generate_protobuf_schema_v1:1.0.0
OLP CLI は、次の情報を返します。
Details of the Schema schema:
schema version 1.0.0
artifact id generate_protobuf_schema_v1
group id com.here.platform.tutorial
type proto
summary Schema project for OLP
Schema validation results:
module backwards compatibility file extension google style major version in package package consistency
proto true true true true false
ds false false false false true
Artifacts:
hrn:here:artifact::olp-here:com.here.platform.tutorial:generate_protobuf_schema_v1_java:1.0.0
hrn:here:artifact::olp-here:com.here.platform.tutorial:generate_protobuf_schema_v1_proto:1.0.0
hrn:here:artifact::olp-here:com.here.platform.tutorial:generate_protobuf_schema_v1_scala_2.12:1.0.0
hrn:here:artifact::olp-here:com.here.platform.tutorial:generate_protobuf_schema_v1_ds:1.0.0
上記の出力から、展開されたスキーマ 、特にスキーマ version
、 group id
、、についての一般的な情報を取得します。 artifact id
スキーマ type
、およびスキーマ summary
。 スキーマ の検証結果は、どのプラグインがどのモジュールに使用されたかを示します。 出力の最後のセクションには、アーティファクトの詳細が含まれています。
Protobuf スキーマ を展開すると、次の 4 つのアーティファクトも展開されます。_proto
、 _ds
、_java
、 _scala_2.12
。
_proto
アーティファクトには、 Protobuf メッセージソースを含む zip ファイルが含まれています。 アーティファクトには、メインの Protobuf ファイルと JSON 形式の検証結果が含まれています。 オプションのファイルはです description.md
。 このファイルにはドキュメントが含まれています
注
documentation.md
ファイルは 、schema.yml
ファイルのdocUrl
プロパティで上書きできます。 に docUrl
はより高いプライオリティが設定 されているため、documentation.md
とdocUrl
の両方を指定した場合は、docUrl
が使用されます。
スキーマ の生成時に documentation.md
ファイルを上書きするに olp schema generate
は、コマンドで --doc-url <URL to the documentation>
パラメーターを使用します。
_ds
アーティファクトには、 Protobuf メッセージとデータスキーマ (DS) バンドルを含む zip ファイルが含まれています。 _ds
アーティファクトをダウンロードするには 、「 Download スキーマ 」セクションを参照してください。
_java
アーティファクトには、 Java 言語の Protobuf バインディングを含む JAR ファイル が含まれています。
_scala_2.12
アーティファクトには、 Scala 2.12 言語の Protobuf バインディングを含む JAR ファイル が含まれています。
スキーマ をダウンロードします
_ds
Protobuf メッセージを含むパッケージをダウンロードする olp schema get
ために、 OLP CLI にはコマンドが用意されています。
olp schema get hrn:here:schema::olp-here:com.here.tutorial:generate_protobuf_schema_v1:1.0.0 --output ~/Desktop/ds_package
OLP CLI は次の出力を返します。
Schema package was successfully downloaded to ~/Desktop/ds_package/generate_protobuf_schema_v1_ds-1.0.0.zip
ダウンロードされた zip ファイルの構造は次のとおりです。
generate_protobuf_schema_v1_ds-1.0.0/
├── com
│ └── here
│ └── platform
│ └── tutorial
│ └── generate_protobuf_schema
│ └── v1
│ └── generate_protobuf_schema.proto
├── google
│ └── protobuf
│ ├── any.proto
│ ├── api.proto
│ ├── compiler
│ │ └── plugin.proto
│ ├── descriptor.proto
│ ├── duration.proto
│ ├── empty.proto
│ ├── field_mask.proto
│ ├── source_context.proto
│ ├── struct.proto
│ ├── timestamp.proto
│ ├── type.proto
│ └── wrappers.proto
├── META-INF
│ ├── layer.fds
│ ├── layer.manifest.json
│ └── validation-results.json
├── renderers
│ └── ReadMe.txt
└── ResourcesReadMe.txt
上記のプロジェクト構造から _ds
、パッケージにメイン generate_protobuf_schema.proto
メッセージ、 validation-results.json
検証結果、 layer.manifest.json
およびトップレベルメッセージを宣言するマニフェストが含まれていることがわかります。 また _ds
、このモジュールには com.google.protobuf
、宣言 されたプロトコルバッファの既知のタイプを持つパッケージが含まれています。
Maven 原型を使用します
スキーマを生成、検証、およびアップロードするための追加のオプションがあります。 Protobuf スキーマ プロジェクトは Maven プロジェクトなので 'Maven のコマンドを使用してスキーマを操作できます この目的のために、 Java & Scala 用の Data SDK には project_archetype
、を使用して Protobuf スキーマ プロジェクトを生成できるが用意されています。
注
以下のコマンドを実行するに Maven
は、ローカルマシンにがインストールされている必要があります。
で Protobuf スキーマ プロジェクトを生成 project_archetype
するには、 olp schema generate com.here.platform.tutorial generate_protobuf_schema
Protobuf スキーマ を生成 セクションのコマンドと同じように、次の Maven コマンドを使用します。
mvn archetype:generate -DarchetypeGroupId=com.here.platform.schema \
-DarchetypeArtifactId=project_archetype \
-DarchetypeVersion=2.1.129 \
-DartifactId=generate_protobuf_schema \
-Dversion=1.0.0 \
-DgroupId=com.here.platform.tutorial \
-DmajorVersion=1
mvn archetype:generate -DarchetypeGroupId=com.here.platform.schema ^
-DarchetypeArtifactId=project_archetype ^
-DarchetypeVersion=2.1.129 ^
-DartifactId=generate_protobuf_schema ^
-Dversion=1.0.0 ^
-DgroupId=com.here.platform.tutorial ^
-DmajorVersion=1
生成されたスキーマ を検証してビルドするに は、olp schema package
コマンドに類似したプロジェクトのルートからmvn install
コマンドを使用します。
olp schema put
コマンドを使用せ mvn deploy
ずにスキーマ を展開するには、生成されたプロジェクトのルートからコマンドを実行します。
スキーマ を展開した後、このチュートリアルで説明した OLP CLI コマンドを使用して、そのを検査できます。
ベストプラクティス
この章では、スキーマの作成および整理に関するベストプラクティスについて説明します。 これらのガイドラインに従うことで、 HERE platform の一般的な使用感を改善し、スキーマ をプラットフォーム にアップロードするとき、またはローカルにインストールするときのエラーを最小限に抑えることができます。
スキーマ の命名
スキーマの名前を 30 文字に制限してください。 このようにすると、スキーマ 名が 1 行に収まり、 HERE platform ポータルで簡単に読み取ることができます。
スキーマ プロジェクトの POM ファイルで、スキーマ の名前を指定できます。 generate_protobuf_schema/pom.xml
スキーマ の説明
スキーマの説明に、スキーマの目的を含めます。 また、スキーマが他のスキーマに依存している場合は、これらの依存関係を説明にも一覧表示してください。
スキーマ の説明をわかりやすく整理するには、 250 文字に制限してください。 これにより、スキーマリスト内の 3 行のテキストに変換されます( HERE platform ポータル > データ > スキーマを参照)。
パッケージの命名
スキーマ をプラットフォーム にアップロードすると、グループ ID とアーティファクト ID を使用してスキーマの HERE リソースネーム ( HERE リソースネーム )が生成されます。
パッケージ名は、 Protobuf 、 Java 、および Scala のパッケージ名で使用されます。
では groupId
、会社の逆のドメイン名を使用します。 さらに、チーム / 製品の階層をgroupId
に追加する必要 があります ( 例 : com.some-company.automated-driving.schema
) 。
注
スキーマ がアーティファクトサービスに展開されている場合、その groupId
はスキーマ 所有者の組織によって予約されています。 他の組織のユーザーが同じスキーマを共有している場合 groupId
、そのユーザーはスキーマを展開できません。 そのため com.example
、com.here.schema
com.here.example
などの一般的なgroupId
値を使用 すると、スキーマ を Artifact Service レポジトリにアップロードできなくなり、カタログで使用したり、他のユーザーと共有したりできなくなります。
アーティファクト ID には、など、プロジェクトにパッケージ化されているスキーマのタイプに固有の名前 building-footprints
を使用します。 アーティファクト ID をできるだけ短くしてください。
Java パッケージの命名規則に従うことをお勧めします。
バージョン管理
スキーマ のバージョンを指定するには、セマンティックバージョニングシステム( SemVer 2.0.0 )を使用します。
ファイルの命名
スキーマ のすべての Protobuf ファイル .proto
に拡張子が付いていることを確認してください。
.proto
ファイルの命名に snake_case
は、スタイルを使用します。 building_footprints_partition.proto
locations_partition.proto
およびは、適切な Protobuf ファイル名の表示例です。
パッケージの構造化
Protobuf ソースファイルのディレクトリツリーが、個 .proto
々のファイルの Protobuf パッケージ名に対応していることを確認してください。 たとえば proto/src/main/proto/com/here/example/v1/test_schema.proto
、ファイルには次のパッケージ宣言が含まれている必要があります。com.here.example.v1
。
スキーマ で他のスキーマの Protobuf ファイルを使用している場合は import
、個 .proto
々のファイルのステートメントに、インポートされたリソースへのパスが次の形式で含まれていることを確認してください。
パッケージ名の宣言 + imported.posto ファイル名。スラッシュで区切ります
コードのスタイル設定
Protobuf コードには、 Google の Proto3 言語ガイドを使用してください。 および Google の Protobuf スタイルガイドに従って 、コード内のメッセージ、フィールド、および列挙体の名前を確認します。
結論
このチュートリアルでは、 OLP CLI および Maven を使用して Protobuf スキーマ をプラットフォーム に生成、構築、および公開する方法を練習しました。また、 Protobuf スキーマ 構造体と Protobuf スキーマを操作できる OLP CLI コマンドについても学習しました。