본문으로 건너뛰기

JSON-LD를 프레임 형식으로 변환 — Numio

jsonld.frame을 사용해 frame에 따라 JSON-LD를 재구성합니다. frame과 일치하는 노드(예: @type으로 일치)가 최상위 결과가 되고, 이들이 참조하는 노드는 그 안에 임베드됩니다.

평평한 @graph를 애플리케이션에 필요한 타입을 루트로 하는 트리로 바꿉니다. 예를 들어 모든 Book에 소속 library를 임베드합니다.

JSON-LD

Frame

이럴 때 사용하세요

  • 평평한 @graph를 애플리케이션에 필요한 타입을 루트로 하는 트리로 바꿉니다. 예를 들어 모든 Book에 소속 library를 임베드합니다.
  • 큰 JSON-LD 데이터셋에서 특정 @type의 노드만 골라냅니다.

사용 방법

  1. 원본 문서를 JSON-LD 편집기에 붙여 넣습니다.
  2. Frame 편집기에 frame을 작성합니다: @context와 "@type": "Book" 같은 매칭 규칙입니다.
  3. 결과를 확인합니다. 일치하는 노드가 둘 이상이면 @graph에 나열됩니다.

JSON-LD + frame

// JSON-LD editor
{
  "@context": {"@vocab": "http://schema.org/"},
  "@graph": [
    {"@id": "http://example.org/lib", "name": "City Library"},
    {"@id": "http://example.org/b1", "@type": "Book", "name": "Dune",
     "holdingArchive": {"@id": "http://example.org/lib"}},
    {"@id": "http://example.org/b2", "@type": "Book", "name": "Emma",
     "holdingArchive": {"@id": "http://example.org/lib"}}
  ]
}

// Frame editor
{"@context": {"@vocab": "http://schema.org/"}, "@type": "Book"}

프레이밍된 JSON-LD

{
  "@context": {
    "@vocab": "http://schema.org/"
  },
  "@graph": [
    {
      "@id": "http://example.org/b1",
      "@type": "Book",
      "holdingArchive": {
        "@id": "http://example.org/lib",
        "name": "City Library"
      },
      "name": "Dune"
    },
    {
      "@id": "http://example.org/b2",
      "@type": "Book",
      "holdingArchive": {
        "@id": "http://example.org/lib",
        "name": "City Library"
      },
      "name": "Emma"
    }
  ]
}

세부 정보 및 제한 사항

여기서는 노드 참조가 참조된 노드로 대체되어 library가 각 book에 임베드됩니다.

frame과 일치하지 않는 노드(library)는 임베드된 객체로만 나타나고 별도의 결과가 되지 않습니다.

jsonld.js의 기본 framing 옵션으로 브라우저에서 실행됩니다. @embed, @explicit 같은 플래그는 frame 안에서 지정할 수 있습니다.

FAQ

특정 프로퍼티만 반환하려면 어떻게 하나요?

frame에 "@explicit": true를 추가하고 원하는 프로퍼티를 각각 값 {}으로 나열하세요.

결과에 @graph 키가 있는 이유는 무엇인가요?

frame과 일치하는 노드가 둘 이상이면 결과가 @graph로 반환됩니다. 하나만 일치하면 최상위 객체로 반환됩니다.

Frame 편집기에 schema.org context가 미리 채워져 있는 이유는 무엇인가요?

페이지의 기본 예시이기 때문입니다. 이 context는 브라우저가 다운로드해야 하는 원격 URL이므로, 오프라인에서 쓰려면 인라인 context로 바꾸세요. 다운로드에 실패하면 해당 URL이 포함된 오류가 표시됩니다.

사양 및 참고 자료