This is a great topic! Security tokens are a case where a single issuer would use multiple tokens with the same symbol (tranches). We use this all the time. for example: IBM:SeriesA*
ibm.com,
IBM:SeriesB*
ibm.com OR
IBM:RegD*
ibm.com,
IBM:RegS*
ibm.com OR BOND1:Mezz1*
walmart.com,
BOND1:Mezz2*
walmart.com. Tranches or Share classes are very common in the securities world. You could handle this by using different domains - or even different tokens, but this makes for a mess and hides the actual linkage between the classes (different rights, same asset).
As a cross ledger provider, we use a different syntax to cover a range of cases. Here's what we do:
For tokens, [Provider(namespace)]:[symbol].[issuer/domain].[tranche].[instance for NFTs]
1. An implementation has defaults for Provider and Issuer. Tranche and Instance are not required. Only symbol is required. This makes for easy user friendly name that resolve uniquely while retaining expressivity for complex cases. Each implementation sets its default. So:
USD resolves to USD issued by Securrency distinct from USD.CompanyB issued by a separate company. IBM.DTCC.Preferred resolves to IBM preferred shares issued and custodied bt DTCC. Finally, DTCCPrivate:IBM.DTCC.Preferred represents an internal ledger or Ethereum:IBM.DTCC.Preferred represents the shares if they are transferred to a different ledger.
2. Provider allows differing namespaces, ledgers, and implementations even if parties collide on naming or addresses. This provides a convention that works even if parties are using public and private ledgers - or in the cases (not for Stellar of course!) where there is a fork.It also allows for support of different syntax for pointing to a token like the use of a naming server.
3. I recognize that "." is not a good delimiter for a namespace, if domain names are used for issuer. We'll need to switch this. We ran into something similar for Hashgraph
4. Tranche is SUPER useful in the securities world. You won't make a dent there without it.
5. Instance represents unique identifiers for NFTs (which may also be separated by tranches). More on this some other time.
For wallets, [Provider]:[address].[account(if custodian)]
1. Again, this is super useful for cross ledger operations or conflicting naming. Notice the account extension which is important for custodial work (we carry these details in the memo field)
Sorry for a long response. Securrency cares a great deal about this one...