X-Git-Url: https://git.ladys.computer/Etiquette/blobdiff_plain/998a27ffd305bdbef26b0f864924660e575e6e44..6365487166d73a75e1c66b7c8d5683ac46741ed2:/model.js?ds=sidebyside diff --git a/model.js b/model.js index 6963a16..48e6813 100644 --- a/model.js +++ b/model.js @@ -239,15 +239,19 @@ class Tag { * generating the value of `TagSystem::Tag`. It isn’t possible to * access this function in its unbound form from outside this module. * + * ☡ This function throws if the I·R·I is not in the `.iriSpace` of + * the `TagSystem` associated with this constructor. + * * ※ If the I·R·I is not recognized, this function returns `null`. */ static fromIRI(system, storage, iri) { const name = `${iri}`; - const prefix = - `https://${system.authorityName}/tag:${system.taggingEntity}:`; + const prefix = `${system.iriSpace}`; if (!name.startsWith(prefix)) { // The I·R·I does not begin with the expected prefix. - return null; + throw new RangeError( + `I·R·I did not begin with the expected prefix: ${iri}`, + ); } else { // The I·R·I begins with the expected prefix. const identifier = name.substring(prefix.length); @@ -298,7 +302,7 @@ class Tag { if (!tagName.startsWith(tagPrefix)) { // The Tag U·R·I does not begin with the expected prefix. throw new RangeError( - `Tag U·R·I did not begin with the expected prefix: ${tagName}`, + `Tag U·R·I did not begin with the expected prefix: ${tagURI}`, ); } else { // The I·R·I begins with the expected prefix. @@ -973,10 +977,13 @@ class Tag { /** Returns the I·R·I for this `Tag`. */ get iri() { - const tagURI = this.tagURI; - return tagURI == null - ? null - : `https://${this.authorityName}/${tagURI}`; + const { identifier, iriSpace } = this; + return identifier == null ? null : `${iriSpace}${identifier}`; + } + + /** Returns the I·R·I space for this `Tag`. */ + get iriSpace() { + return this.#system.iriSpace; } /** Returns the kind of this `Tag`. */ @@ -1700,7 +1707,14 @@ export class TagSystem { /** Returns the I·R·I for this `TagSystem`. */ get iri() { - return `https://${this.authorityName}/${this.tagURI}`; + return `${this.iriSpace}${this.identifier}`; + } + + /** + * Returns the prefix used for I·R·I’s of `Tag`s in this `TagSystem`. + */ + get iriSpace() { + return `https://${this.authorityName}/tag:${this.taggingEntity}:`; } /** Returns the Tag U·R·I for this `TagSystem`. */