CSVW との比較
非公式翻訳 (Unofficial translation). これはデータパッケージスタンダードの有志による日本語訳です。 正典は英語原典 datapackage.org 。未訳の箇所は英語の原文を参照してください。
| 著者 | Peter Desmet, Evgeny Karev, Sara Petti |
|---|
2016 年、W3C により設立されたワーキンググループが、CSV ファイルを文書化しアクセスするための一連の勧告を作成した。これらは総称して CSVW on the Web (CSVW) と呼ばれる。CSVW はデータパッケージスタンダードと多くの類似点を示す。
以下では、CSVW とデータパッケージの(非)類似点の概観を示す。
適用範囲
CSVW は、区切りテキストファイル(CSV、TSV)のみを記述するための一連の仕様である(すなわち Model for Tabular Data and Metadata on the Web と Metadata Vocabulary for Tabular Data)。
データパッケージは、データセット・データファイル・表形式データを記述するための一連の仕様である。表形式でないデータファイルを記述でき、表形式であるもののための追加の仕様(すなわち Table Dialect と テーブルスキーマ)も含む。
保守
CSVW は 2016 年に公開された。そのワーキンググループは当時すでに解散していた。現在はコミュニティグループが存在するものの、標準に変更を加える権限を持たない。
データパッケージは 2012 年に公開され、2017 年に v1.0 へ、2024 年に v2.0 へと更新された。Open Knowledge Foundation (OKFN) によって保守されている。変更の要望は誰でも GitHub プルリクエストとして提案でき、複数の組織のメンバーからなるワーキンググループによって決定される。
採用とソフトウェアの対応状況
CSVW の採用に関する文書は見つけられなかったが、Swirrl が csvw.org でウェブサイトを運営しており、標準の解説とソフトウェアツールの概観を提供している。これらの多くは変換ツールだが、4 つのプログラミング言語(Java、Python、R、Ruby)向けにソフトウェアライブラリが提供されており、Python がもっとも人気がある(37 スター)。注目すべきは CSV lint で、これは CSV ファイルを検証するオンラインツールである。
データパッケージは幅広い組織やプロジェクトによって採用されており、その多くが標準を拡張しソフトウェアを作成してきた。ソフトウェアライブラリは 9 つのプログラミング言語(Go、Java、Javascript、Julia、PHP、Python、R、Ruby、Swift)向けに提供されており、Python がもっとも人気がある(708 スター)。これらはすべて、GitHub 上の Frictionless Data 組織の下でオープンソースソフトウェアとして保守されている。注目すべきは Open Data Editor で、これは非技術者向けの、フル機能を備えたデータパッケージエディタである。
拡張性と他の標準の利用
CSVW は他の標準(JSON-LD、XML Schema Datatypes、Compact URIs など)を広範に利用し、それらの使い方を定義している。また、CSVW を JSON や RDF へ変換する方法に関する仕様も持つ。CSVW は JSON Schema としては定義されていない。
データパッケージは、よく使われるプロパティ(description、contributors、licences、sources など)について独自のプロパティを定義しているが、いずれも必須ではない。利用者は他の標準のプロパティをカスタムプロパティとして含めることができる。データパッケージは JSON Schema として定義され、拡張可能となるよう設計されている。開発者は $schema で JSON スキーマを参照することでプロパティを追加または拡張でき、それらは検証ソフトウェアによって自動的に認識される。また、データパッケージを DataCite や DCAT といった他のメタデータ標準へ変換するソフトウェアも提供されている。
データとメタデータのリンク
CSVW はメタデータの所在を特定する複数の方法を定義している。
データパッケージのメタデータは、datapackage.json という名前のディスクリプタファイルに記述される。このファイルは resource.path を用いてデータファイルへリンクし、外部の dialect・スキーマ・(ドメイン固有の)仕様を参照できる。
プロパティの比較
以下は、CSVW の Metadata Vocabulary for Tabular Data(バージョン 20151217)で定義されたすべてのプロパティと、それらがデータパッケージ(v2.0)でどのようにサポートされているかの一覧である。
プロパティの構文
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| Array properties | 対応 | |
| Link properties | 部分的 | URL とパスはサポートされるが、@context 内の @base URL は不可 |
| URI template properties | 非対応 | |
| Column reference properties | 対応 | 例:schema.primaryKey |
| Object properties | 対応 | 例:resource.schema |
| Natural language properties | 対応 | 例:resource.path |
| Atomic properties | 対応 |
トップレベルのプロパティ
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| @context | 非対応 |
テーブルグループ
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| tables | 対応 | テーブルは "type": "table" を持つ package.resources として定義できる。構造・形式・dialect などが同一のテーブルは、resource.path に複数のファイルを持つ単一のリソースとして定義できる。実装はそれらのテーブルを連結する。 |
| dialect | 対応 | resource.path 内の複数ファイルに対する resource.dialect として |
| notes | カスタムプロパティ | |
| tableDirection | 非対応 | |
| tableSchema | 対応 | resource.path 内の複数ファイルに対する resource.schema として |
| transformations | 非対応 | |
| @id | カスタムプロパティ | |
| @type | 非対応 |
テーブル
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| url | 対応 | resource.path として |
| dialect | 対応 | resource.dialect として |
| notes | カスタムプロパティ | |
| suppressOutput | 非対応 | |
| tableDirection | 非対応 | |
| tableSchema | 対応 | resource.schema として |
| transformations | 非対応 | |
| @id | カスタムプロパティ | テーブルは resource.name で識別される |
| @type | 対応 | resource.type として |
スキーマ
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| columns | 対応 | schema.fields として |
| foreignKeys | 対応 | schema.foreignKeys として |
| primaryKey | 対応 | schema.primaryKey として |
| rowTitles | 非対応 | タイトルはフィールドごとに field.title として定義される |
| @id | カスタムプロパティ | |
| @type | 非対応 |
列
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| name | 対応 | field.name として |
| suppressOutput | 非対応 | |
| titles | 部分的 | field.title として(単一の値) |
| virtual | 非対応 | |
| @id | カスタムプロパティ | |
| @type | 非対応 |
継承されるプロパティ
データパッケージのプロパティは、特に指定がない限り(たとえば resource.sources)、親から継承しない。以下に挙げるプロパティは、missingValues を除き、データパッケージでは 1 つの階層にのみ存在する。
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| aboutUrl | カスタムプロパティ | |
| datatype | 対応 | field.type として |
| default | 非対応 | |
| lang | 非対応 | レシピとして提案されている |
| null | 対応 | field.missingValues および schema.missingValues として、複数の値とラベルを定義するオプションを備える |
| ordered | 対応 | field.categoriesOrdered として |
| propertyUrl | 部分的 | field.rdfType として |
| required | 対応 | required フィールド制約として |
| separator | 対応 | list フィールド型における delimiter として |
| textDirection | 非対応 | |
| valueUrl | 非対応 |
共通プロパティ
共通プロパティは、データパッケージではカスタムプロパティとして追加できる。これは CSVW が推奨するのと同様に、接頭辞付きの名前を用いる。ただし、データパッケージはよく使われるプロパティ(description など)について独自の定義を持ち、それらはすべての階層に存在しうる点に注意されたい。
Dialect の記述
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| commentPrefix | 対応 | dialect.commentChar として |
| delimiter | 対応 | dialect.delimiter として |
| doubleQuote | 対応 | dialect.doubleQuote として |
| encoding | 対応 | resource.encoding として |
| header | 対応 | dialect.header として |
| headerRowCount | 対応 | dialect.headerRows として |
| lineTerminators | 対応 | dialect.lineTerminator として |
| quoteChar | 対応 | dialect.quoteChar として |
| skipBlankRows | 非対応 | |
| skipColumns | 非対応 | |
| skipInitialSpace | 対応 | dialect.skipInitialSpace として |
| skipRows | 非対応 | dialect.commentRows として |
| trim | 非対応 | |
| @id | カスタムプロパティ | |
| @type | 非対応 |
変換の定義
データパッケージではサポートされない。
データ型
CSVW はデータ型を、組み込みデータ型と派生データ型として定義する。派生データ型は、組み込みデータ型をフォーマットや制約などで拡張したものである。データパッケージはこの区別を設けず、代わりにいくつかのフィールド型を定義する。型に応じて、format や制約で拡張できる。
| CSVW プロパティ | データパッケージの対応 | 詳細 |
|---|---|---|
| base | 非対応 | すべての型は field.type として定義される |
| format | 対応 | field.format として |
| length | 非対応 | |
| minLength | 対応 | minLength フィールド制約として |
| maxLength | 対応 | maxLength フィールド制約として |
| minimum | 対応 | minimum フィールド制約として |
| maximum | 対応 | maximum フィールド制約として |
| minInclusive | 対応 | minimum フィールド制約として |
| maxInclusive | 対応 | maximum フィールド制約として |
| minExclusive | 対応 | exclusiveMinimum フィールド制約として |
| maxExclusive | 対応 | exclusiveMaximum フィールド制約として |
| @id | カスタムプロパティ | |
| @type | 非対応 |