CSVからジャパンサーチ型RDFを生成するCSV to Japan Search RDF Converter

CSVジャパンサーチ型RDF(JSON-LD)に変換する簡易ツールです。利活用スキーマが各種データに適用できることを試すため、ジャパンサーチRDFの生成に用いたマッピングツールの一部機能を移植してみました。

This is a demonstration tool to convert CSV data into Japan Search RDF data model. This tool can be thought as a very simplified version of Japan Search's mapping systems.

ソースデータSource Data

ソースデータ(CSV/TSV)を入力してください。1行目は項目名(ヘッダ行)でなければなりません。データ入力後、フィールド外をクリックすると次のデータセット定義にフィールド一覧が表示されます。

Provide source data (CSV/TSV). The first line must be a header (field labels). On changing the textarea content, dataset definition form will be prepared in the next section.

データセット定義Dataset Definition

データセットに関する基本定義を設定します(をクリックすると、下記説明の該当部分を引用して表示します)。

Define mapping functions for source data labels. Click ℹ for a little help (excerpts from explanation bellow).

データセット名/URIDataset Name / URI
アクセスURIAccess URI
基本クラスDefault type

(ソースの項目名)

(Source Labels)

※ソースデータを入力すると、1行目(ヘッダ)から項目名を取得し、仮のマッピング定義をセットして表示しますので、適宜選択し直してください。

Once input source data in the above textares, mapping definition form will be shown where certain mappings are preselected. Change selections to refine those mappings.

変換結果Conversion Results

簡単な説明Some Explanations

変換のしくみと、データセット定義の方法を簡単に説明します。以下でデータセット名/URIのようなスタイルはテキスト入力欄左のラベル、場所のようなスタイルはデータ入力後に表示される各マッピング定義の選択肢(ポップアップ)項目を示します。また「」で囲んでいるのは原則として元データの項目名例です。

Here is a simple explanation of the conversion, and the dataset definition. In style of Dataset Name / URI represents a label of text input field, and location represents an option (function) of field mapping selector (will appear after data input).

項目名に対するマッピングSource Label Mappings

ジャパンサーチの利活用スキーマRDFは、提供機関が連携フォーマットによるデータに共通項目ラベルを付与し、それを元に正規化辞書とデータセットごとのマッピング定義を適用して変換・生成しています(利活用スキーマメタデータ提供の流れ)。ここでは、その共通項目ラベルを利用した基本変換の一部をJavaScriptに移植して、CSVから利活用スキーマRDFの生成を試みます。

CSVデータを入力すると、データセット定義セクションにフィールドマッピングを指定するフォームが表示されます。マッピング選択項目は概ねジャパンサーチのメタデータ登録時に付与する共通項目ラベルの定義表に準じています。

Japan Search data providers Common Labels on souce data. Japan Search RDF is generated using this Common Labels as starting point, and also consulting normalization dictionaries and dataset specific mapping definitions. This tool demonstrates the basic process of conversion (Common Labels part).

On providing dataset, mapping form will be displayed in "Dataset Definition" section. Selector options are mapping functions, which correspond to Common Labels (Japanese explanation of common labels).

必須の共通項目ラベルMandatory Items

定義表で必須(あれば必須)となっているラベル項目は、次のように扱います。

Followings are mappings for required items in Common Labels definition.

  • IDからはレコードを識別する@idを生成します。
    • IDは1つだけ指定してください。複数指定すると最初のもののみ用い、2つ目以降の値は記述一般として扱います。指定がない場合はデータの行番号を用います。
    • @idにはデータ値をそのまま記述し、@context@baseによってURI化しています。生成したJSON-LDを実際に利用する場合は、この@baseを置き換えることで、適切なURIとすることができます。
    • 値の重複チェックは行ないません。ユニークな識別子であることが前提です。
    • 行番号による@idは、データの追加・削除が行なわれると変わってしまい、恒久的な識別子になりません。IDとなる項目を用意してください。
  • 名称/タイトルは、schema:nameにマッピングするとともに、最初のものは併せてrdfs:labelにもなります。またschema:nameの値は言語タグを付与します。
    • 元データラベルが「名称」もしくは「タイトル」で始まり、区切り文字を挟んで「タイ語」などの言語名で終わっている場合は、すべての値にその言語名のタグを付与します(サンプルデータ4)。
    • でなければ、値が英数記号のみならば@en、それ以外は@jaとします。
  • 定義表のURLは、所蔵館などのページのコンテンツリンクURL、収集サービス(つなぎ役)データベースのページなどの収集ページリンクURLに分けて扱います。前者はjps:accessInfo/schema:url、後者はjps:sourceInfo/schema:urlにマッピングされます。
    • サムネイル画像URLschema:imageにマッピングされます。IIIFマニフェストURLは、jps:accessInfo/schema:urlとした上でsc:Manifest型を付与します。
    • 提供者提供者URLは、個別レコードではなくデータセット名/URIに記述してください。
  • 最終更新日jps:sourceInfo/schema:dateModifiedにマッピングされます。定義表のコンテンツの権利区分コンテンツ公開状況は、現在のRDFモデルでは対応がありません。
  • id will be used to generate @id of the record.
    • Specify only one id field. If multiple fields to be set id, only the first one is used to generate @id, and rest will be treated as general field. If not specified, row number of the data will be used.
    • The value of @id is original data itself, and URIfyed via @base in @context. You can edit this @base to get more appropriate URIs.
    • Value conflict is not checked. Provide unique identifiers.
    • @id by row number is not persistent. Prepare one field to set id.
  • title is mapped to schema:name, and the first one is also mapped to rdfs:label. The value of schema:name has language tag, which is set to @en if the value consists of only alphanumeric and/or punctuations, @ja otherwise. If original label starts with "名称" or "タイトル" and ends with language name in Japanese, the corresponding lang tag is used for all values.
  • access_url is for landing page of holding institution (mapped to jps:accessInfo/schema:url), while database_url is for aggregator's database page (mapped to jps:sourceInfo/schema:url).
  • thumbnail_url is mapped to schema:image. iiif_manifest is mapped to jps:accessInfo/schema:url and assigned a type sc:Manifest.
  • last_modified is mapped to jps:sourceInfo/schema:dateModified.

任意の共通項目ラベルおよび追加マッピングOptional Items and Additional Mappings

定義表で任意となっているラベル項目は、次のように扱います。

Followings are mappings for non mandatory items in Common Labels definition.

  • 場所は、値を簡易正規化してschema:spatial値とするとともに、jps:spatialで元データを含む構造化値を生成します。
    • 場所を「都道府県」「市町村」などに分割しているときは、「都道府県」を場所とし、「市町村」などを場所詳細として構造化値に加えることができます。サンプル2の「所在地区」やサンプル3の「出版国コード」もこれが使えます。
  • 座標は、場所情報がある場合のみ、分割文字で[緯度,経度]に分割し、その構造化値に加えます(Geohashは生成しません)。
    • 座標が複数あるときは、最後のもののみが有効です。
    • 緯度経度を個別のフィールドに記述することもできます。
    • 座標のみで場所がないときは、座標に基づく場所リソースと構造化値を生成して、そこに座標を加えます。場所が複数あるときは、場所詳細と同じく最初の場所に設定します。
  • 時間/時代は、値を簡易正規化してschema:temporal値とするとともに、jps:temporalで元データを含む構造化値を生成します。
    • 場所と同様に時間/時代に関しても時間詳細を加えることができます(サンプル3の「出版年月日」など)。複数の扱いは場所の場合と同じです。
  • 定義表の人物/団体はより細かく作者/著者寄与者出版者/公開者に分けてマッピングします(以下でこれらをエージェント型と呼びます)。それぞれschema:creatorschema:contributorschema:publisherを生成するとともに、いずれもjps:agentialの値として構造化記述を生成します。
  • location generates schema:spatial with semi normalized value, and also jps:spatial with a structured node.
    • location_detail can be added to structured node of primary location.
    • If multiple locations are present, location detail will be added to the first structured node.
  • location_latlong is applicable only when a field mapped with location is present. Value is divided into [lat, long], and will be added to the structured node of the location (Geohash is not generated).
    • Only one location_latlong is applied (last one, if more than one present).
    • location_lat, location_long can be described in separate fields.
    • If multiple lat/longs are present, location detail will be added to the first structured node.
    • If location_latlong is present but no location, a pseudo location resounce and structured node will be generated, and geo will be added to that node.
  • temporal generates schema:temporal with semi normalized value, and also jps:temporal with a structured node.
    • Temporal field can have temporal_detail. Same as location case if multiple details present.
  • creator, contributor and publisher generate corresponding schema: property, as well as jps:agential with a structured node.

定義表にない、次のマッピングを用意しています。

Followings are mappings not defined in Common Labels.

  • コンテンツのタイプを示すため、「タイプ」「ジャンル」などをタイプ(クラス)としてマッピングできます。該当する項目がない場合は、基本クラスの設定に従います。
    • タイプはコンテンツの基本区分(書籍、文化財など大きく情報を区分する枠)を示します。利活用スキーマでRDF化する利点はさまざまな種類のコンテンツ情報を同じモデルで記述できるところにありますが、こうしたデータを組み合わせて利用する場合、それがどんなタイプなのか(図書なのか、絵画なのか、あるいは建築物なのか)を判別できることがとても重要です。
    • 元データは、項目名を導入句にしたschema:description記述一般と同じ)としても保持します。タイプを複数指定すると、2つ目以降の値は記述一般のみになります。
  • キーワード/主題/分類は、schema:aboutにマッピングされます。元データの項目が「分類」でも、タイプ(クラス)とする方が適切なケースもあるので、その場合は選択メニューでマッピングを変更してください。
  • 識別子は、ラベルがISBN、ISSNの場合は対応するschema.orgプロパティも生成します。それ以外は、現在のところjps:accessInfo/jps:contentIdの値にしています。
  • Use type to specify the content's type (class). If no field is set to this mapping, Default type will be used.
  • keywd_subj is mapped to schema:about.
  • At this moment, identifier generates schema.org if field label is ISBN or ISSN.Otherwise, this will be mapped to jps:accessInfo/jps:contentId.

データ値の処理と簡易正規化Data Value Porcessing and Normalization

次のような値処理を組み込んでいます。

Some special value treatmens will be applied for certain fields.

  • 作者/著者寄与者場所キーワード/主題/分類は、分割文字(列)を指定してフィールド値を分割処理させることができます。
  • 構造化値の役割(jps:relationType)は、項目名から自動設定します。作者/著者寄与者のみ、データ値末尾に「著」「編」などがあればそれを役割に用い、名前からは削除します。
  • creator, contributor, location and keywd_subj can be divided into multiple values, with "sep char" set.
  • The role in structured node (jps:relationType) will be determined by source field label, though only Japanese label is useful for this mapping at this moment.

辞書を用いた正規化は対応していませんが、次のような簡易処理を行ないます。

Although values are not consulted to dictionaries, some simple normalization will be taken place.

  • 場所は、都道府県名で始まる場合は、place:名前空間の値に正規化します。最初が市区町村名である場合は、そこまでを取り出してncplace:名前空間の値とします。元の値は構造化ノードのschema:descriptionに保持します。
  • 時間/時代は、最初が3-4桁の数字なら西暦年、最初が数字2桁+"世紀"ならば年範囲、時代を表す文字列があればその時代を、time:名前空間の値に正規化します。それ以外はtime:_undefinedになります。いずれの場合も元の値は構造化ノードのschema:descriptionに保持します。
  • エージェント型およびキーワード/主題/分類は、項目名をNDC(あるいはNDC9)、NDLCNDLSHNDLAVIAFWikidataDBpediaDBpedia-jとするか、これらの名前を項目名末尾に半角()で加えると、データ値をそれぞれの名前空間に連結してURIとします(サンプル1の「作者(NDLA)」、サンプル3の「分類(NDLC)」)。またこれらの項目名のデータ値を"名前(コード)"の形にすると、コードの部分を切り出してURIのローカル名とします(括弧は半角)。
  • 正規化されない値は、エージェント型はncname:場所ncplace:キーワード/主題/分類keyword:名前空間URIに連結します。このとき、一定以上の長さの値は、後半をハッシュ化してローカル名とします。
  • Value of spatial will be normalized if it starts with (1) 都道府県 (prefecture in Japanese), use the 都道府県 name as the localname in place: namespace; (2) 市区町村 (cities), use the 市区町村 name as the localname in ncplace: namespace. In either case, the original value is preserved as schema:description in the structured node.
  • Value of temporal will be normalized in time: namespace if it (1) begins with 3-4 digits, (2) begins with 2 digits followed by "世紀" (century), or (3) containts "時代" (era). Otherwise, normalized value will be time:_undefined. In either case, the original value is preserved as schema:description in the structured node.
  • For "agent" (creator, contributor and publisher) and keywd_subj, if the source field label is an authority name (one of NDC (or NDC9), NDLC, NDLSHNDLA, VIAF, Wikidata, DBpedia or DBpedia-j), or appended an authority name in parentheses e.g. "creator (DBpedia)", data value will be appended to corresponding namespace URI. If the value of those fields is in the form of "value (code)", code part is used as the local name, allowing more readable data value (original data is preserved in the structured node).
  • Non-normalized values will be local names with namespace URIs, ncname: for "agent", ncplace: for location and keyword: for keywd_subj. Long local name will be trimed at certain length, and the rest part is hashed.

ソース/アクセス情報と基本型Source / Access Information and Default Type

  • データセット名/URIは、ソース情報の記述(jps:sourceInfo/schema:privider)に用います。組織、機関名というよりも、具体的なデータセットを識別するものです。異なるデータセットには別のデータセット名/URIを付与してください。名前を与えると、ncname:名前空間のURIとします。
    • 個別レコードのjps:sourceInfo/schema:sourceDataには、このURIにRFC7111のCSVフラグメントIDを加えたものを設定します。
  • アクセスURIは、データセットを提供しているサービス、データが記述している資料を閲覧できる施設などを記してください。名前を与えると、ncname:名前空間のURIとします。省略するとデータセットURIと同じになります。
  • 基本クラスは、タイプ(クラス)フィールドが無いときのデフォルト値です。URIもしくは接頭辞schema:のクラスでなければ、type:名前空間の値として扱います(現在ジャパンサーチで用いられているクラスはSPARQLクエリで調べることができます)。省略するとtype:記述情報をデフォルト(type値がレコードにない場合)にします。
  • Dataset Name / URI is used to generate jps:sourceInfo/schema:privider. It is not the providing organization, rahter it identifies the dataset. If provided name (not URI), it will be the local name with ncname: namespace URI.
    • Each individual record has jps:sourceInfo/schema:sourceData whose value is the source provider URI plus RFC7111 CSV fragment id.
  • Access URI is for the service that provides dataset, or the museum etc where a user can access the material described by the dataset. Ifprovided name (not URI), it will be the local name with ncname: namespace URI. If ommitted, the Dataset URI will be used for theproperty value.
  • Default type is used as the local name with type: namespace if it is not a URI nor a schema: prefixed class (use a query to find current available classes in type: namespace). If ommitted, type:記述情報 (Creative Work Information) is used as the default type.

データサイズの制限はありませんが、レコード数が10件以下ならば、結果をJSON-LD PlaygroundおよびRDFグラフの視覚化で試してみるためのボタンを表示します。

There is no limit in data size. If number of records is less than 10, JSON-LD Playground and RDF graph visualzation buttons will be displayed.