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/renameNodesetProperties/addMixin/deleteMixinlockNode/unlockNode/checkin/checkout/restoreVersionsetAccessControl/deleteAccessControlinitiateMultipartUploadほか(大きなバイナリのアップロード)
プロパティの値は型ごとの入力(stringValue / longValue / dateValue / referenceValue など)で受け渡します。例:
mutation {
setProperties(path: "/content/articles/hello.json",
properties: [{ name: "commerce:status", value: { stringValue: "received" } }]
) { node { path } errors { name message } }
}
関連
- アクセス制御の考え方: 「ユーザー・ロール・権限」
- スキーマの操作: 「Schema Manager」