social.dracome.work.defs

dracome.social

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "catalogIdentifier": {
      "description": "A single external identifier for a work or edition, such as an ISBN or an Open Library key.",
      "properties": {
        "scheme": {
          "description": "The identifier scheme: `isbn-10` (ISBN-10), `isbn-13` (ISBN-13), `ol-work` (Open Library work key, e.g. OL12345W), `ol-edition` (Open Library edition key, e.g. OL12345M), `bookhive` (BookHive proprietary ID), `dnb` (German National Library ID), `gnd` (GND authority record number), `viaf` (VIAF ID), `wikidata` (Wikidata entity), `oclc` (OCLC WorldCat ID).",
          "knownValues": [
            "isbn-10",
            "isbn-13",
            "ol-work",
            "ol-edition",
            "bookhive",
            "dnb",
            "gnd",
            "viaf",
            "wikidata",
            "oclc"
          ],
          "maxLength": 64,
          "type": "string"
        },
        "value": {
          "description": "The identifier value itself, formatted according to scheme (for example the raw ISBN digits, or an Open Library key such as OL12345W).",
          "maxLength": 256,
          "type": "string"
        }
      },
      "required": [
        "scheme",
        "value"
      ],
      "type": "object"
    },
    "catalogRef": {
      "description": "A portable reference to a work or edition in the Dracome catalog, intended to remain resolvable outside of Dracome's own systems.",
      "properties": {
        "dracomeKey": {
          "description": "Optional proprietary Dracome catalog key for this work or edition. Dracome's own systems use it both for internal lookups and as the identifier accepted by Dracome's XRPC API calls; it is not a portable identifier, so consumers outside Dracome's own systems should resolve via identifiers instead.",
          "maxLength": 128,
          "type": "string"
        },
        "identifiers": {
          "description": "External identifiers (ISBNs, Open Library keys, etc.) that let any client resolve this work or edition without depending on Dracome-specific data.",
          "items": {
            "ref": "#catalogIdentifier",
            "type": "ref"
          },
          "maxLength": 16,
          "type": "array"
        },
        "uri": {
          "description": "Optional canonical URI for this work or edition. Runtime validation MUST restrict this to https:// or at:// values.",
          "format": "uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "catalogSnapshot": {
      "description": "A portable, identity-oriented snapshot of combined work-and-edition catalog metadata, captured at record write time. Alongside the record's target, it lets any AT Protocol consumer independently resolve this work or edition without depending on Dracome as a central catalog authority. Work-scoped fields are always present at the top level; edition-scoped fields are grouped under the nested `edition` sub-object, which is always present.",
      "properties": {
        "contributors": {
          "description": "Ordered list of contributors (authors, translators, illustrators, etc.) credited on the work or edition. May be empty when the work has no credited contributor.",
          "items": {
            "ref": "#snapshotContributor",
            "type": "ref"
          },
          "maxLength": 32,
          "type": "array"
        },
        "edition": {
          "description": "Edition-scoped metadata of the targeted edition. Always present.",
          "ref": "#catalogSnapshotEdition",
          "type": "ref"
        },
        "subtitle": {
          "description": "Secondary title of the work, present only when the work has one, sourced from the work's own canonical subtitle.",
          "maxLength": 1024,
          "type": "string"
        },
        "title": {
          "description": "Primary title of the work, sourced from the work's own canonical title.",
          "maxLength": 1024,
          "type": "string"
        },
        "workType": {
          "description": "Structural content form of the referenced work (novel, poetry, comic, manga, audio_drama, or non_fiction).",
          "ref": "#workType",
          "type": "ref"
        }
      },
      "required": [
        "workType",
        "title",
        "contributors",
        "edition"
      ],
      "type": "object"
    },
    "catalogSnapshotEdition": {
      "description": "Edition-scoped metadata nested inside #catalogSnapshot. All fields are independently optional.",
      "properties": {
        "durationSeconds": {
          "description": "Total duration in seconds for audiobook editions, captured at record write time. Only populated when the edition's format is audiobook; pageCount and durationSeconds are never both set on the same snapshot.",
          "minimum": 0,
          "type": "integer"
        },
        "format": {
          "description": "Physical or media format of the specific edition, if known.",
          "ref": "#editionFormat",
          "type": "ref"
        },
        "language": {
          "description": "ISO 639-1 or BCP 47 language code for the edition language.",
          "format": "language",
          "type": "string"
        },
        "pageCount": {
          "description": "Number of pages in the specific edition, if known. Not populated when the edition's format is audiobook; see durationSeconds.",
          "minimum": 1,
          "type": "integer"
        },
        "publicationYear": {
          "description": "Year the specific edition was published. This is the edition's publication year, not necessarily the original work's first publication year.",
          "type": "integer"
        },
        "publisherName": {
          "description": "Name of the publisher of the specific edition, if known.",
          "maxLength": 512,
          "type": "string"
        },
        "subtitle": {
          "description": "Secondary title of the specific edition, present only when the edition has one. When present, this is authoritative for display over the top-level work subtitle.",
          "maxLength": 1024,
          "type": "string"
        },
        "title": {
          "description": "Primary title of the specific edition, present only when it is captured independently of the work's canonical title — for example a translated edition's title. When present, this is authoritative for display over the top-level work title.",
          "maxLength": 1024,
          "type": "string"
        }
      },
      "type": "object"
    },
    "catalogTarget": {
      "description": "Exact target identity for an edition-scoped record. Carries the edition and its parent work; there is no work-only target.",
      "properties": {
        "edition": {
          "description": "The specific edition being targeted. Always present.",
          "ref": "#catalogRef",
          "type": "ref"
        },
        "work": {
          "description": "The work being targeted by this record. Always present.",
          "ref": "#catalogRef",
          "type": "ref"
        }
      },
      "required": [
        "work",
        "edition"
      ],
      "type": "object"
    },
    "editionFormat": {
      "description": "Physical or media format of a specific edition. The set of known values is derived from the Dracome catalog's own normalized edition-format values and may grow; consumers MUST tolerate unknown values.",
      "knownValues": [
        "paperback",
        "hardcover",
        "ebook",
        "audiobook",
        "board_book",
        "spiral_bound",
        "library_binding",
        "pamphlet"
      ],
      "maxLength": 64,
      "type": "string"
    },
    "snapshotContributor": {
      "description": "A person credited on a work or edition. The role and display name are always present. The profile reference is optional, carrying the AT-URI of that person's contributor profile when one exists and is known.",
      "properties": {
        "contributor": {
          "description": "Optional reference to this person's contributor profile, when such a profile is known to exist on their PDS.",
          "ref": "social.dracome.contributor.defs#contributorProfileRef",
          "type": "ref"
        },
        "name": {
          "description": "Display name of the credited person, in natural reading order (given name(s) before family name, e.g. 'Jane Doe', not library-cataloging-style 'Doe, Jane').",
          "maxLength": 256,
          "type": "string"
        },
        "role": {
          "description": "The role this person held in creating this work or edition (e.g. author, translator, illustrator).",
          "ref": "social.dracome.contributor.defs#contributorRole",
          "type": "ref"
        }
      },
      "required": [
        "name",
        "role"
      ],
      "type": "object"
    },
    "workType": {
      "description": "Structural content form of the work (not its distribution format).",
      "knownValues": [
        "novel",
        "poetry",
        "comic",
        "manga",
        "audio_drama",
        "non_fiction"
      ],
      "maxLength": 64,
      "type": "string"
    }
  },
  "id": "social.dracome.work.defs",
  "lexicon": 1
}

Validate Record

Validate a record against social.dracome.work.defs

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:66dyrt2bmghwlmdteyizs5l3
CID
bafyreianppxlnol54c5qpb2wwwnwutpzlcux62qbivlfpmtrx5b3tfnyvi
Indexed At
2026-10-14 19:54 UTC
AT-URI
at://did:plc:66dyrt2bmghwlmdteyizs5l3/com.atproto.lexicon.schema/social.dracome.work.defs

Version History (2 versions)

Referenced Schemas (2)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • social.dracome.catalog.submission.edition recordnot from the namespace authority

    A submission record carrying candidate catalog data for an edition of a previously-submitted work, published by a trusted submitter to their own PDS. Repeatable; a submitter may create, update, or delete edition-submiss…

  • social.dracome.catalog.submission.work recordnot from the namespace authority

    A submission record carrying candidate catalog data for a work, published by a trusted submitter to their own PDS. Repeatable; a submitter may create, update, or delete work-submission records over time.

  • A person credited on the work.

  • social.dracome.contributor.defs not from the namespace authority

    An external identifier for a contributor from a known authority (GND, VIAF, Wikidata, or Open Library).

  • A book in a user's library. An anchor record referenced by status and other book-related events. Metadata (title, authors, cover, etc.) is resolved at display time from the identifier — it is not stored in the record.…

Lexicon Garden

@