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).
変換結果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
にマッピングされます。- サムネイル画像URLは
schema:image
にマッピングされます。IIIFマニフェストURLは、jps:accessInfo/schema:url
とした上でsc:Manifest
型を付与します。 - 提供者、提供者URLは、個別レコードではなくデータセット名/URIに記述してください。
- サムネイル画像URLは
- 最終更新日は
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.
- Specify only one id field. If multiple fields to be set id, only the first one is used to generate
- title is mapped to
schema:name
, and the first one is also mapped tordfs:label
. The value ofschema: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 tojps:sourceInfo/schema:url
). - thumbnail_url is mapped to
schema:image
. iiif_manifest is mapped tojps:accessInfo/schema:url
and assigned a typesc: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:creators
、chema:contributor
、schema:publisher
を生成するとともに、いずれもjps:agential
の値として構造化記述を生成します。
- location generates
schema:spatial
with semi normalized value, and alsojps: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. Valueis 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 alsojps: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 asjps: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 tojps: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)、NDLC、NDLSH、NDLA、VIAF、Wikidata、DBpedia、DBpedia-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 inncplace:
namespace. In either case, the original value is preserved asschema: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 betime:_undefined
. In either case, the original value is preserved asschema: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, NDLSH、NDLA, 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 andkeyword:
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 withncname:
namespace URI.- Each individual record has
jps:sourceInfo/schema:sourceData
whose value is the source provider URI plus RFC7111 CSV fragment id.
- Each individual record has
- 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 aschema:
prefixed class (use a query to find current available classes intype:
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.