Skip to content

Reference

The GigCharts vocabulary

What a gc: term means. This page is the namespace document for the IRIs a .gigchart file expands to.

On this page

The namespace

Namespace IRIhttps://www.gigcharts.app/ns/gigchart#
Preferred prefixgc
This documenthttps://www.gigcharts.app/ns/gigchart
Machine-readable/ns/gigchart.ttl (Turtle)
JSON-LD contexthttps://www.gigcharts.app/context/gigchart.jsonld
Format specification/format

A .gigchart file carries a pointer to the published JSON-LD context, which declares this namespace as its @vocab. So a chart is linked data as it sits on disk — no conversion step:

{
  "@context": "https://www.gigcharts.app/context/gigchart.jsonld",
  "@type": "gc:Chart",
  "id": "urn:uuid:5b1e6e1a-2f3c-4a7b-9d21-6c9a1e3f7d02",
  "format": "gigchart",
  "version": 12,
  "song": {
    "@type": "schema:MusicComposition",
    "properties": { "title": "House of the Rising Sun", "artist": "Traditional" },
    "annotations": [
      { "kind": "cue", "text": "slower", "target": { "kind": "line", "stanza": 0, "line": 1 } }
    ]
  }
}

Expanded, that is:

<urn:uuid:5b1e6e1a-…>
    a                     gc:Chart ;
    gc:format             "gigchart" ;
    gc:formatVersion      10 ;
    gc:song               [ a               schema:MusicComposition ;
                            schema:name     "House of the Rising Sun" ;
                            schema:byArtist "Traditional" ;
                            gc:annotations  [ a          gc:cue ;
                                              gc:text    "slower" ;
                                              gc:target  [ a gc:line ; gc:stanza 0 ; gc:line 1 ] ] ] .

An open namespace

Because the context sets @vocab, every key in a .gigchart mints an IRI in this namespace — the ~200 typesetting settings and annotation fields included, not only the terms defined below. Nothing in the file is dropped on expansion.

This document defines the structural core: the chart, the composition link, the classes behind every kind, and the identifier properties. The key-by-key meaning of everything else is the job of the format specification, which is written and kept current against the code. Two copies of that would mean one of them is quietly wrong, so there is one: if a term you are looking at is not listed here, look it up on /format.

Classes

TermSubclass ofWhat it is
gc:Chart schema:CreativeWork A GigCharts chart document: one performable arrangement of one song, together with the typesetting and performance annotations that make it a gig sheet. This is the type of the .gigchart envelope — the node that carries the file's own identifier. A Chart is about a musical composition but is not itself the composition: the composition hangs off it as gc:song.

Annotation kinds

The context aliases an annotation's kind key to @type, so every annotation node expands with the class named by its own kind token — a cue annotation is a gc:cue. The local names are lowercase because they are the file's tokens verbatim; a vocabulary that renamed them would be defining terms no document uses.

TermWhat it is
gc:section A labeled spine beside a stanza or a run of stanzas — Verse, Chorus, Bridge.
gc:cue A small labeled chip carrying a performance note. The most-used annotation kind.
gc:repeat A repeat bar with a times-N count beside a stanza.
gc:markers Bar or beat markers along a stanza.
gc:roadmap A stacked arrangement map — one bar per section, in performance order.
gc:recall A recall mark: a pointer back to a stanza already printed, so a repeated chorus need not be set again. Its refStanza / refSid names the stanza it points at. Spelled chorus inside the app; recall is the file spelling and the normative one.
gc:capo The capo indicator in the header chrome.
gc:voice A voice assignment — which singer or part takes a stanza, a line, or a word range. Carries the color the voice is drawn in.
gc:pagebreak A forced page break before the targeted stanza.
gc:info A placed copy of the song info box.
gc:chordbox A placed box of chords, typed rather than derived from the body.
gc:linkedchordbox A chord box that is a live reference to another stanza's chords rather than typed text; it follows that stanza when the chords change.
gc:qr A placed QR code carrying its own link, unrelated to the song's video property. It may print as the square or as a text link instead; its linkMode says which.
gc:textbox A free text box placed on the page.

What each kind can target, and which fields it carries, is on /format.

Target kinds

The same kind alias applies inside an annotation's target, so a target is a typed node too. No target token is also an annotation token, so the two sets never collide.

TermWhat it targets
gc:stanza Targets a whole stanza, by 0-based index and/or by its sticky stanza id.
gc:span Targets an inclusive run of stanzas — one spine or bar covering several.
gc:line Targets one rendered row inside a stanza.
gc:range Targets a word range: a column range on one lyric row.
gc:gap Targets the space after a given stanza. The reading application converts this to a spacer on load.
gc:spacer Targets an explicit spacer block, by its id.

Properties

TermDomain → rangeWhat it means
gc:format gc:Chartxsd:string The format discriminator. Always the literal string gigchart.
gc:formatVersion
written as version
gc:Chartxsd:integer The .gigchart format version the file is written in — not the song's own revision, which is schema:version. Serialized as the key `version`.
gc:generator gc:Chartxsd:string Which software build wrote the file, e.g. gigcharts.app v0.9.0 (a1b2c3d). The tiebreaker when two files share a format version but came from different builds.
gc:song gc:Chartschema:MusicComposition Links a chart document to the musical composition it sets. The composition node carries the song's identity metadata and the chart's own content — body, annotations, settings.
gc:properties schema:MusicComposition Groups the song's identity metadata — title, credits, key, tempo, rights. A structural grouping in the JSON serialization, not a semantic relation; the terms inside it are the schema.org ones.
gc:localId
written as id
xsd:string A handle that is unique inside one chart and meaningless outside it — an annotation id, a spacer id, a voice id. Deliberately NOT the node's @id: these are relative names, not IRIs, and reading them as identifiers would drop every node carrying one from the RDF. Only the chart document's own id, a urn:uuid, is a real identifier. Serialized as the key `id`.
gc:body schema:MusicCompositionrdf:List The chart itself: the ordered lines of chords and lyrics, one entry per line, an empty string separating stanzas. An RDF list, because line order is the chart — an unordered set of lines is not a song.
gc:structure schema:MusicCompositionrdf:List The stanza-id ledger: one sticky id per stanza of the body, in body order. These are what an annotation's stanza anchors point at, so a target survives edits to the body above it. An RDF list — the ledger is positional.
gc:spacers schema:MusicCompositionrdf:List Explicit blocks of vertical space between stanzas, each able to host a gap-scoped annotation. An RDF list: where two spacers share a boundary, stack order is array order.
gc:duration schema:MusicCompositionxsd:string The song's playing time as a display string, conventionally mm:ss (for example 3:45). Deliberately NOT schema:duration: that property's range is an ISO-8601 duration (PT3M45S), and asserting a display string into it would be a range violation. A future format version may add an ISO-8601 spelling alongside this one.
gc:mbWork
written as mbTitleUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the work this chart sets. Captured from metadata autocomplete and carried with the file so the song's identity survives outside GigCharts.
gc:mbArtist
written as mbArtistUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the performing artist.
gc:mbRelease
written as mbAlbumUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the release the song appears on.
gc:mbComposer
written as mbMusicUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the composer.
gc:mbLyricist
written as mbLyricsUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the lyricist.
gc:mbArranger
written as mbArrangerUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the arranger. Added in v12: on traditional and folk material the arrangement is frequently the only authored layer there is to credit, so the arranger is as worth identifying as the composer.
gc:mbInstrument
written as mbInstrumentUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the instrument the chart is written for. Added in v12 alongside the Instrument field's controlled vocabulary: MusicBrainz holds instruments as entities with their own identifiers, so "guitar", "Guitar" and "gtr" stop being three different instruments.
gc:mbGenre
written as mbGenreUri
schema:MusicCompositionrdfs:Resource A resolvable MusicBrainz URI for the chart's genre. Added in v12 with the bundled genre vocabulary: MusicBrainz curates 2181 terms with identifiers but publishes no way to search them, so GigCharts ships the list and stores the id.
gc:regionRef
written as regionUri
schema:MusicCompositionrdfs:Resource A resolvable identifier for the region the song comes from — in practice a Wikidata item, e.g. Q832218 for Kalotaszeg. Deliberately not named for one authority: a place may as reasonably be identified by GeoNames or the Getty TGN, and the URI states which one. Added in v12.
gc:occasionRef
written as holidayUri
schema:MusicCompositionrdfs:Resource A resolvable identifier for the occasion or feast day the song belongs to — in practice a Wikidata item. Added in v12; same reasoning as regionRef.
gc:languageRef
written as languageUri
schema:MusicCompositionrdfs:Resource A resolvable identifier for the language of the lyrics — a Wikidata item, e.g. Q9067 for Hungarian. Added in v12. The alternatives considered were Lexvo (lexvo.org/id/iso639-3/hun), which is purpose-built for languages, and the bare ISO 639-3 code, which is the real identifier but has no official URI form; Wikidata won because it is the authority the region and occasion fields already use.
gc:videoFetched
written as videoFetched
schema:MusicCompositionxsd:date The date the cached facts about the video link (title, channel) were fetched — the "accessed on" of a citation. Added in v12. It qualifies gc:videoTitle and gc:videoAuthor, which are a cache of somebody else's page rather than assertions of our own.

The schema.org alignment

A song's identity metadata is not GigCharts' to invent — it is a schema:MusicComposition, and the context maps it onto schema.org terms so a consumer that has never heard of GigCharts still reads the parts that matter:

properties keyschema.org term
title schema:name
subtitle schema:alternativeHeadline
artist schema:byArtist
music schema:composer
lyrics schema:lyricist
album schema:inAlbum
track schema:position
year schema:copyrightYear
copyright schema:copyrightNotice
license schema:license
language schema:inLanguage
genre schema:genre
originalKey schema:musicalKey
video schema:video
revision schema:version
savedAt schema:dateModified

Everything else — duration, the MusicBrainz identifiers, and the whole chart body below properties — is gc:, because schema.org has no term for it and borrowing a near-miss would be worse than minting an honest one.

Known simplifications

Two places where the mapping is looser than it looks. Both are stated rather than hidden, because a consumer that trusts the alignment deserves to know where it bends.

  • Names where nodes belong. artist, music, lyrics, album — the credit fields — carry a plain name string, while schema:byArtist, schema:composer, schema:lyricist and schema:inAlbum expect a node (a Person, MusicGroup or MusicAlbum). The chart holds what its author typed: a name, not an entity. Where the author picked the credit from metadata autocomplete, the resolvable identity travels beside it as gc:mbArtist and friends, and that is the node-shaped one.
  • duration is not schema:duration. The file holds a display string (3:45); schema:duration's range is an ISO-8601 duration (PT3M45S). Rather than assert a value that fails its own range, the term is gc:duration.

Stability

The vocabulary is published under CC BY 4.0. The .gigchart format is open and unencumbered: read it, write it, build on it.