Data-Identifier

 view release on metacpan or  search on metacpan

lib/Data/Identifier.pm  view on Meta::CPAN

    WK_UUID => '8be115d2-dc2f-4a98-91e1-a6e3075cbc31', # uuid
    WK_OID  => 'd08dc905-bbf6-4183-b219-67723c3c8374', # oid
    WK_URI  => 'a8d1637d-af19-49e9-9ef8-6bc1fbcf6439', # uri
    WK_SID  => 'f87a38cb-fd13-4e15-866c-e49901adbec5', # small-identifier
    WK_WD   => 'ce7aae1e-a210-4214-926a-0ebca56d77e3', # wikidata-identifier
    WK_GTIN => '82d529be-0f00-4b4f-a43f-4a22de5f5312', # gtin
    WK_IBAN => 'b1418262-6bc9-459c-b4b0-a054d77db0ea', # iban
    WK_BIC  => 'c8a3a132-f160-473c-b5f3-26a748f37e62', # bic
    WK_DOI  => '931f155e-5a24-499b-9fbb-ed4efefe27fe', # doi
    WK_FC   => 'd576b9d1-47d4-43ae-b7ec-bbea1fe009ba', # factgrid-identifier
    WK_UNICODE_CP => '5f167223-cc9c-4b2f-9928-9fe1b253b560', # unicode-code-point
    WK_SNI  => '039e0bb7-5dd3-40ee-a98c-596ff6cce405', # sirtx-numerical-identifier
    WK_HDI  => 'f8eb04ef-3b8a-402c-ad7c-1e6814cb1998', # host-defined-identifier
    WK_UDI  => '05af99f9-4578-4b79-aabe-946d8e6f5888', # user-defined-identifier

    NS_WD   => '9e10aca7-4a99-43ac-9368-6cbfa43636df', # Wikidata-namespace
    NS_FC   => '6491f7a9-0b29-4ef1-992c-3681cea18182', # factgrid-namespace
    NS_INT  => '5dd8ddbb-13a8-4d6c-9264-36e6dd6f9c99', # integer-namespace
    NS_DATE => 'fc43fbba-b959-4882-b4c8-90a288b7d416', # gregorian-date-namespace
    NS_GTIN => 'd95d8b1f-5091-4642-a6b0-a585313915f1', # gtin-namespace
    NS_UNICODE_CP => '132aa723-a373-48bf-a88d-69f1e00f00cf', # 'unicode-character-namespace'
};

# Features:
my $enabled_oid = 1;

my %uuid_to_uriid_org = (
    WK_UUID() => 'uuid',
    WK_OID()  => 'oid',
    WK_URI()  => 'uri',
    WK_SID()  => 'sid',

lib/Data/Identifier.pm  view on Meta::CPAN

    sid  => __PACKAGE__->new($well_known_uuid => WK_SID,    validate => RE_UINT),
    sni  => __PACKAGE__->new($well_known_uuid => WK_SNI,    validate => RE_UINT),
    wd   => __PACKAGE__->new($well_known_uuid => WK_WD,     validate => RE_QID,  namespace => NS_WD,   generate => 'id-based'),
    fc   => __PACKAGE__->new($well_known_uuid => WK_FC,     validate => RE_QID,  namespace => NS_FC,   generate => 'id-based'),
    gtin => __PACKAGE__->new($well_known_uuid => WK_GTIN,   validate => RE_GTIN, namespace => NS_GTIN, generate => 'id-based'),
    iban => __PACKAGE__->new($well_known_uuid => WK_IBAN),
    bic  => __PACKAGE__->new($well_known_uuid => WK_BIC),
    doi  => __PACKAGE__->new($well_known_uuid => WK_DOI,    validate => RE_DOI),

    # Unofficial, not part of public API:
    unicodecp => __PACKAGE__->new($well_known_uuid => WK_UNICODE_CP, validate => RE_UNICODE, namespace => NS_UNICODE_CP, generate => 'id-based'),

    hdi => __PACKAGE__->new($well_known_uuid => WK_HDI, validate => RE_UINT),
    udi => __PACKAGE__->new($well_known_uuid => WK_UDI, validate => RE_UINT),
);

my %registered;

$_->register foreach values %well_known;

# Refill with sids:

lib/Data/Identifier.pm  view on Meta::CPAN

        'ddd60c5c-2934-404f-8f2d-fcb4da88b633'  =>   1, # also-shares-identifier
        WK_UUID()                               =>   2,
        'bfae7574-3dae-425d-89b1-9c087c140c23'  =>   3, # tagname
        '7f265548-81dc-4280-9550-1bd0aa4bf748'  =>   4, # has-type
        WK_URI()                                =>   5,
        WK_OID()                                =>   6,
        # Unassigned: 7
        'd0a4c6e2-ce2f-4d4c-b079-60065ac681f1'  =>   8, # language-tag-identifier
        WK_WD()                                 =>   9,
        '923b43ae-a50e-4db3-8655-ed931d0dd6d4'  =>  10, # specialises
        'eacbf914-52cf-4192-a42c-8ecd27c85ee1'  =>  11, # unicode-string
        '928d02b0-7143-4ec9-b5ac-9554f02d3fb1'  =>  12, # integer
        'dea3782c-6bcb-4ce9-8a39-f8dab399d75d'  =>  13, # unsigned-integer
        # Unassigned: 14, 15
        '6ba648c2-3657-47c2-8541-9b73c3a9b2b4'  =>  16, # default-context
        '52a516d0-25d8-47c7-a6ba-80983e576c54'  =>  17, # proto-file
        '1cd4a6c6-0d7c-48d1-81e7-4e8d41fdb45d'  =>  18, # final-file-size
        '6085f87e-4797-4bb2-b23d-85ff7edc1da0'  =>  19, # text-fragment
        '4c9656eb-c130-42b7-9348-a1fee3f42050'  =>  20, # also-list-contains-also
        '298ef373-9731-491d-824d-b2836250e865'  =>  21, # proto-message
        '7be4d8c7-6a75-44cc-94f7-c87433307b26'  =>  22, # proto-entity

lib/Data/Identifier.pm  view on Meta::CPAN

        WK_UUID()                               => 'uuid',
        WK_OID()                                => 'oid',
        WK_URI()                                => 'uri',
        WK_SID()                                => 'small-identifier',
        WK_WD()                                 => 'wikidata-identifier',
        WK_GTIN()                               => 'gtin',
        WK_IBAN()                               => 'iban',
        WK_BIC()                                => 'bic',
        WK_DOI()                                => 'doi',
        WK_FC()                                 => 'factgrid-identifier',
        WK_UNICODE_CP()                         => 'unicode-code-point',
        WK_SNI()                                => 'sirtx-numerical-identifier',
        WK_HDI()                                => 'host-defined-identifier',
        WK_UDI(),                               => 'user-defined-identifier',
        NS_WD()                                 => 'Wikidata-namespace',
        NS_FC()                                 => 'factgrid-namespace',
        NS_INT()                                => 'integer-namespace',
        NS_DATE()                               => 'gregorian-date-namespace',
        NS_UNICODE_CP()                         => 'unicode-character-namespace',

        'ddd60c5c-2934-404f-8f2d-fcb4da88b633'  => 'also-shares-identifier',
        'bfae7574-3dae-425d-89b1-9c087c140c23'  => 'tagname',
        '7f265548-81dc-4280-9550-1bd0aa4bf748'  => 'has-type',
        'd0a4c6e2-ce2f-4d4c-b079-60065ac681f1'  => 'language-tag-identifier',
        '923b43ae-a50e-4db3-8655-ed931d0dd6d4'  => 'specialises',
        'eacbf914-52cf-4192-a42c-8ecd27c85ee1'  => 'unicode-string',
        '928d02b0-7143-4ec9-b5ac-9554f02d3fb1'  => 'integer',
        'dea3782c-6bcb-4ce9-8a39-f8dab399d75d'  => 'unsigned-integer',
        '6ba648c2-3657-47c2-8541-9b73c3a9b2b4'  => 'default-context',
        '52a516d0-25d8-47c7-a6ba-80983e576c54'  => 'proto-file',
        '1cd4a6c6-0d7c-48d1-81e7-4e8d41fdb45d'  => 'final-file-size',
        '6085f87e-4797-4bb2-b23d-85ff7edc1da0'  => 'text-fragment',
        '4c9656eb-c130-42b7-9348-a1fee3f42050'  => 'also-list-contains-also',
        '298ef373-9731-491d-824d-b2836250e865'  => 'proto-message',
        '7be4d8c7-6a75-44cc-94f7-c87433307b26'  => 'proto-entity',
        '65bb36f2-b558-48af-8512-bca9150cca85'  => 'proxy-type',

lib/Data/Identifier.pm  view on Meta::CPAN

        'd2750351-aed7-4ade-aa80-c32436cc6030'  => 'also-has-role',
        '448c50a8-c847-4bc7-856e-0db5fea8f23b'  => 'final-file-encoding',
        '79385945-0963-44aa-880a-bca4a42e9002'  => 'final-file-hash',
        '3fde5688-6e34-45e9-8f33-68f079b152c8'  => 'SEEK_SET',
        'bc598c52-642e-465b-b079-e9253cd6f190'  => 'SEEK_CUR',
        '06aff30f-70e8-48b4-8b20-9194d22fc460'  => 'SEEK_END',
        '59a5691a-6a19-4051-bc26-8db82c019df3'  => 'inode',
        '2c7e15ed-aa2f-4e2f-9a1d-64df0c85875a'  => 'chat-0-word-identifier',
        '53863a15-68d4-448d-bd69-a9b19289a191'  => 'unsigned-integer-generator',
        'e8aa9e01-8d37-4b4b-8899-42ca0a2a906f'  => 'signed-integer-generator',
        'd74f8c35-bcb8-465c-9a77-01010e8ed25c'  => 'unicode-character-generator',
        '55febcc4-6655-4397-ae3d-2353b5856b34'  => 'rgb-colour-generator',
        '97b7f241-e1c5-4f02-ae3c-8e31e501e1dc'  => 'date-generator',
        '19659233-0a22-412c-bdf1-8ee9f8fc4086'  => 'multiplicity-generator',
        '5ec197c3-1406-467c-96c7-4b1a6ec2c5c9'  => 'minimum-multiplicity-generator',
    );

    foreach my $ise (keys %displaynames) {
        my $identifier = __PACKAGE__->new(ise => $ise);
        $identifier->{displayname} //= $displaynames{$ise};
        $identifier->register; # re-register

lib/Data/Identifier/Generate.pm  view on Meta::CPAN

    $opts{request}      = $request;
    $opts{style}        = 'integer-based';
    $opts{namespace}    = Data::Identifier->NS_INT();
    $opts{displayname}//= $request;
    $opts{generator}    = $request >= 0 ? WK_UNSIGNED_INTEGER_GENERATOR : WK_SIGNED_INTEGER_GENERATOR;

    return $pkg->generic(%opts);
}


sub unicode_character {
    my ($pkg, $type, $request, %opts) = @_;
    my $unicode_cp;
    my $unicode_cp_str;

    if ($type eq 'unicode') {
        if ($request =~ /^[Uu]\+([0-9a-fA-F]+)$/) {
            $unicode_cp = hex($1);
        } else {
            $unicode_cp = int($request);
        }
    } elsif ($type eq 'ascii') {
        $unicode_cp = int($request);
        croak 'US-ASCII character out of range: '.$unicode_cp if $unicode_cp < 0 || $unicode_cp > 0x7F;
    } elsif ($type eq 'raw') {
        croak 'Raw value is not exactly one character long' unless length($request) == 1;
        $unicode_cp = ord($request);
    }

    croak 'Unicode character out of range: '.$unicode_cp if $unicode_cp < 0 || $unicode_cp > 0x10FFFF;

    $unicode_cp_str = sprintf('U+%04X', $unicode_cp);

    if ($unicode_cp == 0xFFFC || $unicode_cp == 0xFFFD || $unicode_cp == 0xFEFF || $unicode_cp == 0xFFFE) {
        croak 'Rejected use of special character: '.$unicode_cp_str unless $opts{allow_special};
    }

    return Data::Identifier->new(unicodecp => $unicode_cp_str, displayname => $opts{displayname}, generator => WK_UNICODE_CHARACTER_GENERATOR, request => $unicode_cp_str);
}


#@returns Data::Identifier
sub colour {
    my ($pkg, $colour, %opts) = @_;
    $opts{request}      = $colour;
    $opts{style}        = 'colour';
    $opts{namespace}    = '88d3944f-a13b-4e35-89eb-e3c1fbe53e76';
    $opts{generator}    = WK_RGB_COLOUR_GENERATOR;

lib/Data/Identifier/Generate.pm  view on Meta::CPAN


=item C<displayname>

The displayname as to be used for the identifier.
This is the same as defined by L<Data::Identifier/new>.

Defaults to the passed number.

=back

=head2 unicode_character

    my Data::Identifier $identifier = Data::Identifier::Generate->unicode_character($type => $request [, %opts] );
    # e.g.:
    my Data::Identifier $identifier = Data::Identifier::Generate->unicode_character(unicode => 0x1F981);
    # or:
    my Data::Identifier $identifier = Data::Identifier::Generate->unicode_character(unicode => 'U+1F981');

Creates an identifier for the given unicode character.

The following types are supported:

=over

=item C<unicode>

The unicode code point as a number (e.g. C<0x1F981>) or as in the standard format (e.g. C<'U+1F981'>).

=item C<ascii>

The US-ASCII code point (e.g. C<65>).

=item C<raw>

A perl string with exactly one character. The character is

=back

lib/Data/Identifier/Wellknown.pm  view on Meta::CPAN

.   d95d8b1f-5091-4642-a6b0-a585313915f1    gtin-namespace
.   2c829846-c745-4741-8f9e-5f7e761828d1    xkcd-namespace
.   6f758584-101d-4a12-bbb3-66a8e8bfd92a    iconclass-namespace
.   47dd950c-9089-4956-87c1-54c122533219    language-tag-namespace
.   02513f26-d6ff-4107-98a8-2c9cb492115b    body-namespace
.   bd3136b7-56f2-48a3-b206-fd2bd96551d5    character-namespace
.   f45de583-2851-44e7-a4b5-8a9c1a2128a9    birth-namespace
.   db8f1c33-6c3d-4c15-afd8-f5ecbce16eaf    death-namespace
.   6491f7a9-0b29-4ef1-992c-3681cea18182    factgrid-namespace
.   744eaf4e-ae93-44d8-9ab5-744105222da6    roaraudio-error-namespace
.   132aa723-a373-48bf-a88d-69f1e00f00cf    unicode-character-namespace
.   3be53c82-b542-478c-92c4-cfdaed047d83    unicode-block-namespace
.   eb239013-7556-4091-959f-4d78ca826757    dot-comments-category-namespace
.   4004c90f-fe88-4c2e-9f92-e678f54c6417    dot-comments-rating-namespace


$class subject-type
$type uuid

.   eacbf914-52cf-4192-a42c-8ecd27c85ee1    unicode-string              sid=11
.   928d02b0-7143-4ec9-b5ac-9554f02d3fb1    integer                     sid=12
.   dea3782c-6bcb-4ce9-8a39-f8dab399d75d    unsigned-integer            sid=13
.   52a516d0-25d8-47c7-a6ba-80983e576c54    proto-file                  sid=17
.   298ef373-9731-491d-824d-b2836250e865    proto-message               sid=21
.   7be4d8c7-6a75-44cc-94f7-c87433307b26    proto-entity                sid=22
.   59a5691a-6a19-4051-bc26-8db82c019df3    inode                       sid=37
.   b72508ba-7fb9-42ae-b4cf-b850b53a16c2    account                     sid=41
.   f6249973-59a9-47e2-8314-f7cf9a5f77bf    person                      sid=77
.   5501e545-f39a-4d62-9f65-792af6b0ccba    body                        sid=78
.   a331f2c5-20e5-4aa2-b277-8e63fd03438d    character                   sid=79

lib/Data/Identifier/Wellknown.pm  view on Meta::CPAN

.   ce7aae1e-a210-4214-926a-0ebca56d77e3    wikidata-identifier         sid=9,sni=123
.   2bffc55d-7380-454e-bd53-c5acd525d692    roaraudio-error-number      sid=26,sni=116
.   66beb503-9159-41cb-9e7f-2c3eb6b4b5ff    roaraudio-error-symbol      sni=117
.   f87a38cb-fd13-4e15-866c-e49901adbec5    small-identifier            sid=27,sni=115
.   2c7e15ed-aa2f-4e2f-9a1d-64df0c85875a    chat-0-word-identifier      sid=112,sni=118
.   82d529be-0f00-4b4f-a43f-4a22de5f5312    gtin                        sid=160
.   931f155e-5a24-499b-9fbb-ed4efefe27fe    doi                         sid=162

.   135032f7-cc60-46ee-8f64-1724c2a56fa2    x11-colour-name
.   f4b073ff-0b53-4034-b4e4-4affe5caf72c    ascii-code-point            sni=122
.   5f167223-cc9c-4b2f-9928-9fe1b253b560    unicode-code-point
.   5e80c7b7-215e-4154-b310-a5387045c336    sirtx-logical               sni=129
.   039e0bb7-5dd3-40ee-a98c-596ff6cce405    sirtx-numerical-identifier  sid=113,sni=10
.   d73b6550-5309-46ad-acc9-865c9261065b    sirtx-function-number       sni=127
.   d690772e-de18-4714-aa4e-73fd35e8efc9    sirtx-function-name         sni=128
.   b1418262-6bc9-459c-b4b0-a054d77db0ea    iban
.   c8a3a132-f160-473c-b5f3-26a748f37e62    bic

.   8db88212-69df-40f3-a5cf-105dcd853d44    standard-digest-algorithm-identifier
.   8238da08-ca93-4d67-bf40-54818aa94405    rfc9530-digest-identifier
.   0d4ef6fa-0f9a-4bc8-9fc1-e4f00725397e    openpgp-digest-identifier

lib/Data/Identifier/Wellknown.pm  view on Meta::CPAN


$extra_classes generator
.   97b7f241-e1c5-4f02-ae3c-8e31e501e1dc    gregorian-date-generator
.   55febcc4-6655-4397-ae3d-2353b5856b34    rgb-colour-generator
.   913ee958-fda7-48ff-a57a-e34d11dc3273    gtin-generator
.   d511f370-0e49-42d5-ad18-bf280dc97e08    body-generator
.   bd1a1966-2e71-43cc-a7ce-f7a4547df450    character-generator
.   2b85ca08-921c-4683-a102-f18748c88fda    birth-generator
.   3e1c709e-32bf-4943-a9fa-8c25cb37dc92    death-generator
.   39f643aa-37ab-413d-87d7-4260bb1785b9    roaraudio-error-generator
.   d74f8c35-bcb8-465c-9a77-01010e8ed25c    unicode-character-generator
.   a649d48d-35b0-4454-81af-c5fd2eb40373    media-sub-type-generator
.   5c8c072e-f1a2-4824-9721-d57e811b6b4f    media-super-type-generator


$class _leftover_sids
$type uuid

% Handled above: 1 - 6
% Unassigned: 7
% Handled above: 8 - 13

t/20_generate.t  view on Meta::CPAN

    -2147483647   => '4195ae1b-66f4-558e-bde3-055909b43f13',
);

foreach my $int (sort keys %int_vectors) {
    my $identifier = Data::Identifier::Generate->integer($int);
    isa_ok($identifier, 'Data::Identifier');
    is($identifier->uuid, $int_vectors{$int}, 'Matching UUID for '.$int);
}

foreach my $char (sort keys %character_vectors) {
    my $identifier = Data::Identifier::Generate->unicode_character(raw => $char);
    isa_ok($identifier, 'Data::Identifier');
    is($identifier->uuid, $character_vectors{$char}, 'Matching UUID for '.ord($char));
}

foreach my $colour (sort keys %colour_vectors) {
    my $identifier = Data::Identifier::Generate->colour($colour);
    isa_ok($identifier, 'Data::Identifier');
    is($identifier->uuid, $colour_vectors{$colour}, 'Matching UUID for '.$colour);
}



( run in 0.294 second using v1.01-cache-2.11-cpan-f29a10751f0 )