Bounded Description
A bounded description, or Concise Bounded Description in full, embeds
everything needed to explain the resource it is about. A real record,
framed. It validates against
https://blue-core-lod.github.io/bibframe-json/schema/cbd.json, and a cataloger typed every value in it.
You are looking at a sample of the shape, not a tidied illustration of one.
We changed one thing, the host in the URIs, which reads bibframe.example
here. The originals came from a staging environment and would have rotted, and
an identifier that looks resolvable while resolving to nothing is worse than
one announcing itself as an example. RFC
2606 reserves .example for this. We
left the paths alone, so you can still see the shape of a Blue Core URI.
LC defined how to serialize a CBD as RDF/XML and left the JSON-LD as an RDF
dump: .cbd.jsonld from id.loc.gov is a flat array of expanded nodes with full
property URIs and no nesting, and Blue Core’s was the same. This proposes
something else. The RDF is identical either way, and only the serialization
differs.
The shape
Section titled “The shape”The document is the Instance. You asked for an Instance and you get one, with everything else described where it is referenced, rather than an array of resources to search through.
That is the one place this departs from cbd-01.md, which puts every principal
resource side by side under a single rdf:RDF. XML has no natural root, so
siblings are the only option there. JSON has one, so we use it. Marva reads the
RDF/XML and is unaffected.
instanceOf embeds the Work. A linked description holds a bare URI
there, because the Work is a resource of its own. schema/cbd.json checks that one
difference, and it carries the whole structural claim: a CBD explains its
Instance without you fetching anything.
The Work’s hasInstance points back by URI. A JSON-LD processor breaks the
cycle that way, and that is what keeps the document finite.
Every property is an array, even holding one value, so you can loop without checking.
@context is named, not inlined, which keeps the document about the record
instead of about the vocabulary. It also saves a lot: across the 59 records
measured below, inlining the context costs 11,947 bytes each and 61% of the
document.
Producing one
Section titled “Producing one”Frame expanded JSON-LD with the Instance as the root:
from pyld import jsonld
jsonld.frame(expanded, { "@context": context, # bibframe_json.context() "@id": "https://.../instances/<uuid>", "@embed": "@once", # embed the first time, reference after "@omitDefault": True, # or absent properties come back null})Then three things the frame cannot do, each of which took us a while to find:
Coerce every property to an array. @container: @set covers the 251 terms
the context declares and nothing else. A property it has never heard of, such
as bflc:catalogerId or Sinopia’s hasResourceTemplate, compacts to a bare
value and breaks the guarantee. 57 of 59 sampled records tripped on that.
bluecore_models.utils.graph._as_arrays does the coercion, and it has to run
after framing.
Put @type in an array. @type is a keyword, so no @container reaches
it, and a node with a single type compacts to a string. The dialect tolerates
both, and this normalizes for consistency.
Replace the context with its URL. You have to hand framing the terms, and
pyld returns them inlined, so the document comes back carrying all 258 entries
in front of the description it is about, which is the form this file argues
against. Put bibframe_json.CONTEXT_URL back.
Measurements
Section titled “Measurements”Against 59 CBDs from a running system, comparing this with the sibling
arrangement. Both figures exclude @context, which is the same either way and
would otherwise swamp the difference:
| bytes | resources described | |
|---|---|---|
siblings under @graph |
520,362 | all |
| rooted at the Instance | 461,403 | all |
Nesting runs 3 to 8 deep, mostly 5. Neither arrangement loses anything,
including the two cases that looked likely to break this one: a Work with
related Works that have their own Instances, which land under the relation that
reaches them, and cbd-01.md’s secondary Instance, which arrives under the
Work’s hasInstance fully described.
The example
Section titled “The example”{
"@context": "https://blue-core-lod.github.io/bibframe-json/context/bibframe.jsonld",
"@id": "https://bibframe.example/instances/fb857a3a-f454-4392-ba6d-a3653c12be47",
"@type": [
"Instance"
],
"adminMetadata": [
{
"@type": [
"AdminMetadata"
],
"agent": [
{
"@id": "http://id.loc.gov/vocabulary/organizations/cbc"
}
],
"date": [
{
"@type": "http://www.w3.org/2001/XMLSchema#dateTime",
"@value": "2026-09-25T17:31:41.841439+00:00"
}
],
"derivedFrom": [
{
"@id": "http://example.org/DK-328764#Instance"
}
],
"status": [
{
"@id": "http://id.loc.gov/vocabulary/mstatus/c",
"@type": [
"Status"
],
"code": [
"c"
],
"rdfs:label": [
"changed"
]
}
]
},
{
"@type": [
"AdminMetadata"
],
"bflc:catalogerId": [
"8f2b24e3-eaa5-4e32-99de-ba80a2b7f860"
],
"date": [
"2026-09-25"
],
"descriptionAuthentication": [
{
"@id": "http://id.loc.gov/vocabulary/marcauthen/pcc"
}
],
"descriptionLanguage": [
{
"@id": "http://id.loc.gov/vocabulary/languages/eng",
"@type": [
"Language"
],
"rdfs:label": [
"English ",
"English"
]
}
],
"descriptionLevel": [
"http://id.loc.gov/ontologies/bibframe-2-6-0/"
]
}
],
"carrier": [
{
"@id": "http://id.loc.gov/vocabulary/carriers/nc",
"@type": [
"Carrier"
],
"rdfs:label": [
"volume"
]
}
],
"dimensions": [
"23 cm"
],
"editionStatement": [
"2nd revised edition"
],
"extent": [
{
"@type": [
"Extent"
],
"rdfs:label": [
"lxii, 355 pages"
]
}
],
"identifiedBy": [
{
"@type": [
"Isbn"
],
"qualifier": [
"hardback"
],
"rdf:value": [
"9788183155984"
]
}
],
"instanceOf": [
{
"@id": "https://bibframe.example/works/9937996a-1083-4357-b05f-4be85f7b7354",
"@type": [
"Work",
"Monograph",
"Text"
],
"adminMetadata": [
{
"@type": [
"AdminMetadata"
],
"agent": [
{
"@id": "http://id.loc.gov/vocabulary/organizations/cbc"
}
],
"date": [
{
"@type": "http://www.w3.org/2001/XMLSchema#dateTime",
"@value": "2026-09-25T17:31:51.583394+00:00"
}
],
"derivedFrom": [
{
"@id": "http://example.org/DK-328764#Work"
}
],
"status": [
{
"@id": "http://id.loc.gov/vocabulary/mstatus/c"
}
]
},
{
"@type": [
"AdminMetadata"
],
"bflc:catalogerId": [
"8f2b24e3-eaa5-4e32-99de-ba80a2b7f860"
],
"date": [
"2026-09-25"
],
"descriptionAuthentication": [
{
"@id": "http://id.loc.gov/vocabulary/marcauthen/pcc"
}
],
"descriptionLanguage": [
{
"@id": "http://id.loc.gov/vocabulary/languages/eng"
}
],
"descriptionLevel": [
"http://id.loc.gov/ontologies/bibframe-2-6-0/"
]
}
],
"classification": [
{
"@type": [
"ClassificationDdc"
],
"classificationPortion": [
"891.209"
],
"edition": [
"full"
],
"source": [
{
"@type": [
"Source"
],
"code": [
"23"
]
}
]
},
{
"@type": [
"ClassificationLcc"
],
"classificationPortion": [
"PK2903"
],
"itemPortion": [
".C43 2026"
]
}
],
"content": [
{
"@id": "http://id.loc.gov/vocabulary/contentTypes/txt",
"@type": [
"Content"
],
"rdfs:label": [
"text"
]
}
],
"contribution": [
{
"@type": [
"Contribution",
"PrimaryContribution"
],
"agent": [
{
"@id": "http://example.org/DK-328764#Agent100-12",
"@type": [
"Agent",
"Person"
],
"bflc:marcKey": [
"1001 $aChakravorti, Madhavadas,$eauthor."
],
"rdfs:label": [
"Chakravorti, Madhavadas"
]
}
],
"role": [
{
"@type": [
"Role"
],
"rdfs:label": [
"author"
]
}
]
}
],
"hasInstance": [
"https://bibframe.example/instances/fb857a3a-f454-4392-ba6d-a3653c12be47"
],
"language": [
{
"@id": "http://id.loc.gov/vocabulary/languages/san"
},
{
"@id": "http://id.loc.gov/vocabulary/languages/eng"
}
],
"note": [
{
"@type": [
"Note",
"http://id.loc.gov/vocabulary/mnotetype/lang"
],
"rdfs:label": [
"Includes some text in Sanskrit."
]
}
],
"subject": [
{
"@id": "http://example.org/DK-328764#Topic650-22",
"@type": [
"Topic",
"mads:ComplexSubject"
],
"source": [
{
"@id": "http://id.loc.gov/authorities/subjects"
}
],
"mads:authoritativeLabel": [
"Sanskrit literature--History and criticism"
],
"mads:componentList": [
{
"@list": [
{
"@type": [
"mads:Topic"
],
"mads:authoritativeLabel": [
"Sanskrit literature"
]
},
{
"@type": [
"mads:Topic"
],
"mads:authoritativeLabel": [
"History and criticism"
]
}
]
}
],
"mads:isMemberOfMADSScheme": [
{
"@id": "http://id.loc.gov/authorities/subjects"
}
],
"rdfs:label": [
"Sanskrit literature--History and criticism"
]
}
],
"supplementaryContent": [
{
"@id": "http://id.loc.gov/vocabulary/msupplcont/bibliography",
"@type": [
"SupplementaryContent"
],
"code": [
"bibliography"
],
"rdfs:label": [
"bibliography"
]
}
],
"title": [
{
"@type": [
"Title"
],
"bflc:nonSortNum": [
"2"
],
"mainTitle": [
"A short history of Sanskrit literature"
]
}
]
}
],
"issuance": [
{
"@id": "http://id.loc.gov/vocabulary/issuance/mono"
}
],
"media": [
{
"@id": "http://id.loc.gov/vocabulary/mediaTypes/n",
"@type": [
"Media"
],
"rdfs:label": [
"unmediated"
]
}
],
"note": [
{
"@type": [
"Note",
"http://id.loc.gov/vocabulary/mnotetype/biblio"
],
"rdfs:label": [
"Includes bibliographical references."
]
}
],
"provisionActivity": [
{
"@type": [
"ProvisionActivity",
"Publication"
],
"bflc:simpleAgent": [
"New Bharatiya Book Corporation"
],
"bflc:simpleDate": [
"2026"
],
"bflc:simplePlace": [
"Delhi, India"
]
},
{
"@type": [
"ProvisionActivity",
"Publication"
],
"bflc:simpleAgent": [
"New Bharatiya Book Corporation"
],
"bflc:simpleDate": [
"2026"
],
"bflc:simplePlace": [
"Delhi, India"
],
"date": [
{
"@type": "http://id.loc.gov/datatypes/edtf",
"@value": "2026"
}
],
"place": [
{
"@id": "http://id.loc.gov/vocabulary/countries/ii"
}
]
}
],
"publicationStatement": [
"Delhi, India: New Bharatiya Book Corporation, 2026"
],
"responsibilityStatement": [
"by Madhavadas Chakravorti ; foreward by Prof. Penna Madhusudan."
],
"title": [
{
"@type": [
"Title"
],
"bflc:nonSortNum": [
"2"
],
"mainTitle": [
"A short history of Sanskrit literature"
]
}
]
}