コンテンツにスキップ
PR

N-Triplesとは:RDFを1行1トリプルで表す標準形式

N-Triplesは、RDFグラフを機械処理しやすいプレーンテキストへ変換するための標準形式です。接頭辞や省略構文を使わず、原則として1行に1つのトリプルを書くため、生成、差分確認、ストリーミング、テストに向きます。

項目内容
名称N-Triples
分類RDFグラフの行指向シリアライズ形式
標準W3C RDF 1.1 N-Triples Recommendation
基本単位1行に主語・述語・目的語と終端のピリオド
文字コードUTF-8
拡張子.nt
Media Typeapplication/n-triples
主な用途RDFの機械生成、交換、行単位処理、テスト、検証
公式仕様RDF 1.1 N-Triples
確認日2026-07-14

N-Triplesは、RDFグラフをプレーンテキストで表現するための行指向シリアライズ形式です。

基本形は、主語、述語、目的語、終端のピリオドを1行に記述します。

<https://example.com/person/alice> <https://schema.org/name> "Alice" .

N-Triplesは、RDFそのものではありません。

RDFは、主語・述語・目的語からなるトリプルの集合として情報を表すデータモデルです。N-Triplesは、そのRDFグラフをファイルや通信データとして書き出す方法の1つです。

同じRDFグラフは、次の形式でも表現できます。

  • Turtle
  • JSON-LD
  • RDF/XML
  • RDFa
  • TriG
  • N-Quads

N-Triplesの最大の特徴は、表現が単純で曖昧さが少ないことです。接頭辞、相対IRI、述語や主語の省略構文を使わず、原則として1行に1トリプルを書きます。

そのため、人が手書きするには冗長ですが、次の用途に適しています。

  • RDFデータの機械生成
  • ストリーミング処理
  • 行単位の差分確認
  • テスト用の期待値
  • RDFグラフの交換
  • 大量データの分割処理
  • パーサーや変換処理の検証

結論:機械処理と検証にはN-Triples、人手編集にはTurtle、Web連携にはJSON-LD

Section titled “結論:機械処理と検証にはN-Triples、人手編集にはTurtle、Web連携にはJSON-LD”

N-Triplesが向いているのは、RDFトリプルを単純な行形式で出力し、ツール間で安定して受け渡したい場合です。

特に、接頭辞展開や省略構文を避け、各トリプルを独立した形で扱いたい処理に向きます。

一方、N-Triplesは同じIRIを何度も完全な形で記述するため、ファイルが大きくなりやすく、人間には読みにくい形式です。

人が設計・レビューするRDFではTurtle、既存のJSON処理やWeb APIと統合する場合はJSON-LDの方が適することがあります。

  • RDFデータをプログラムから生成する開発者
  • ナレッジグラフの入出力処理を作る人
  • RDFパーサー、変換器、検証ツールを開発する人
  • 大量のトリプルを行単位で処理する人
  • TurtleやJSON-LDを正規化に近い単純な表現へ変換したい人
  • RDFテストケースの期待結果を管理する人
  • 人が大量のデータを直接記述・編集する
  • 接頭辞を使ってIRIを短く書きたい
  • 1つの主語に対する複数の述語をまとめて読みたい
  • Web APIで一般的なJSON構造として返したい
  • 複数の名前付きグラフを1ファイルで表したい
  • ファイルサイズと可読性を重視する
  • RDFを理解せず、単なる4列CSVとして処理しようとしている
  • N-TriplesはRDFグラフのシリアライズ形式
  • RDFはデータモデル、N-Triplesはその記述形式
  • 基本は1行1トリプル
  • 1行は主語、述語、目的語、.で構成される
  • 主語はIRIまたは空白ノード
  • 述語はIRI
  • 目的語はIRI、空白ノード、リテラル
  • 接頭辞や相対IRIは使えない
  • 文字列には言語タグまたはデータ型を付けられる
  • Turtleは人が読み書きしやすい
  • JSON-LDはJSONベースのWeb連携に向く
  • N-Triplesは機械生成、変換、テスト、行単位処理に向く
  • 構文検証とRDFデータ品質検証は別に行う
  • 取り込んだIRIやリテラルを、そのままHTMLやコマンドへ埋め込まない
用語意味
RDFResource Description Framework。グラフ型のデータモデル
RDF triple主語、述語、目的語の3要素で表す文
RDF graphRDFトリプルの集合
N-TriplesRDFグラフを1行1トリプルで表すシリアライズ形式
Turtle接頭辞や省略構文を使えるRDFシリアライズ形式
JSON-LDJSONを使ってLinked Dataを表現する形式
IRIリソースを識別する国際化識別子
Literal文字列、数値、日付などの値
Blank nodeグローバルなIRIを持たないRDFノード
VocabularyRDFで利用するクラスやプロパティの定義群
SPARQLRDFグラフを問い合わせるクエリ言語

N-Triplesはデータベースでもクエリ言語でもありません。

N-TriplesファイルをRDFストアへ読み込み、SPARQLで問い合わせることはできますが、N-Triples自体には検索や更新の命令は含まれません。

1つのRDF文を次の形で書きます。

subject predicate object .

例:

<https://example.com/person/alice> <https://schema.org/name> "Alice" .

各要素は空白で区切り、文末にピリオドを書きます。

主語に使えるのは、基本的に次の2つです。

  • IRI
  • 空白ノード

IRIの例:

<https://example.com/person/alice>

空白ノードの例:

_:address1

リテラルは主語にできません。

次は無効です。

"Alice" <https://schema.org/knows> <https://example.com/person/bob> .

述語はIRIです。

<https://schema.org/name>

空白ノードやリテラルは述語にできません。

目的語には次を使えます。

  • IRI
  • 空白ノード
  • リテラル

IRI:

<https://example.com/person/bob>

空白ノード:

_:address1

リテラル:

"Alice"

実行例1:人物データをN-Triplesで表す

Section titled “実行例1:人物データをN-Triplesで表す”

次の情報を表します。

Aliceという人物がいる
名前はAlice
Bobを知っている

N-Triples:

<https://example.com/person/alice> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://schema.org/Person> .
<https://example.com/person/alice> <https://schema.org/name> "Alice" .
<https://example.com/person/alice> <https://schema.org/knows> <https://example.com/person/bob> .

1行目は、Aliceがschema:Person型であることを表します。

2行目は名前、3行目はBobとの関係です。

N-TriplesにはTurtleのような接頭辞宣言がないため、IRIを完全な形で記述します。

実行例2:言語タグとデータ型を使う

Section titled “実行例2:言語タグとデータ型を使う”
<https://example.com/book/1> <https://schema.org/name> "セマンティックWeb入門"@ja .
<https://example.com/book/1> <https://schema.org/name> "Introduction to the Semantic Web"@en .

同じプロパティに、日本語と英語のラベルを付けています。

言語タグ付きリテラルは、自然言語テキストの言語を表します。

<https://example.com/product/1> <https://schema.org/price> "1980"^^<http://www.w3.org/2001/XMLSchema#integer> .
<https://example.com/product/1> <https://schema.org/releaseDate> "2026-07-10"^^<http://www.w3.org/2001/XMLSchema#date> .
<https://example.com/product/1> <https://schema.org/inStock> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> .

N-Triplesでは、数値や真偽値も字句表現を引用符で囲み、必要に応じてデータ型IRIを付けます。

Turtleでは数値や真偽値を短縮構文で書けますが、N-Triplesでは完全なリテラル表現を使います。

実行例3:空白ノードで住所を表す

Section titled “実行例3:空白ノードで住所を表す”

住所に公開IRIを付けず、人物に結び付いた構造として表します。

<https://example.com/person/alice> <https://schema.org/address> _:address1 .
_:address1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://schema.org/PostalAddress> .
_:address1 <https://schema.org/addressCountry> "JP" .
_:address1 <https://schema.org/addressLocality> "Tokyo" .

_:address1は空白ノード識別子です。

空白ノード識別子は、対象RDF文書やデータセット内でノードを区別するためのラベルです。

別ファイルに同じ_:address1が書かれていても、通常は同一の実世界リソースを意味するとは限りません。

ファイルを結合する処理では、空白ノード識別子の衝突やスコープを、利用ライブラリがどのように扱うか確認します。

長期的に外部参照する対象には、安定したIRIを付ける方が適する場合があります。

N-Triplesでは、各トリプルが独立した行として記述されます。

<https://example.com/person/alice> <https://schema.org/name> "Alice" .
<https://example.com/person/alice> <https://schema.org/email> "alice@example.com" .

この単純さには利点があります。

  • 行単位で生成できる
  • 一部を順次読み込める
  • Unix系ツールで行数を確認しやすい
  • Git diffで追加・削除を確認しやすい
  • 並列分割しやすい
  • 壊れた行の位置を特定しやすい

一方、同じ主語と述語IRIを繰り返すため、Turtleより冗長です。

コメントは#から行末までです。

## Aliceの基本情報
<https://example.com/person/alice> <https://schema.org/name> "Alice" .

空行も利用できます。

ただし、文字列リテラル内の#はコメント開始ではありません。

<https://example.com/document/1> <https://schema.org/text> "Section #1" .

IRIは山括弧で囲みます。

<https://example.com/resource/1>

N-Triplesでは、Turtleの接頭辞付き名前を使えません。

無効:

ex:alice schema:name "Alice" .

有効:

<https://example.com/alice> <https://schema.org/name> "Alice" .

相対IRIも使わず、絶対IRIを記述します。

IRIには、構文上そのまま書けない文字があります。

Unicodeエスケープを使う場合があります。

<https://example.com/resource/\u00E9>

\uは4桁、\Uは8桁の16進数でUnicodeコードポイントを表します。

ただし、IRI正規化、percent encoding、Unicodeエスケープは同じ処理ではありません。

生成ライブラリに任せ、文字列置換だけでIRIを組み立てない方が安全です。

文字列は二重引用符で囲みます。

"Alice"

引用符やバックスラッシュを含める場合はエスケープします。

<https://example.com/message/1> <https://schema.org/text> "She said \"Hello\"." .
<https://example.com/path/1> <https://schema.org/text> "C:\\data\\file.txt" .

代表的なエスケープ:

表記意味
\tタブ
\bバックスペース
\n改行
\rキャリッジリターン
\fフォームフィード
\"二重引用符
\'一重引用符
\\バックスラッシュ
\uXXXX4桁Unicodeエスケープ
\UXXXXXXXX8桁Unicodeエスケープ

N-Triplesの文字列リテラルは1行で記述します。

Turtleの長い文字列リテラルのような三重引用符は使いません。

実際の改行をリテラル内へ直接入れず、\nとして表します。

<https://example.com/message/1> <https://schema.org/text> "line 1\nline 2" .

同じRDFグラフを比較します。

<https://example.com/person/alice> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://schema.org/Person> .
<https://example.com/person/alice> <https://schema.org/name> "Alice" .
<https://example.com/person/alice> <https://schema.org/knows> <https://example.com/person/bob> .
@prefix schema: <https://schema.org/> .
@prefix ex: <https://example.com/person/> .
ex:alice
a schema:Person ;
schema:name "Alice" ;
schema:knows ex:bob .
観点N-TriplesTurtle
基本単位1行1トリプル複数トリプルをまとめられる
接頭辞使えない使える
相対IRI使えないBase IRIと組み合わせて利用可能
省略構文ほぼない;,aなどがある
空白ノード構文識別子形式[]や入れ子表現がある
コレクション明示トリプル()による短縮構文
人間の可読性低い高い
機械生成単純比較的複雑
行単位処理しやすい文が複数行にまたがる場合がある
ファイル拡張子.nt.ttl
Media Typeapplication/n-triplestext/turtle
  • オントロジーや語彙を人が編集する
  • GitHubでRDFをレビューする
  • 接頭辞でIRIを短くしたい
  • 同一主語の情報をまとめて読みたい
  • SPARQLに近い構文へ慣れたい
  • 自動生成
  • テストデータ
  • 行ストリーム処理
  • 単純な交換形式
  • Turtleの省略構文を展開した形で確認する
  • グラフ差分処理の前段

同じ情報を表します。

<https://example.com/person/alice> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://schema.org/Person> .
<https://example.com/person/alice> <https://schema.org/name> "Alice" .
{
"@context": {
"schema": "https://schema.org/"
},
"@id": "https://example.com/person/alice",
"@type": "schema:Person",
"schema:name": "Alice"
}
観点N-TriplesJSON-LD
基盤行指向テキストJSON
RDFとの対応トリプルを直接記述Contextを使いJSONをRDFへ対応付ける
人間の可読性冗長JSON利用者には読みやすい
Web APIそのままでは一般的でない既存JSON基盤と統合しやすい
接頭辞・用語短縮ない@contextで定義
ストリーム処理行単位で扱いやすいJSON文書全体の構造に依存
変換処理単純expansion、compaction、flatteningなどがある
外部参照基本的にないRemote Contextを参照できる
セキュリティ注意IRI・リテラル処理Remote Context取得、JSON処理も注意
拡張子.nt.jsonld
Media Typeapplication/n-triplesapplication/ld+json
  • Web APIのレスポンス
  • JavaScriptやJSONツールとの統合
  • Schema.orgなどの構造化データ
  • 既存JSONをLinked Dataへ対応させる
  • Contextを使って用語を管理する
  • JSON構造に依存しない単純なトリプル列
  • 大量データのエクスポート
  • RDF変換結果の検証
  • 行単位での分割・結合
  • Context解決を避けたい処理

N-Triplesは1つのRDFグラフを表します。

名前付きグラフを含むRDF Datasetを表したい場合は、N-QuadsやTriGを使います。

<https://example.com/alice> <https://schema.org/name> "Alice" .
<https://example.com/alice> <https://schema.org/name> "Alice" <https://example.com/graph/users> .

N-Quadsでは、主語、述語、目的語の後ろにグラフ名を追加できます。

形式対象特徴
N-TriplesRDF Graph1行1トリプル
TurtleRDF Graph人が読みやすい省略構文
N-QuadsRDF Dataset1行にグラフ名を追加可能
TriGRDF DatasetTurtle風の名前付きグラフ構文
JSON-LDRDF Graph / DatasetJSONベース

複数の出典、テナント、バージョン、グラフを区別したい場合は、N-TriplesだけでなくRDF Dataset形式を検討します。

用途第一候補理由
人がRDFを編集するTurtle接頭辞と省略構文で読みやすい
Web APIで返すJSON-LDJSONツールと統合しやすい
大量トリプルを行処理するN-Triples1行1トリプル
RDFテストの期待値N-Triples表現の揺れが少ない
名前付きグラフを行処理するN-Quadsグラフ名を含められる
名前付きグラフを人が編集するTriGTurtleに近い
HTMLへ埋め込む構造化データJSON-LD<script type="application/ld+json">で利用
RDFストア間の交換N-Triples / N-Quads実装対応とDataset要否で選ぶ
オントロジー定義Turtle可読性と接頭辞利用
Git diff中心のデータ管理N-Triplesまたは正規化済み形式行単位差分を取りやすい

1. 表現するのはRDF GraphかRDF Datasetか

Section titled “1. 表現するのはRDF GraphかRDF Datasetか”

RDF Graph: N-Triples、Turtle、JSON-LDなどを比較します。

RDF Dataset: N-Quads、TriG、JSON-LDを比較します。

はい: Turtleを第一候補にします。

いいえ: 次へ進みます。

3. JSONベースのAPIやフロントエンドと統合するか

Section titled “3. JSONベースのAPIやフロントエンドと統合するか”

はい: JSON-LDを検討します。

いいえ: 次へ進みます。

4. 行単位で分割・並列処理したいか

Section titled “4. 行単位で分割・並列処理したいか”

はい: N-Triplesを検討します。

名前付きグラフが必要ならN-Quadsです。

5. 同一グラフのシリアライズ差を比較したいか

Section titled “5. 同一グラフのシリアライズ差を比較したいか”

N-Triplesへ変換すると、Turtleの接頭辞・省略構文を展開した状態を確認できます。

ただし、空白ノード識別子やトリプル順序は同一グラフでも異なり得るため、単純なテキスト比較だけでは不十分です。

検証には複数の段階があります。

ファイルがN-Triples文法として正しいか確認します。

確認項目:

  • 各文末に.がある
  • 主語がIRIまたは空白ノード
  • 述語がIRI
  • 目的語が正しい形式
  • 文字列の引用符が閉じている
  • バックスラッシュが正しくエスケープされている
  • 言語タグとデータ型の組み合わせが正しい
  • IRIに禁止文字が直接入っていない
  • UTF-8として扱える

2. RDFデータモデルとしての確認

Section titled “2. RDFデータモデルとしての確認”

構文が正しくても、データとして正しいとは限りません。

例:

<https://example.com/product/1> <https://schema.org/price> "free"^^<http://www.w3.org/2001/XMLSchema#integer> .

N-Triples構文として読み込めても、freexsd:integerの字句空間に合いません。

利用ライブラリや検証方式が、この不整合をどこまで検出するか確認します。

次のような要件は、N-Triples構文だけでは確認できません。

Productにはnameが必須
priceは0以上
emailは1件まで
PersonのbirthDateは日付

SHACLなどのRDF検証言語を使います。

4. アプリケーション要件の確認

Section titled “4. アプリケーション要件の確認”
  • IRIが実際の命名規則に従っているか
  • 重複リソースがないか
  • 個人情報を公開していないか
  • 必須の出典やライセンスがあるか
  • 語彙バージョンが正しいか
  • 空白ノードをIRIにすべき対象ではないか

実行例4:Python RDFLibで読み込んで変換する

Section titled “実行例4:Python RDFLibで読み込んで変換する”

PythonのRDFLibを使う例です。

from pathlib import Path
from rdflib import Graph
source_path = Path("people.nt")
output_path = Path("people.ttl")
graph = Graph()
try:
graph.parse(source_path, format="nt")
except Exception as exc:
raise SystemExit(f"N-Triplesの解析に失敗しました: {exc}") from exc
print(f"triples: {len(graph)}")
turtle = graph.serialize(format="turtle")
output_path.write_text(turtle, encoding="utf-8")

実行前にRDFLibをインストールします。

Terminal window
python -m pip install rdflib

この例では、N-Triplesを読み込み、Turtleへ変換します。

  • ライブラリのバージョンを固定する
  • 信頼できない巨大ファイルへメモリ一括読み込みを使わない
  • エラー行をログへ出す際に機密情報を漏らさない
  • 出力時の空白ノード識別子やトリプル順序が入力と同じとは限らない
  • 同一RDFグラフでもテキストが一致するとは限らない

実行例5:Apache Jena RIOTで検証・変換する

Section titled “実行例5:Apache Jena RIOTで検証・変換する”

Apache JenaのRIOTツールを使う例です。

構文を確認しながらTurtleへ変換します。

Terminal window
riot --syntax=NTRIPLES --output=TURTLE people.nt

N-Triplesとして読み込み、N-Triplesへ再出力します。

Terminal window
riot --syntax=NTRIPLES --output=NTRIPLES people.nt

ファイルへ保存します。

Terminal window
riot --syntax=NTRIPLES --output=TURTLE people.nt > people.ttl

コマンドライン引数や対応形式名は、使用するApache Jenaバージョンの公式ドキュメントで確認してください。

RDFグラフの比較で注意すること

Section titled “RDFグラフの比較で注意すること”

次の2つは、同じ内容を表す可能性があります。

ファイルA:

<https://example.com/alice> <https://schema.org/name> "Alice" .
<https://example.com/alice> <https://schema.org/knows> _:b1 .
_:b1 <https://schema.org/name> "Bob" .

ファイルB:

_:person2 <https://schema.org/name> "Bob" .
<https://example.com/alice> <https://schema.org/knows> _:person2 .
<https://example.com/alice> <https://schema.org/name> "Alice" .

違い:

  • トリプルの順番
  • 空白ノード識別子

RDFグラフでは、トリプル順序に意味はありません。

空白ノードのローカルな識別子名も、通常はグラフの意味そのものではありません。

そのため、次の比較は信頼できません。

Terminal window
diff file-a.nt file-b.nt

単純diffは変更の確認には便利ですが、RDFグラフの同値性を完全には判定できません。

RDF Dataset Canonicalizationやグラフ同型性を扱えるツールを検討します。

N-Triplesは単純な形式ですが、同じRDFグラフに対して常に同じバイト列になるわけではありません。

違いが生じる要因:

  • トリプル順序
  • 空白ノード識別子
  • Unicode表現
  • リテラルの字句表現
  • 実装ごとの出力順序

デジタル署名、ハッシュ、厳密な差分、重複排除に使う場合は、単にN-Triplesへ変換するだけでは足りません。

W3CのRDF Dataset Canonicalization仕様や、利用ライブラリのcanonicalization実装を確認します。

RDF GraphとRDF Datasetでは対象範囲が異なる点にも注意します。

RDFはデータモデルです。

N-Triplesは、そのRDFグラフを記述する形式の1つです。

次のような単純処理は危険です。

parts = line.split(" ")

文字列リテラルには空白を含められます。

<https://example.com/alice> <https://schema.org/name> "Alice Smith" .

IRI、リテラル、エスケープ、コメントを正しく扱うRDFパーサーを使います。

無効:

<https://example.com/alice> <https://schema.org/name> "Alice"

有効:

<https://example.com/alice> <https://schema.org/name> "Alice" .

無効なN-Triples:

@prefix schema: <https://schema.org/> .
<https://example.com/alice> schema:name "Alice" .

接頭辞宣言やprefixed nameはTurtleの機能です。

文字列の引用符をエスケープしない

Section titled “文字列の引用符をエスケープしない”

無効:

<https://example.com/message/1> <https://schema.org/text> "She said "Hello"." .

有効:

<https://example.com/message/1> <https://schema.org/text> "She said \"Hello\"." .

ファイル順序に意味があると思う

Section titled “ファイル順序に意味があると思う”

RDFグラフではトリプルの順番に意味はありません。

処理順序が必要なら、rdf:List、順序値、時刻、インデックスなどをデータとして表現します。

空白ノードIDを永続IDとして使う

Section titled “空白ノードIDを永続IDとして使う”

_:b1は外部から安定して参照するためのグローバルIRIではありません。

API、別ファイル、将来バージョンから参照する対象にはIRIを検討します。

言語タグとデータ型を同時に付ける

Section titled “言語タグとデータ型を同時に付ける”

次のような表現は使いません。

"Hello"@en^^<http://www.w3.org/2001/XMLSchema#string>

言語タグ付き文字列とデータ型付きリテラルの関係は、対象RDF仕様で確認します。

テキストdiffだけでグラフ同値性を判定する

Section titled “テキストdiffだけでグラフ同値性を判定する”

トリプル順序と空白ノード名が異なるだけでdiffが発生します。

RDFグラフ比較ツールを使います。

.ntでも内容がTurtleや不正なテキストになっている可能性があります。

Media Type、明示された形式、実際の構文を確認します。

N-Triplesはデータ形式ですが、読み込んだデータを利用する処理にはセキュリティ上の注意が必要です。

RDF内のIRIは識別子です。

そのIRIを自動的にHTTP取得する、ブラウザへリンクとして出す、リダイレクト先に使う場合は検証が必要です。

確認項目:

  • 許可するscheme
  • 内部ネットワーク宛てのURL
  • localhost
  • link-local address
  • file URI
  • 資格情報付きURL
  • 長すぎるIRI
  • Unicodeの見た目が似た文字
  • リダイレクト
  • DNS rebinding

外部IRIを自動取得する実装ではSSRFの危険があります。

リテラルをHTMLへ直接出力しない

Section titled “リテラルをHTMLへ直接出力しない”
<https://example.com/item/1> <https://schema.org/name> "<script>alert(1)</script>" .

N-Triplesとしては文字列データです。

Web画面へ表示する際は、出力先に応じてHTMLエスケープします。

IRIやリテラルをシェルコマンドの文字列へ直接連結しません。

RDF変換ツールを呼ぶ場合も、引数配列、安全な一時ファイル、入力サイズ制限を使います。

大容量・悪意ある入力に備える

Section titled “大容量・悪意ある入力に備える”
  • ファイルサイズ上限
  • 1行の最大長
  • トリプル数上限
  • リテラル長上限
  • タイムアウト
  • メモリ上限
  • ストリーミングパーサー
  • 圧縮爆弾
  • 不正UTF-8
  • 大量の空白ノード
  • 大量の重複トリプル

を考慮します。

RDFはデータを連結しやすい形式です。

単独では匿名に見える識別子も、他データセットとのリンクによって個人を特定できる場合があります。

  • 氏名
  • メールアドレス
  • 住所
  • 位置情報
  • 医療情報
  • 行動履歴
  • 永続的な個人識別IRI

を公開する前に、利用目的、法令、同意、保持期間、削除方法を確認します。

N-Triples自体には、JSON-LDのRemote Contextのような外部Context取得機能はありません。

ただし、N-Triples内のIRIをアプリケーションが自動取得する設計なら、同様に外部通信の管理が必要です。

安定した基準として、W3CのRDF 1.1 N-Triplesは2014年2月25日のW3C Recommendationです。

一方、W3CではRDF 1.2関連仕様の策定も進められています。

公開時には、次を分けて確認します。

文書種別扱い
W3C Recommendation安定した標準として参照
Candidate Recommendation実装経験を集める段階
Working Draft変更される可能性がある
Editor’s Draft最新作業版だが標準確定版ではない
Group Note仕様以外のガイダンス等

記事本文の構文説明は、採用する仕様バージョンを明記します。

実際に使うRDFライブラリやトリプルストアが、RDF 1.1、RDF 1.2、RDF-star関連構文のどこまで対応しているかも確認します。

[ ] RDFグラフとN-Triples形式を区別している
[ ] ファイルのMedia Typeを確認した
[ ] UTF-8として処理している
[ ] 各トリプルの末尾にピリオドがある
[ ] 主語・述語・目的語の型を確認した
[ ] Turtleの接頭辞構文を混ぜていない
[ ] 相対IRIを使っていない
[ ] 文字列の引用符とバックスラッシュをエスケープした
[ ] 改行を文字列内へ直接入れていない
[ ] 言語タグを検証した
[ ] データ型IRIと字句表現を検証した
[ ] 空白ノードIDを外部永続IDにしていない
[ ] テキストdiffだけで同値判定していない
[ ] RDFパーサーを使っている
[ ] SHACLなどによるデータ形状検証を検討した
[ ] 入力ファイルサイズと1行長を制限した
[ ] IRIを自動取得する場合にSSRF対策をした
[ ] リテラルをHTMLへ出す際にエスケープした
[ ] 個人情報とリンク可能性を確認した
[ ] 対象仕様とライブラリのバージョンを記録した

N-Triplesはプログラミング言語ですか

Section titled “N-Triplesはプログラミング言語ですか”

いいえ。

RDFグラフをテキストとして表現するシリアライズ形式です。条件分岐、関数、変数などを持つ汎用プログラミング言語ではありません。

同じではありません。

RDFはデータモデル、N-TriplesはRDFグラフのシリアライズ形式です。

RDF 1.1仕様では、N-TriplesはTurtleと密接な関係を持つ単純な形式です。

多くのN-Triples文はTurtleとしても読み込めますが、実際の入力形式はMedia Typeや明示設定で区別します。

使えません。

完全なIRIを山括弧で囲んで記述します。

<https://schema.org/name>

接頭辞を使いたい場合はTurtleを検討します。

JSON文字列をリテラルとして格納することはできます。

<https://example.com/item/1> <https://example.com/rawJson> "{\"enabled\":true}" .

ただし、RDFとしてJSON内部の項目を問い合わせたいなら、各項目をRDFトリプルとしてモデル化する、または適切なRDFデータ型・JSON-LDを検討します。

N-Triplesで名前付きグラフを表せますか

Section titled “N-Triplesで名前付きグラフを表せますか”

N-Triplesは単一のRDFグラフを表す形式です。

名前付きグラフを含むRDF DatasetにはN-QuadsやTriGを使います。

行を並べ替えても同じデータですか

Section titled “行を並べ替えても同じデータですか”

トリプルの集合が同じであれば、行順に意味はありません。

ただし、空白ノードを含むグラフの比較では、識別子名だけを見ずグラフ同型性を確認します。

ファイルをsortすれば正規化できますか

Section titled “ファイルをsortすれば正規化できますか”

単純な行ソートは差分を安定させる助けになりますが、空白ノード識別子の違いは解決できません。

署名や厳密なハッシュにはRDF Dataset Canonicalizationを検討します。

N-Triplesの拡張子とMedia Typeは何ですか

Section titled “N-Triplesの拡張子とMedia Typeは何ですか”

一般的な拡張子は.nt、W3C仕様で登録されたMedia Typeはapplication/n-triplesです。

N-Triplesは、RDFグラフを1行1トリプルで表現するシンプルなシリアライズ形式です。

基本構造は次のとおりです。

<subject-iri> <predicate-iri> "object literal" .

RDFとN-Triplesは役割が異なります。

  • RDF: グラフ型データモデル
  • N-Triples: RDFグラフの記述形式
  • Turtle: 人が読み書きしやすいRDF形式
  • JSON-LD: JSONベースでWeb連携しやすいRDF形式
  • N-Quads: 名前付きグラフを行形式で表す形式

用途別の基本判断は次のとおりです。

  • 機械生成、行処理、テスト: N-Triples
  • 人手編集、語彙設計: Turtle
  • Web API、構造化データ: JSON-LD
  • 名前付きグラフの大量処理: N-Quads
  • 名前付きグラフの人手編集: TriG

N-Triplesは単純ですが、文字列のsplitだけで安全に解析できる形式ではありません。

IRI、空白ノード、言語タグ、データ型、Unicodeエスケープを正しく扱うRDFライブラリを利用します。

また、構文が正しいことと、データの意味・品質が正しいことは別です。

  • 構文検証
  • データ型の確認
  • SHACLによる形状検証
  • IRI命名規則
  • 個人情報
  • 外部IRI取得時のSSRF
  • グラフ同値性

まで含めて運用する必要があります。