@embed: @never is ignored inside an @reverse frame
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
lib/pyld/jsonld.py#L4663 の reverse-framing ブランチから始めてください。ここでは状態キーが embeded と綴られています。L4484-L4485 付近の @never チェックおよび L4597 と L4611 の forward 呼び出し箇所と比較してください。issue の reproducer を実行して employee ノードが埋め込まれていることを確認し、その後 1 文字の修正を適用してください。完了とは、既存の frame テストが変わらないまま、reverse frame が "employees": {"@id": "ex:p1"} を返すことです。
索引モデルが issue の本文から書いたものです。
説明
Framing a reverse property with {"@embed": "@never"} embeds the matched node in full. The same flag on a forward property is honoured.
from pyld import jsonld
ctx = {"schema": "http://schema.org/", "name": "schema:name",
"works_for": {"@id": "schema:worksFor", "@type": "@id"},
"employees": {"@reverse": "schema:worksFor"}}
doc = {"@context": ctx, "@graph": [
{"@id": "ex:org1", "@type": "schema:Organization", "name": "Acme"},
{"@id": "ex:p1", "@type": "schema:Person", "name": "Ada", "works_for": "ex:org1"}]}
back = jsonld.from_rdf(jsonld.to_rdf(doc, {"format": "application/n-quads"}),
{"format": "application/n-quads"})
print(jsonld.frame(back, {"@context": ctx, "@embed": "@once", "@type": "schema:Organization",
"@reverse": {"schema:worksFor": {"@embed": "@never"}}}))
3.3.0 returns the employee embedded:
"employees": {"@id": "ex:p1", "@type": "schema:Person", "name": "Ada", "works_for": "ex:org1"}
The reverse branch recurses with a misspelled state key, jsonld.py#L4663:
{**state, 'embeded': True},
while the @never test reads state['embedded'] (L4484-L4485). The key written is never read, so a reverse-framed node is treated as if it were at the top level, where @never does not apply. The two forward call sites, L4597 and L4611, spell it 'embedded'.
Changing that one character in an installed 3.3.0 gives "employees": {"@id": "ex:p1"}, with the other frames unchanged.
jsonld.js is correct at frame.js#L309, so this is specific to the Python port.
- 主要言語
- Python
- スター
- 689
- フォーク
- 140
- 平均マージ
- 2日 16時間
- マージ済み PR(30日)
- 11
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
digitalbazaar/pyld のほかの issue
-
No work limit on normalize() in any released version (RDFC-1.0 §4.4.3), and data for choosing the 4.0.0 maxPermutations default対応中かも @mielvds が 6 日前に担当しました。 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
digitalbazaar/pyld#368 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 55/100
digitalbazaar/pyld#334 · コメント 2 件 · リアクション 2 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
digitalbazaar/pyld#315 ·
メンテナーはふだん 1 日以内に返信
-
feature
難易度 4/5 3〜5日 初心者へのやさしさ 55/100
digitalbazaar/pyld#307 ·
メンテナーはふだん 1 日以内に返信
-
jsonld:framing strict mode
難易度 3/5 1〜2日 初心者へのやさしさ 50/100
digitalbazaar/pyld#231 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
digitalbazaar/pyld の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
ida-arbeitszeit/workers-control#1578 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
aws-samples/sample-per-model-bedrock#898 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
-
intake mcp-intake needs-human-review priority:high
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
Ikalus1988/MisakaNet#5041 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 86/100