Skip to content

Commit 8804f4c

Browse files
turt2liverichvdh
authored andcommitted
Definition of "Standard Identifier Format"
Spec for #2758
1 parent dce06f6 commit 8804f4c

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

content/appendices.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,46 @@ Some identifiers are specific to given room versions, please refer to
387387
the [room versions specification](/rooms) for more
388388
information.
389389

390+
### Standard Identifier Format
391+
392+
Throughout the specification some identifiers will mention they use the
393+
"Standard Identifier Format", which is a common definition for how
394+
identifiers are to be represented. Identifiers which are not explicitly
395+
listed in this specification or do not use the Standard Identifier Format
396+
have undefined grammar.
397+
398+
The requirements of identifiers using this format are:
399+
400+
* An identifier may not be less than one character or more than 255 characters
401+
in length.
402+
* Identifiers must start with one of the characters `[a-z]`, and be entirely
403+
composed of the characters `[a-z]`, `[0-9]`, `-`, `_` and `.`.
404+
* Identifiers starting with the characters `m.` are reserved.
405+
* Identifiers which are not described in the specification should follow the
406+
Java Package Naming Convention to namespace their identifier. This is typically
407+
a reverse DNS format, such as `com.example.identifier`.
408+
409+
This identifier format is intended for solely non-user-visible identifiers.
410+
411+
{{% boxes/note %}}
412+
Identifiers which are accepted into the specification through the proposal process
413+
are assumed to use this Standard Identifier Format unless explicitly mentioned
414+
otherwise in the proposal.
415+
{{% /boxes/note %}}
416+
417+
{{% boxes/note %}}
418+
Identifiers can and do inherit grammar from this specification. For example, "this
419+
identifier uses the Standard Identifier Format, though without the namespacing
420+
requirements" - this means that `m.` is still reserved, but that implementations
421+
do not have to use the reverse DNS scheme to namespace their custom identifier.
422+
{{% /boxes/note %}}
423+
424+
{{% boxes/rationale %}}
425+
ASCII characters do not have issues with homoglyphs or alternative encodings which
426+
might interfere with the identifier's purpose. Additionally, using lowercase
427+
characters prevents concerns about case sensitivity.
428+
{{% /boxes/rationale %}}
429+
390430
### Server Name
391431

392432
A homeserver is uniquely identified by its server name. This value is

0 commit comments

Comments
 (0)