Source code for music21.metadata.properties

# -----------------------------------------------------------------------------
# Name:         properties.py
# Purpose:      Data describing the standard set of metadata properties
#
# Authors:      Greg Chapman
#               Michael Scott Asato Cuthbert
#
# Copyright:    Copyright © 2023–2024 Michael Scott Asato Cuthbert
# License:      BSD, see license.txt
# -----------------------------------------------------------------------------
from __future__ import annotations

from dataclasses import dataclass

from music21.metadata.primitives import (DatePrimitive, Text, Contributor, Copyright, ValueType)


[docs] @dataclass class PropertyDescription: ''' Describes a single standard metadata property. * name: str is the namespace's name of the property (the tail of the property term URI). * namespace: str is a shortened form of the URI for the set of terms. * 'dcterms' means the property term is from the Dublin Core terms, defined at <https://www.dublincore.org/specifications/dublin-core/dcmi-terms/> * 'marcrel' means the property term is from the MARC Relator terms, defined at <https://id.loc.gov/vocabulary/relators.html> * 'humdrum' means the property term is from the Humdrum reference record terms, defined at <https://www.humdrum.org/reference-records/> * isContributor: bool is whether the property describes a contributor. * needsArticleNormalization: bool is whether the property values might benefit from article normalization when getting as a string (this is generally True for various kinds of titles). * oldMusic21Abbrev: str is the backward compatible music21 abbreviation for this property. * oldMusic21WorkId: str is the backward compatible music21 name for this property. * uniqueName: str is the official music21 name for this property, that is unique within the list of properties. There is always a unique name, but the uniqueName field is only set if name is not unique enough. To get the unique name from a particular PropertyDescription, call: `(desc.uniqueName if desc.uniqueName else desc.name)` * valueType: Type is the actual type of the value that will be stored in the metadata. This allows auto-conversion to take place when clients store items in the metadata, and is the tuple element type clients will always receive from md['uniqueName'] or md['namespace:name']. ''' uniqueName: str|None = None name: str = '' namespace: str = '' oldMusic21Abbrev: str|None = None oldMusic21WorkId: str|None = None valueType: type[ValueType] = Text needsArticleNormalization: bool = False isContributor: bool = False
STANDARD_PROPERTY_DESCRIPTIONS: tuple[PropertyDescription, ...] = ( # The following 'dcterms' properties are standard Dublin Core property # terms, found at http://purl.org/dc/terms/ # abstract: A summary of the resource. PropertyDescription( name='abstract', namespace='dcterms', isContributor=False), # accessRights: Information about who access the resource or an indication of # its security status. PropertyDescription( name='accessRights', namespace='dcterms', isContributor=False), # alternativeTitle: An alternative name for the resource. PropertyDescription( uniqueName='alternativeTitle', name='alternative', namespace='dcterms', oldMusic21Abbrev='ota', needsArticleNormalization=True, isContributor=False), # audience: A class of agents for whom the resource is intended or useful. PropertyDescription( name='audience', namespace='dcterms', isContributor=False), # dateAvailable: Date that the resource became or will become available. PropertyDescription( uniqueName='dateAvailable', name='available', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # bibliographicCitation: A bibliographic reference for the resource. PropertyDescription( name='bibliographicCitation', namespace='dcterms', isContributor=False), # conformsTo: An established standard to which the described resource conforms. PropertyDescription( name='conformsTo', namespace='dcterms', isContributor=False), # dateCreated: Date of creation of the resource. PropertyDescription( uniqueName='dateCreated', name='created', namespace='dcterms', oldMusic21WorkId='date', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # otherDate: A point or period of time associated with an event in the lifecycle # of the resource. PropertyDescription( uniqueName='otherDate', name='date', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # dateAccepted: Date of acceptance of the resource. PropertyDescription( name='dateAccepted', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # dateCopyrighted: Date of copyright of the resource. PropertyDescription( name='dateCopyrighted', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # dateSubmitted: Date of submission of the resource. PropertyDescription( name='dateSubmitted', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # description: An account of the resource. PropertyDescription( name='description', namespace='dcterms', isContributor=False), # educationLevel: A class of agents, defined in terms of progression # through an educational or training context, for which the described # resource is intended. PropertyDescription( name='educationLevel', namespace='dcterms', isContributor=False), # extent: The size or duration of the resource. PropertyDescription( name='extent', namespace='dcterms', isContributor=False), # format: The file format, physical medium, or dimensions of the resource. PropertyDescription( name='format', namespace='dcterms', isContributor=False), # hasFormat: A related resource that is substantially the same as the # pre-existing described resource, but in another format. PropertyDescription( name='hasFormat', namespace='dcterms', isContributor=False), # hasPart: A related resource that is included either physically or # logically in the described resource. PropertyDescription( name='hasPart', namespace='dcterms', isContributor=False), # hasVersion: A related resource that is a version, edition, or adaptation # of the described resource. PropertyDescription( name='hasVersion', namespace='dcterms', isContributor=False), # identifier: An unambiguous reference to the resource within a given context. PropertyDescription( name='identifier', namespace='dcterms', isContributor=False), # instructionalMethod: A process, used to engender knowledge, attitudes and # skills, that the described resource is designed to support. PropertyDescription( name='instructionalMethod', namespace='dcterms', isContributor=False), # isFormatOf: A pre-existing related resource that is substantially the same # as the described resource, but in another format. PropertyDescription( name='isFormatOf', namespace='dcterms', isContributor=False), # isPartOf: A related resource in which the described resource is physically # or logically included. PropertyDescription( name='isPartOf', namespace='dcterms', isContributor=False), # isReferencedBy: A related resource that references, cites, or otherwise # points to the described resource. PropertyDescription( name='isReferencedBy', namespace='dcterms', isContributor=False), # isReplacedBy: A related resource that supplants, displaces, or supersedes # the described resource. PropertyDescription( name='isReplacedBy', namespace='dcterms', isContributor=False), # isRequiredBy: A related resource that requires the described resource # to support its function, delivery, or coherence. PropertyDescription( name='isRequiredBy', namespace='dcterms', isContributor=False), # dateIssued: Date of formal issuance of the resource. PropertyDescription( uniqueName='dateIssued', name='issued', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # isVersionOf: A related resource of which the described resource is a # version, edition, or adaptation. PropertyDescription( name='isVersionOf', namespace='dcterms', isContributor=False), # language: A language of the resource. PropertyDescription( name='language', namespace='dcterms', isContributor=False), # license: A legal document giving official permission to do something # with the resource. PropertyDescription( name='license', namespace='dcterms', isContributor=False), # medium: The material or physical carrier of the resource. PropertyDescription( name='medium', namespace='dcterms', isContributor=False), # dateModified: Date on which the resource was changed. PropertyDescription( uniqueName='dateModified', name='modified', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # provenance: A statement of any changes in ownership and custody of # the resource since its creation that are significant for its # authenticity, integrity, and interpretation. PropertyDescription( name='provenance', namespace='dcterms', isContributor=False), # publisher: An entity responsible for making the resource available. PropertyDescription( name='publisher', namespace='dcterms', valueType=Contributor, isContributor=True), # references: A related resource that is referenced, cited, or # otherwise pointed to by the described resource. PropertyDescription( name='references', namespace='dcterms', isContributor=False), # relation: A related resource. PropertyDescription( name='relation', namespace='dcterms', isContributor=False), # replaces: A related resource that is supplanted, displaced, or # superseded by the described resource. PropertyDescription( name='replaces', namespace='dcterms', isContributor=False), # requires: A related resource that is required by the described # resource to support its function, delivery, or coherence. PropertyDescription( name='requires', namespace='dcterms', isContributor=False), # copyright: Information about rights held in and over the resource. PropertyDescription( uniqueName='copyright', name='rights', namespace='dcterms', valueType=Copyright, isContributor=False), # rightsHolder: A person or organization owning or managing rights # over the resource. PropertyDescription( name='rightsHolder', namespace='dcterms', valueType=Contributor, isContributor=True), # source: A related resource from which the described resource # is derived. PropertyDescription( name='source', namespace='dcterms', isContributor=False), # subject: A topic of the resource. PropertyDescription( name='subject', namespace='dcterms', isContributor=False), # tableOfContents: A list of subunits of the resource. PropertyDescription( name='tableOfContents', namespace='dcterms', isContributor=False), # title: A name given to the resource. PropertyDescription( name='title', namespace='dcterms', oldMusic21Abbrev='otl', needsArticleNormalization=True, isContributor=False), # type : The nature or genre of the resource. PropertyDescription( name='type', namespace='dcterms', isContributor=False), # dateValid: Date (often a range) of validity of a resource. PropertyDescription( uniqueName='dateValid', name='valid', namespace='dcterms', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # The following 'marcrel' property terms are MARC Relator terms, # found at: https://id.loc.gov/vocabulary/relators.html # adapter: a person or organization who 1) reworks a musical composition, # usually for a different medium, or 2) rewrites novels or stories # for motion pictures or other audiovisual medium. PropertyDescription( uniqueName='adapter', name='ADP', namespace='marcrel', valueType=Contributor, isContributor=True), # analyst: a person or organization that reviews, examines and interprets data or # information in a specific area (e.g. harmony analysis of a score) PropertyDescription( uniqueName='analyst', name='ANL', namespace='marcrel', valueType=Contributor, isContributor=True), # annotator: a person who writes manuscript annotations on a printed item. PropertyDescription( uniqueName='annotator', name='ANN', namespace='marcrel', valueType=Contributor, isContributor=True), # arranger: a person or organization who transcribes a musical # composition, usually for a different medium from that of the original; # in an arrangement the musical substance remains essentially unchanged. PropertyDescription( uniqueName='arranger', name='ARR', namespace='marcrel', valueType=Contributor, isContributor=True), # quotationsAuthor: a person or organization whose work is largely quoted # or extracted in works to which he or she did not contribute directly. PropertyDescription( uniqueName='quotationsAuthor', name='AQT', namespace='marcrel', valueType=Contributor, isContributor=True), # afterwordAuthor: a person or organization responsible for an afterword, # postface, colophon, etc. but who is not the chief author of a work. PropertyDescription( uniqueName='afterwordAuthor', name='AFT', namespace='marcrel', valueType=Contributor, isContributor=True), # dialogAuthor: a person or organization responsible for # the dialog or spoken commentary for a screenplay or sound # recording. PropertyDescription( uniqueName='dialogAuthor', name='AUD', namespace='marcrel', valueType=Contributor, isContributor=True), # introductionAuthor: a person or organization responsible for an # introduction, preface, foreword, or other critical introductory # matter, but who is not the chief author. PropertyDescription( uniqueName='introductionAuthor', name='AUI', namespace='marcrel', valueType=Contributor, isContributor=True), # calligrapher: a person or organization who writes in an artistic # hand, usually as a copyist and or engrosser. PropertyDescription( uniqueName='calligrapher', name='CLL', namespace='marcrel', valueType=Contributor, isContributor=True), # collaborator: a person or organization that takes a limited part # in the elaboration of a work of another person or organization that # brings complements (e.g., appendices, notes) to the work. PropertyDescription( uniqueName='collaborator', name='CLB', namespace='marcrel', valueType=Contributor, isContributor=True), # collotyper: a person or organization responsible for the production # of photographic prints from film or other colloid that has ink-receptive # and ink-repellent surfaces. PropertyDescription( uniqueName='collotyper', name='CLT', namespace='marcrel', valueType=Contributor, isContributor=True), # commentaryAuthor: a person or organization responsible for the # commentary or explanatory notes about a text. For the writer of # manuscript annotations in a printed book, use annotator. PropertyDescription( uniqueName='commentaryAuthor', name='CWT', namespace='marcrel', valueType=Contributor, isContributor=True), # compiler: a person or organization who produces a work or # publication by selecting and putting together material from the # works of various persons or bodies. PropertyDescription( uniqueName='compiler', name='COM', namespace='marcrel', valueType=Contributor, isContributor=True), # composer: a person or organization who creates a musical work, # usually a piece of music in manuscript or printed form. PropertyDescription( uniqueName='composer', name='CMP', namespace='marcrel', valueType=Contributor, isContributor=True), # conceptor: a person or organization responsible for the original # idea on which a work is based, this includes the scientific author # of an audio-visual item and the conceptor of an advertisement. PropertyDescription( uniqueName='conceptor', name='CCP', namespace='marcrel', valueType=Contributor, isContributor=True), # conductor: a person who directs a performing group (orchestra, # chorus, opera, etc.) in a musical or dramatic presentation or # entertainment. PropertyDescription( uniqueName='conductor', name='CND', namespace='marcrel', valueType=Contributor, isContributor=True), # otherContributor: a person or organization one whose work has been # contributed to a larger work, such as an anthology, serial # publication, or other compilation of individual works. Only # use if there is no other more specific term that is accurate. # If otherContributor is used, set contributorValue.role to a # custom term that accurately describes the actual role of this # contributor. PropertyDescription( uniqueName='otherContributor', name='CTB', namespace='marcrel', valueType=Contributor, isContributor=True), # editor: a person or organization who prepares for publication # a work not primarily his/her own, such as by elucidating text, # adding introductory or other critical matter, or technically # directing an editorial staff. PropertyDescription( uniqueName='editor', name='EDT', namespace='marcrel', valueType=Contributor, isContributor=True), # engraver: a person or organization who cuts letters, figures, # etc. on a surface, such as a wooden or metal plate, for printing. PropertyDescription( uniqueName='engraver', name='EGR', namespace='marcrel', valueType=Contributor, isContributor=True), # etcher: a person or organization who produces text or images # for printing by subjecting metal, glass, or some other surface # to acid or the corrosive action of some other substance. PropertyDescription( uniqueName='etcher', name='ETR', namespace='marcrel', valueType=Contributor, isContributor=True), # illuminator: a person or organization responsible for the # decoration of a work (especially manuscript material) with # precious metals or color, usually with elaborate designs and # motifs. PropertyDescription( uniqueName='illuminator', name='ILU', namespace='marcrel', valueType=Contributor, isContributor=True), # illustrator: a person or organization who conceives, and # perhaps also implements, a design or illustration, usually # to accompany a written text. PropertyDescription( uniqueName='illustrator', name='ILL', namespace='marcrel', valueType=Contributor, isContributor=True), # instrumentalist: a person or organization who principally # plays an instrument in a musical or dramatic presentation # or entertainment. PropertyDescription( uniqueName='instrumentalist', name='ITR', namespace='marcrel', valueType=Contributor, isContributor=True), # librettist: a person or organization who is a writer of # the text of an opera, oratorio, etc. PropertyDescription( uniqueName='librettist', name='LBT', namespace='marcrel', valueType=Contributor, isContributor=True), # lithographer: a person or organization who prepares the stone # or plate for lithographic printing, including a graphic artist # creating a design directly on the surface from which printing # will be done. PropertyDescription( uniqueName='lithographer', name='LTG', namespace='marcrel', valueType=Contributor, isContributor=True), # lyricist: a person or organization who is a writer of the # text of a song. PropertyDescription( uniqueName='lyricist', name='LYR', namespace='marcrel', valueType=Contributor, isContributor=True), # metalEngraver: a person or organization responsible for # decorations, illustrations, letters, etc. cut on a metal # surface for printing or decoration. PropertyDescription( uniqueName='metalEngraver', name='MTE', namespace='marcrel', valueType=Contributor, isContributor=True), # musician: a person or organization who performs music or # contributes to the musical content of a work when it is not # possible or desirable to identify the function more precisely. PropertyDescription( uniqueName='musician', name='MUS', namespace='marcrel', valueType=Contributor, isContributor=True), # proofreader: A person who corrects printed matter. PropertyDescription( uniqueName='proofreader', name='PFR', namespace='marcrel', valueType=Contributor, isContributor=True), # platemaker: a person or organization responsible for the # production of plates, usually for the production of printed # images and/or text. PropertyDescription( uniqueName='platemaker', name='PLT', namespace='marcrel', valueType=Contributor, isContributor=True), # printmaker: a person or organization who makes a relief, # intaglio, or planographic printing surface. PropertyDescription( uniqueName='printmaker', name='PRM', namespace='marcrel', valueType=Contributor, isContributor=True), # producer: a person or organization responsible for the # making of an artistic work, including business aspects, # management of the productions, and the commercial success # of the work. PropertyDescription( uniqueName='producer', name='PRO', namespace='marcrel', valueType=Contributor, isContributor=True), # responsibleParty: a person or organization legally # responsible for the content of the published material. PropertyDescription( uniqueName='responsibleParty', name='RPY', namespace='marcrel', valueType=Contributor, isContributor=True), # scribe: a person who is an amanuensis and for a writer of # manuscripts proper. For a person who makes pen-facsimiles, # use facsimilist [fac] (facsimilist is not supported in music21) PropertyDescription( uniqueName='scribe', name='SCR', namespace='marcrel', valueType=Contributor, isContributor=True), # singer: a person or organization who uses his/her/their voice # with or without instrumental accompaniment to produce music. # A performance may or may not include actual words. PropertyDescription( uniqueName='singer', name='SNG', namespace='marcrel', valueType=Contributor, isContributor=True), # transcriber: a person who prepares a handwritten or typewritten copy # from original material, including from dictated or orally recorded # material. For makers of pen-facsimiles, use facsimilist [fac]. # (facsimilist is not supported in music21) PropertyDescription( uniqueName='transcriber', name='TRC', namespace='marcrel', valueType=Contributor, isContributor=True), # translator: a person or organization who renders a text from one # language into another, or from an older form of a language into the # modern form. PropertyDescription( uniqueName='translator', name='TRL', namespace='marcrel', valueType=Contributor, isContributor=True), # woodEngraver: a person or organization who makes prints by cutting # the image in relief on the end-grain of a wood block. PropertyDescription( uniqueName='woodEngraver', name='WDE', namespace='marcrel', valueType=Contributor, isContributor=True), # woodCutter: a person or organization who makes prints by cutting the # image in relief on the plank side of a wood block. PropertyDescription( uniqueName='woodCutter', name='WDC', namespace='marcrel', valueType=Contributor, isContributor=True), # accompanyingMaterialWriter: a person or organization who writes # significant material which accompanies a sound recording or other # audiovisual material. PropertyDescription( uniqueName='accompanyingMaterialWriter', name='WAM', namespace='marcrel', valueType=Contributor, isContributor=True), # distributor: a person or organization that has exclusive or shared # marketing rights for an item. (This is a refinement of 'publisher'.) PropertyDescription( uniqueName='distributor', name='DST', namespace='marcrel', valueType=Contributor, isContributor=True), # The following property term is from MusicXML. # software: the software versions that were used in the construction of # this document. PropertyDescription( name='software', namespace='musicxml', isContributor=False), # The following 'humdrum' property terms are Humdrum reference record # terms, found at https://www.humdrum.org/reference-records/# # textOriginalLanguage: original language of vocal/choral text PropertyDescription( uniqueName='textOriginalLanguage', name='TXO', namespace='humdrum', oldMusic21Abbrev='txo', isContributor=False), # textLanguage: language of the encoded vocal/choral text PropertyDescription( uniqueName='textLanguage', name='TXL', namespace='humdrum', oldMusic21Abbrev='txl', isContributor=False), # popularTitle: popular title PropertyDescription( uniqueName='popularTitle', name='OTP', namespace='humdrum', oldMusic21Abbrev='otp', needsArticleNormalization=True, isContributor=False), # parentTitle: parent title PropertyDescription( uniqueName='parentTitle', name='OPR', namespace='humdrum', oldMusic21Abbrev='opr', needsArticleNormalization=True, isContributor=False), # actNumber: act number (e.g. '2' or 'Act 2') PropertyDescription( uniqueName='actNumber', name='OAC', namespace='humdrum', oldMusic21Abbrev='oac', isContributor=False), # sceneNumber: scene number (e.g. '3' or 'Scene 3') PropertyDescription( uniqueName='sceneNumber', name='OSC', namespace='humdrum', oldMusic21Abbrev='osc', isContributor=False), # movementNumber: movement number (e.g. '4', or 'mov. 4') PropertyDescription( uniqueName='movementNumber', name='OMV', namespace='humdrum', oldMusic21Abbrev='omv', isContributor=False), # movementName: movement name (often a tempo description) PropertyDescription( uniqueName='movementName', name='OMD', namespace='humdrum', oldMusic21Abbrev='omd', needsArticleNormalization=True, isContributor=False), # opusNumber: opus number (e.g. '23', or 'Opus 23') PropertyDescription( uniqueName='opusNumber', name='OPS', namespace='humdrum', oldMusic21Abbrev='ops', isContributor=False), # number: generic number (e.g. number of song within ABC multi-song file) PropertyDescription( uniqueName='number', name='ONM', namespace='humdrum', oldMusic21Abbrev='onm', isContributor=False), # volumeNumber: volume number (e.g. '6' or 'Vol. 6') PropertyDescription( uniqueName='volumeNumber', name='OVM', namespace='humdrum', oldMusic21Abbrev='ovm', oldMusic21WorkId='volume', isContributor=False), # dedicatedTo: dedicated to PropertyDescription( uniqueName='dedicatedTo', name='ODE', namespace='humdrum', oldMusic21Abbrev='ode', oldMusic21WorkId='dedication', isContributor=False), # commissionedBy: commissioned by PropertyDescription( uniqueName='commissionedBy', name='OCO', namespace='humdrum', oldMusic21Abbrev='oco', oldMusic21WorkId='commission', isContributor=False), # countryOfComposition: country of composition PropertyDescription( uniqueName='countryOfComposition', name='OCY', namespace='humdrum', oldMusic21Abbrev='ocy', isContributor=False), # localeOfComposition: city, town, or village of composition PropertyDescription( uniqueName='localeOfComposition', name='OPC', namespace='humdrum', oldMusic21Abbrev='opc', isContributor=False), # groupTitle: group title (e.g. 'The Seasons') PropertyDescription( uniqueName='groupTitle', name='GTL', namespace='humdrum', oldMusic21Abbrev='gtl', needsArticleNormalization=True, isContributor=False), # associatedWork: associated work, such as a play or film PropertyDescription( uniqueName='associatedWork', name='GAW', namespace='humdrum', oldMusic21Abbrev='gaw', isContributor=False), # collectionDesignation: collection designation. E.g. Norton Scores, # Smithsonian Collection, Burkhart Anthology. PropertyDescription( uniqueName='collectionDesignation', name='GCO', namespace='humdrum', oldMusic21Abbrev='gco', isContributor=False), # attributedComposer: attributed composer PropertyDescription( uniqueName='attributedComposer', name='COA', namespace='humdrum', valueType=Contributor, isContributor=True), # suspectedComposer: suspected composer PropertyDescription( uniqueName='suspectedComposer', name='COS', namespace='humdrum', valueType=Contributor, isContributor=True), # composerAlias: composer's abbreviated, alias, or stage name PropertyDescription( uniqueName='composerAlias', name='COL', namespace='humdrum', valueType=Contributor, isContributor=True), # composerCorporate: composer's corporate name PropertyDescription( uniqueName='composerCorporate', name='COC', namespace='humdrum', valueType=Contributor, isContributor=True), # orchestrator: orchestrator PropertyDescription( uniqueName='orchestrator', name='LOR', namespace='humdrum', valueType=Contributor, isContributor=True), # Imprint information (from the humdrum namespace) # firstPublisher: Name of the first publisher of the work, or the name # of the publisher if a specific edition is being encoded. PropertyDescription( uniqueName='firstPublisher', name='PPR', namespace='humdrum', valueType=Contributor, isContributor=True), # dateFirstPublished: The date of first publication. PropertyDescription( uniqueName='dateFirstPublished', name='PDT', namespace='humdrum', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # publicationTitle: Title of the publication (volume) from which the work # is encoded. May have embedded line breaks ('\n'). PropertyDescription( uniqueName='publicationTitle', name='PTL', namespace='humdrum', isContributor=False), # placeFirstPublished: The place where the source edition for the # digital encoding was first published (location of first edition). PropertyDescription( uniqueName='placeFirstPublished', name='PPP', namespace='humdrum', isContributor=False), # publishersCatalogNumber: Publisher's catalog number. This should not be # confused with better known scholarly catalogs, such as those of Köchel, # Hoboken, etc. PropertyDescription( uniqueName='publishersCatalogNumber', name='PC#', namespace='humdrum', isContributor=False), # scholarlyCatalogName: Scholarly catalog (unabbreviated) name and number. # E.g. 'Koechel 117'. PropertyDescription( uniqueName='scholarlyCatalogName', name='SCA', namespace='humdrum', isContributor=False), # scholarlyCatalogAbbreviation: Scholarly catalog abbreviation and number. # E.g. 'BWV 551'. PropertyDescription( uniqueName='scholarlyCatalogAbbreviation', name='SCT', namespace='humdrum', isContributor=False), # manuscriptSourceName: For unpublished sources, the manuscript source name. PropertyDescription( uniqueName='manuscriptSourceName', name='SMS', namespace='humdrum', isContributor=False), # manuscriptLocation: For unpublished sources, the location of the # manuscript source. PropertyDescription( uniqueName='manuscriptLocation', name='SML', namespace='humdrum', isContributor=False), # manuscriptAccessAcknowledgement: A free format acknowledgement or note # of thanks to a given manuscript owner for scholarly or other access. PropertyDescription( uniqueName='manuscriptAccessAcknowledgement', name='SMA', namespace='humdrum', isContributor=False), # originalDocumentOwner: The owner of the original document PropertyDescription( uniqueName='originalDocumentOwner', name='YOO', namespace='humdrum', valueType=Contributor, isContributor=True), # originalEditor: The editor of the original document PropertyDescription( uniqueName='originalEditor', name='YOE', namespace='humdrum', valueType=Contributor, isContributor=True), # electronicEditor: The editor of the electronic edition PropertyDescription( uniqueName='electronicEditor', name='EED', namespace='humdrum', valueType=Contributor, isContributor=True), # electronicEncoder: The encoder of the electronic edition PropertyDescription( uniqueName='electronicEncoder', name='ENC', namespace='humdrum', valueType=Contributor, isContributor=True), # electronicPublisher: The publisher of the electronic edition. PropertyDescription( uniqueName='electronicPublisher', name='YEP', namespace='humdrum', valueType=Contributor, isContributor=True), # electronicReleaseDate: The date the electronic edition was released. PropertyDescription( uniqueName='electronicReleaseDate', name='YER', namespace='humdrum', valueType=DatePrimitive, # including DateSingle, DateRelative, DateBetween, DateSelection isContributor=False), # The following properties are in the music21 namespace, and are specific to # the file that was parsed to produce this metadata. # fileFormat: The format of the file that was parsed to produce this metadata PropertyDescription( name='fileFormat', namespace='m21FileInfo', isContributor=False), # filePath: The path to the file that was parsed to produce this metadata PropertyDescription( name='filePath', namespace='m21FileInfo', isContributor=False), # corpusFilePath: The path withing the corpus that the file was found at PropertyDescription( name='corpusFilePath', namespace='m21FileInfo', isContributor=False), # fileNumber: The number of the file (within a group of files) that was parsed # to produce this metadata. PropertyDescription( name='fileNumber', namespace='m21FileInfo', valueType=int, isContributor=False), ) # ----------------------------------------------------------------------------- # Dictionaries generated from STANDARD_PROPERTY_DESCRIPTIONS for looking up # various things quickly. # Utility routines to help with the dictionary generation def _uniqueName(prop: PropertyDescription) -> str: if prop.uniqueName: return prop.uniqueName return prop.name def _namespaceName(prop: PropertyDescription) -> str: return f'{prop.namespace}:{prop.name}' # The dictionaries: NAMESPACE_NAME_TO_PROPERTY_DESCRIPTION: dict[str, PropertyDescription] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: NAMESPACE_NAME_TO_PROPERTY_DESCRIPTION[_namespaceName(_x)] = _x NAMESPACE_NAME_TO_UNIQUE_NAME: dict[str, str] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: NAMESPACE_NAME_TO_UNIQUE_NAME[_namespaceName(_x)] = _uniqueName(_x) UNIQUE_NAME_TO_NAMESPACE_NAME: dict[str, str] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: UNIQUE_NAME_TO_NAMESPACE_NAME[_uniqueName(_x)] = _namespaceName(_x) UNIQUE_NAME_TO_PROPERTY_DESCRIPTION: dict[str, PropertyDescription] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: UNIQUE_NAME_TO_PROPERTY_DESCRIPTION[_uniqueName(_x)] = _x UNIQUE_NAME_TO_VALUE_TYPE: dict[str, type] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: UNIQUE_NAME_TO_VALUE_TYPE[_uniqueName(_x)] = _x.valueType MUSIC21_ABBREVIATION_TO_NAMESPACE_NAME: dict[str, str] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: if _x.oldMusic21Abbrev: MUSIC21_ABBREVIATION_TO_NAMESPACE_NAME[_x.oldMusic21Abbrev] = _namespaceName(_x) MUSIC21_WORK_ID_TO_NAMESPACE_NAME: dict[str, str] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: if _x.oldMusic21WorkId: MUSIC21_WORK_ID_TO_NAMESPACE_NAME[_x.oldMusic21WorkId] = _namespaceName(_x) MUSIC21_WORK_ID_TO_UNIQUE_NAME: dict[str, str] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: if _x.oldMusic21WorkId: MUSIC21_WORK_ID_TO_UNIQUE_NAME[_x.oldMusic21WorkId] = _uniqueName(_x) UNIQUE_NAME_TO_MUSIC21_WORK_ID: dict[str, str] = {} for _x in STANDARD_PROPERTY_DESCRIPTIONS: if _x.oldMusic21WorkId: UNIQUE_NAME_TO_MUSIC21_WORK_ID[_uniqueName(_x)] = _x.oldMusic21WorkId ALL_UNIQUE_NAMES: list[str] = list(UNIQUE_NAME_TO_NAMESPACE_NAME.keys()) ALL_MUSIC21_WORK_IDS: list[str] = list(MUSIC21_WORK_ID_TO_NAMESPACE_NAME.keys()) ALL_MUSIC21_ABBREVIATIONS: list[str] = list(MUSIC21_ABBREVIATION_TO_NAMESPACE_NAME.keys()) ALL_NAMESPACE_NAMES: list[str] = list(NAMESPACE_NAME_TO_PROPERTY_DESCRIPTION.keys()) # 'software' is a plural attribute name (never singular) so we have # to carefully leave it out of ALL_SINGLE_ATTRIBUTE_NAMES. _ALL_UNIQUE_NAMES_EXCEPT_SOFTWARE: list[str] = list( name for name in ALL_UNIQUE_NAMES if name != 'software') ALL_SINGLE_ATTRIBUTE_NAMES: list[str] = list( _ALL_UNIQUE_NAMES_EXCEPT_SOFTWARE + ALL_MUSIC21_WORK_IDS + ALL_MUSIC21_ABBREVIATIONS + ['fileFormat' + 'filePath' + 'fileNumber'] ) ALL_PLURAL_ATTRIBUTE_NAMES: list[str] = [ 'composers', 'librettists', 'lyricists', 'software' ] ALL_LEGAL_ATTRIBUTES: list[str] = list( ALL_SINGLE_ATTRIBUTE_NAMES + ALL_PLURAL_ATTRIBUTE_NAMES )