JCR データモデル・Schema

MintJams CMS のコンテンツは、JCR(Content Repository for Java Technology API 2.0 / JSR 283) に基づくリポジトリに格納されます。ここでは、開発者が知っておくべきデータモデルと、メタデータスキーマ、アクセス用の GraphQL API を概観します。

基本概念

  • ワークスペース — 独立したコンテンツストア。system はアイデンティティ(ユーザー/グループ/ロール)を保持
  • ノード — パスを持つツリー構造の要素(例: /content/commerce/orders/
  • プロパティ — ノードの属性。名前空間プレフィックス付き(例: commerce:order_id
  • 主なノードタイプnt:folder(フォルダー)、nt:file(ファイル)
  • ミックスインmix:referenceable(UUID を付与し参照可能に)、mix:versionable(バージョン管理を有効化)
  • 名前空間jcr / nt / mix などの標準に加え、アプリ独自のプレフィックス(例 commerce:)を登録できます

リポジトリのレイアウト(例)

コンテンツは目的別にツリーへ配置します。コマースの例:

/content/commerce/
├── orders/raw/{yyyy}/{MM}/order_{id}.json   # 受信した注文
├── products/product_{id}.json               # 商品
├── inventory/levels/{inventory_item_id}.json# 在庫
└── endpoints/*.groovy                        # サーバーサイドのエンドポイント
/etc/commerce/config/*.yml                     # 設定
/etc/metadata/definitions                      # メタデータスキーマ定義
/etc/i18n/*.json                               # メッセージバンドル
/home/users|groups|roles                       # アイデンティティ(system ワークスペース)

コンテンツのモデリング

  • ファイル/フォルダーは nt:file / nt:folder ノードで表現され、ドメイン固有の値はプロパティ(例 commerce:status)として保持します
  • バージョン管理mix:versionable を付け、checkout / checkin でバージョンを作成
  • ロック — 排他編集のためのロック(所有者・深さ・セッションスコープ)
  • 参照mix:referenceable で UUID を付与し、強参照(Reference)/弱参照(WeakReference)で関連付け
  • 標準メタデータcreated / createdBy / modified / modifiedBy、ファイルは mimeType / size / encoding

メタデータスキーマ

Schema Manager で、JCR プロパティのスキーマとミックスインを定義します。各プロパティには型(String / Long / Double / Boolean / Date / Binary / Name / Path / Reference / WeakReference / URI など)に加え、制約(必須・複数値・文字数・パターン・最小/最大・選択肢)や、計算項目・UI ヒントを設定できます。共通項目はミックスインにまとめ、スキーマへアタッチして継承できます。運用面は「Schema Manager」を参照してください。

GraphQL API

コンテンツやアイデンティティ、BPM/EIP には GraphQL からアクセスします。主なクエリ:

  • node(path) / children(path, ...) — ノードの取得・一覧
  • query(statement, language, ...) / xpath(...) / search(text, ...) — 検索(JCR-SQL2 / XPath / 全文)
  • accessControl(path) / versionHistory(path) — ACL・バージョン履歴
  • workspaces / cluster — ワークスペース・クラスター
  • processDefinitions / tasks / incidents(BPM)、routes / historyExchanges(EIP)

主なミューテーション:

  • createFolder / createFile / deleteNode / renameNode
  • setProperties / addMixin / deleteMixin
  • lockNode / unlockNode / checkin / checkout / restoreVersion
  • setAccessControl / deleteAccessControl
  • initiateMultipartUpload ほか(大きなバイナリのアップロード)

プロパティの値は型ごとの入力(stringValue / longValue / dateValue / referenceValue など)で受け渡します。例:

mutation {
  setProperties(path: "/content/articles/hello.json",
    properties: [{ name: "commerce:status", value: { stringValue: "received" } }]
  ) { node { path } errors { name message } }
}

関連