[tracker-miners/sam/musicbrainz-urls] Use the actual IDs for Musicbrainz resources



commit 5aa3671914bc4d247017a01d66094a89f3e0b949
Author: Sam Thursfield <sam afuera me uk>
Date:   Mon Dec 9 21:06:52 2019 +0100

    Use the actual IDs for Musicbrainz resources
    
    We were generating internal unique IDs for Musicbrainz resources,
    which looked like this:
    
        urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FArtist:76b2e842-5e85-4c97-ab62-d5bc315595b5
    
    The actual Musicbrainz URL is already guaranteed to uniquely represent
    the resource, so let's use that to identify the resource inside Tracker.
    This means the URL is shorter, more readable, and can be browsed. The
    above example becomes this:
    
        https://musicbrainz.org/artist/76b2e842-5e85-4c97-ab62-d5bc315595b5
    
    This shouldn't be backported to the stable branch.

 src/libtracker-extract/tracker-resource-helpers.c  | 25 ++++++--
 src/libtracker-extract/tracker-resource-helpers.h  |  2 +-
 src/tracker-extract/tracker-extract-mp3.c          | 49 +++++++++-------
 src/tracker-extract/tracker-extract-vorbis.c       | 68 +++++++++++++---------
 .../audio/mp3-id3v2.4-1.expected.json              | 10 ++--
 .../audio/mp3-id3v2.4-2.expected.json              | 10 ++--
 .../audio/vorbis.expected.json                     | 10 ++--
 7 files changed, 107 insertions(+), 67 deletions(-)
---
diff --git a/src/libtracker-extract/tracker-resource-helpers.c 
b/src/libtracker-extract/tracker-resource-helpers.c
index 56f8f1307..36525a5e1 100644
--- a/src/libtracker-extract/tracker-resource-helpers.c
+++ b/src/libtracker-extract/tracker-resource-helpers.c
@@ -144,32 +144,47 @@ tracker_extract_new_equipment (const char *make,
  * tracker_extract_new_external_reference:
  * @source_uri: the source uri of the external reference
  * @identifier: the identifier of the external reference
+ * @uri: (allow-none): URI of the resource (leave blank to generate one).
  *
  * Create a new tracker:ExternalReference resource and set its source and its
  * identifier. Both @source and @identifer must be non-%NULL.
  *
+ * External references link local data to online resources where apps can fetch
+ * more metadata. One example is MusicBrainz, an open database of music releases.
+ * Here is an example of creating a tracker:ExternalResource that could be used
+ * to link the music artist 'Pulp' to the corresponding Musicbrainz data:
+ *
+ * <example>
+ * <programlisting>
+ *     TrackerResource *mb_artist = tracker_extract_new_external_reference (
+ *         "https://musicbrainz.org/doc/Artist";, "76b2e842-5e85-4c97-ab62-d5bc315595b5",
+ *         "https://musicbrainz.org/artist/76b2e842-5e85-4c97-ab62-d5bc315595b5";);
+ * </programlisting>
+ * </example>
+ *
  * Returns: a newly allocated #TrackerResource instance, of type tracker:ExternalReference
  *
  * Since: 2.3.0
  */
 TrackerResource *
 tracker_extract_new_external_reference (const char *source_uri,
-                                       const char *identifier)
+                                       const char *identifier,
+                                       const char *uri)
 {
        TrackerResource *external_reference;
-       gchar *uri;
+       g_autofree gchar *generated_uri = NULL;
 
        g_return_val_if_fail (source_uri != NULL && identifier != NULL, NULL);
 
-       uri = tracker_sparql_escape_uri_printf ("urn:ExternalReference:%s:%s", source_uri, identifier);
+       if (uri == NULL) {
+               uri = generated_uri = tracker_sparql_escape_uri_printf ("urn:ExternalReference:%s:%s", 
source_uri, identifier);
+       }
 
        external_reference = tracker_resource_new (uri);
        tracker_resource_set_uri (external_reference, "rdf:type", "tracker:ExternalReference");
        tracker_resource_set_uri (external_reference, "tracker:referenceSource", source_uri);
        tracker_resource_set_string (external_reference, "tracker:referenceIdentifier", identifier);
 
-       g_free(uri);
-
        return external_reference;
 }
 
diff --git a/src/libtracker-extract/tracker-resource-helpers.h 
b/src/libtracker-extract/tracker-resource-helpers.h
index be067a516..25d5023ca 100644
--- a/src/libtracker-extract/tracker-resource-helpers.h
+++ b/src/libtracker-extract/tracker-resource-helpers.h
@@ -32,7 +32,7 @@ G_BEGIN_DECLS
 TrackerResource *tracker_extract_new_artist (const char *name);
 TrackerResource *tracker_extract_new_contact (const char *fullname);
 TrackerResource *tracker_extract_new_equipment (const char *make, const char *model);
-TrackerResource *tracker_extract_new_external_reference (const char *source_uri, const char *identifier);
+TrackerResource *tracker_extract_new_external_reference (const char *source_uri, const char *identifier, 
const char *uri);
 TrackerResource *tracker_extract_new_location (const char *address, const char *state, const char *city, 
const char *country, const char *gps_altitude, const char *gps_latitude, const char *gps_longitude);
 TrackerResource *tracker_extract_new_music_album_disc (const char *album_title, TrackerResource 
*album_artist, int disc_number, const char *date);
 TrackerResource *tracker_extract_new_tag (const char *label);
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index 0a88e2d98..bdbeee9e5 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -2764,7 +2764,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
 
        if (md.album_name) {
                TrackerResource *album_disc = NULL, *album_artist = NULL;
-               TrackerResource *mb_release_id = NULL, *mb_release_group_id = NULL;
+               TrackerResource *mb_release = NULL, *mb_release_group = NULL;
 
                if (md.album_artist_name)
                        album_artist = tracker_extract_new_artist (md.album_artist_name);
@@ -2779,17 +2779,21 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                tracker_resource_set_take_relation (main_resource, "nmm:musicAlbumDisc", album_disc);
 
                if (md.mb_release_id) {
-                       mb_release_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release";,
-                                                                              md.mb_release_id);
+                       g_autofree char *mb_release_uri = 
g_strdup_printf("https://musicbrainz.org/release/%s";, md.mb_release_id);
+                       mb_release = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release";,
+                                                                           md.mb_release_id,
+                                                                           mb_release_uri);
 
-                       tracker_resource_set_take_relation (md.album, "tracker:hasExternalReference", 
mb_release_id);
+                       tracker_resource_set_take_relation (md.album, "tracker:hasExternalReference", 
mb_release);
                }
 
                if (md.mb_release_group_id) {
-                       mb_release_group_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release_Group";,
-                                                                                    md.mb_release_group_id);
+                       g_autofree char *mb_release_group_uri = 
g_strdup_printf("https://musicbrainz.org/release-group/%s";, md.mb_release_group_id);
+                       mb_release_group = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release_Group";,
+                                                                                 md.mb_release_group_id,
+                                                                                 mb_release_group_uri);
 
-                       tracker_resource_add_take_relation (md.album, "tracker:hasExternalReference", 
mb_release_group_id);
+                       tracker_resource_add_take_relation (md.album, "tracker:hasExternalReference", 
mb_release_group);
                }
 
                if (md.track_count > 0) {
@@ -2816,11 +2820,10 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
        if (md.performer) {
                tracker_resource_set_relation (main_resource, "nmm:performer", md.performer);
                if (md.mb_artist_id) {
-                       TrackerResource *mb_artist_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Artist";,
-                                                                                              
md.mb_artist_id);
-
-                       tracker_resource_add_relation (md.performer, "tracker:hasExternalReference", 
mb_artist_id);
-                       g_object_unref (mb_artist_id);
+                       g_autofree char *mb_artist_uri = g_strdup_printf("https://musicbrainz.org/artist/%s";, 
md.mb_artist_id);
+                       g_autoptr(TrackerResource) mb_artist = tracker_extract_new_external_reference(
+                           "https://musicbrainz.org/doc/Artist";, md.mb_artist_id, mb_artist_uri);
+                       tracker_resource_add_relation (md.performer, "tracker:hasExternalReference", 
mb_artist);
                }
        }
 
@@ -2864,19 +2867,25 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
        }
 
        if (md.mb_recording_id) {
-               TrackerResource *mb_recording_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Recording";,
-                                                                                         md.mb_recording_id);
+               g_autofree char *mb_recording_uri;
+               g_autoptr(TrackerResource) mb_recording;
+
+               mb_recording_uri = g_strdup_printf("https://musicbrainz.org/recording/%s";, 
md.mb_recording_id);
+               mb_recording = tracker_extract_new_external_reference("https://musicbrainz.org/doc/Recording";,
+                                                                     md.mb_recording_id, mb_recording_uri);
 
-               tracker_resource_add_relation (main_resource, "tracker:hasExternalReference", 
mb_recording_id);
-               g_object_unref (mb_recording_id);
+               tracker_resource_add_relation (main_resource, "tracker:hasExternalReference", mb_recording);
        }
 
        if (md.mb_track_id) {
-               TrackerResource *mb_track_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Track";,
-                                                                                     md.mb_track_id);
+               g_autofree char *mb_track_uri;
+               g_autoptr(TrackerResource) mb_track;
+
+               mb_track_uri = g_strdup_printf("https://musicbrainz.org/track/%s";, md.mb_track_id);
+               mb_track = tracker_extract_new_external_reference("https://musicbrainz.org/doc/Track";,
+                                                                 md.mb_track_id, mb_track_uri);
 
-               tracker_resource_add_relation (main_resource, "tracker:hasExternalReference", mb_track_id);
-               g_object_unref (mb_track_id);
+               tracker_resource_add_relation (main_resource, "tracker:hasExternalReference", mb_track);
        }
 
        if (md.acoustid_fingerprint) {
diff --git a/src/tracker-extract/tracker-extract-vorbis.c b/src/tracker-extract/tracker-extract-vorbis.c
index 6a4df3bae..10e6ab506 100644
--- a/src/tracker-extract/tracker-extract-vorbis.c
+++ b/src/tracker-extract/tracker-extract-vorbis.c
@@ -171,11 +171,15 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                md.creator = tracker_extract_new_artist (md.creator_name);
 
                if (vd.mb_artist_id) {
-                       TrackerResource *mb_artist_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Artist";,
-                                                                                              
vd.mb_artist_id);
+                       g_autofree char *mb_artist_uri;
+                       TrackerResource *mb_artist;
 
-                       tracker_resource_set_relation (md.creator, "tracker:hasExternalReference", 
mb_artist_id);
-                       g_object_unref (mb_artist_id);
+                       mb_artist_uri = g_strdup_printf("https://musicbrainz.org/artist/%s";, vd.mb_artist_id);
+                       mb_artist = tracker_extract_new_external_reference 
("https://musicbrainz.org/doc/Artist";,
+                                                                           vd.mb_artist_id,
+                                                                           mb_artist_uri);
+
+                       tracker_resource_set_take_relation (md.creator, "tracker:hasExternalReference", 
mb_artist);
                        g_free (vd.mb_artist_id);
                }
 
@@ -184,7 +188,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
 
        if (vd.album) {
                TrackerResource *album, *album_disc, *album_artist;
-               TrackerResource *mb_release_id = NULL, *mb_release_group_id = NULL;
+               TrackerResource *mb_release = NULL, *mb_release_group = NULL;
 
                if (vd.album_artist) {
                        album_artist = tracker_extract_new_artist (vd.album_artist);
@@ -215,22 +219,28 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                }
 
                if (vd.mb_release_id) {
-                       mb_release_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release";,
-                                                                              vd.mb_release_id);
+                       g_autofree char *mb_release_uri;
+
+                       mb_release_uri = g_strdup_printf("https://musicbrainz.org/release/%s";, 
vd.mb_release_id);
+                       mb_release = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release";,
+                                                                           vd.mb_release_id, mb_release_uri);
 
-                       tracker_resource_set_relation (album, "tracker:hasExternalReference", mb_release_id);
+                       tracker_resource_set_relation (album, "tracker:hasExternalReference", mb_release);
                        g_free (vd.mb_release_id);
                }
 
                if (vd.mb_release_group_id) {
-                       mb_release_group_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release_Group";,
-                                                                                    vd.mb_release_group_id);
+                       g_autofree char *mb_release_group_uri;
+
+                       mb_release_group_uri = g_strdup_printf("https://musicbrainz.org/release-group/%s";, 
vd.mb_release_group_id);
+                       mb_release_group = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Release_Group";,
+                                                                                 vd.mb_release_group_id, 
mb_release_group_uri);
 
-                       if (mb_release_id) {
-                               tracker_resource_add_relation (album, "tracker:hasExternalReference", 
mb_release_group_id);
+                       if (mb_release) {
+                               tracker_resource_add_relation (album, "tracker:hasExternalReference", 
mb_release_group);
 
                        } else
-                               tracker_resource_set_relation (album, "tracker:hasExternalReference", 
mb_release_group_id);
+                               tracker_resource_set_relation (album, "tracker:hasExternalReference", 
mb_release_group);
 
                        g_free (vd.mb_release_group_id);
                }
@@ -239,8 +249,8 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                tracker_resource_set_relation (metadata, "nmm:musicAlbumDisc", album_disc);
 
                g_object_unref (album_disc);
-               g_object_unref (mb_release_id);
-               g_object_unref (mb_release_group_id);
+               g_object_unref (mb_release);
+               g_object_unref (mb_release_group);
        }
 
        g_free (vd.track_count);
@@ -319,28 +329,34 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                g_free (vd.acoustid_fingerprint);
        }
 
-       TrackerResource *mb_recording_id = NULL, *mb_track_id = NULL;
+       TrackerResource *mb_recording = NULL, *mb_track = NULL;
 
        if (vd.mb_recording_id) {
-               mb_recording_id = 
tracker_extract_new_external_reference("https://musicbrainz.org/doc/Recording";,
-                                                                        vd.mb_recording_id);
+               g_autofree char *mb_recording_uri;
 
-               tracker_resource_set_relation (metadata, "tracker:hasExternalReference", mb_recording_id);
+               mb_recording_uri = g_strdup_printf("https://musicbrainz.org/recording/%s";, 
vd.mb_recording_id);
+               mb_recording = tracker_extract_new_external_reference("https://musicbrainz.org/doc/Recording";,
+                                                                     vd.mb_recording_id, mb_recording_uri);
+
+               tracker_resource_set_relation (metadata, "tracker:hasExternalReference", mb_recording);
                g_free (vd.mb_recording_id);
        }
 
        if (vd.mb_track_id) {
-               mb_track_id = tracker_extract_new_external_reference("https://musicbrainz.org/doc/Track";,
-                                                                    vd.mb_track_id);
+               g_autofree char *mb_track_uri;
+
+               mb_track_uri = g_strdup_printf("https://musicbrainz.org/track/%s";, vd.mb_track_id);
+               mb_track = tracker_extract_new_external_reference("https://musicbrainz.org/doc/Track";,
+                                                                 vd.mb_track_id, mb_track_uri);
 
-               if (mb_recording_id) {
-                       tracker_resource_add_relation (metadata, "tracker:hasExternalReference", mb_track_id);
-                       g_object_unref (mb_recording_id);
+               if (mb_recording) {
+                       tracker_resource_add_relation (metadata, "tracker:hasExternalReference", mb_track);
+                       g_object_unref (mb_recording);
                } else {
-                       tracker_resource_set_relation (metadata, "tracker:hasExternalReference", mb_track_id);
+                       tracker_resource_set_relation (metadata, "tracker:hasExternalReference", mb_track);
                }
 
-               g_object_unref (mb_track_id);
+               g_object_unref (mb_track);
                g_free (vd.mb_track_id);
        }
 
diff --git a/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-1.expected.json 
b/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-1.expected.json
index 67fef5149..c81c6e97a 100644
--- a/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-1.expected.json
+++ b/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-1.expected.json
@@ -21,7 +21,7 @@
             "nmm:artistName": "AbBaby",
             "tracker:hasExternalReference": [
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FArtist:234561",
+                    "@id": "https://musicbrainz.org/artist/234561";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Artist";,
                     "tracker:referenceIdentifier": "234561"
@@ -33,13 +33,13 @@
             "nie:title": "SinCos",
             "tracker:hasExternalReference": [
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRelease:345612",
+                    "@id": "https://musicbrainz.org/release/345612";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Release";,
                     "tracker:referenceIdentifier": "345612"
                 },
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRelease_Group:561234",
+                    "@id": "https://musicbrainz.org/release-group/561234";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Release_Group";,
                     "tracker:referenceIdentifier": "561234"
@@ -48,13 +48,13 @@
         },
         "tracker:hasExternalReference": [
             {
-                "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRecording:456123",
+                "@id": "https://musicbrainz.org/recording/456123";,
                 "@type": "tracker:ExternalReference",
                 "tracker:referenceSource": "https://musicbrainz.org/doc/Recording";,
                 "tracker:referenceIdentifier": "456123"
             },
             {
-                "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FTrack:123456",
+                "@id": "https://musicbrainz.org/track/123456";,
                 "@type": "tracker:ExternalReference",
                 "tracker:referenceSource": "https://musicbrainz.org/doc/Track";,
                 "tracker:referenceIdentifier": "123456"
diff --git a/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-2.expected.json 
b/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-2.expected.json
index fc0286257..d716ceb53 100644
--- a/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-2.expected.json
+++ b/tests/functional-tests/test-extraction-data/audio/mp3-id3v2.4-2.expected.json
@@ -19,7 +19,7 @@
             "nmm:artistName": "Anna Abreu",
             "tracker:hasExternalReference": [
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FArtist:234561",
+                    "@id": "https://musicbrainz.org/artist/234561";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Artist";,
                     "tracker:referenceIdentifier": "234561"
@@ -30,13 +30,13 @@
             "@type": "nmm:MusicAlbum",
             "tracker:hasExternalReference": [
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRelease:345612",
+                    "@id": "https://musicbrainz.org/release/345612";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Release";,
                     "tracker:referenceIdentifier": "345612"
                 },
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRelease_Group:561234",
+                    "@id": "https://musicbrainz.org/release-group/561234";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Release_Group";,
                     "tracker:referenceIdentifier": "561234"
@@ -45,13 +45,13 @@
         },
         "tracker:hasExternalReference": [
             {
-                "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRecording:456123",
+                "@id": "https://musicbrainz.org/recording/456123";,
                 "@type": "tracker:ExternalReference",
                 "tracker:referenceSource": "https://musicbrainz.org/doc/Recording";,
                 "tracker:referenceIdentifier": "456123"
             },
             {
-                "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FTrack:123456",
+                "@id": "https://musicbrainz.org/track/123456";,
                 "@type": "tracker:ExternalReference",
                 "tracker:referenceSource": "https://musicbrainz.org/doc/Track";,
                 "tracker:referenceIdentifier": "123456"
diff --git a/tests/functional-tests/test-extraction-data/audio/vorbis.expected.json 
b/tests/functional-tests/test-extraction-data/audio/vorbis.expected.json
index 61fae33ca..3707d5cfb 100644
--- a/tests/functional-tests/test-extraction-data/audio/vorbis.expected.json
+++ b/tests/functional-tests/test-extraction-data/audio/vorbis.expected.json
@@ -16,7 +16,7 @@
             "@type": "nmm:Artist",
             "nmm:artistName": "AbBaby",
             "tracker:hasExternalReference": {
-                "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FArtist:234561",
+                "@id": "https://musicbrainz.org/artist/234561";,
                 "@type": "tracker:ExternalReference",
                 "tracker:referenceSource": "https://musicbrainz.org/doc/Artist";,
                 "tracker:referenceIdentifier": "234561"
@@ -27,13 +27,13 @@
             "nie:title": "SinCos",
             "tracker:hasExternalReference": [
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRelease:345612",
+                    "@id": "https://musicbrainz.org/release/345612";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Release";,
                     "tracker:referenceIdentifier": "345612"
                 },
                 {
-                    "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRelease_Group:561234",
+                    "@id": "https://musicbrainz.org/release-group/561234";,
                     "@type": "tracker:ExternalReference",
                     "tracker:referenceSource": "https://musicbrainz.org/doc/Release_Group";,
                     "tracker:referenceIdentifier": "561234"
@@ -42,13 +42,13 @@
         },
         "tracker:hasExternalReference": [
             {
-                "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FRecording:456123",
+                "@id": "https://musicbrainz.org/recording/456123";,
                 "@type": "tracker:ExternalReference",
                 "tracker:referenceSource": "https://musicbrainz.org/doc/Recording";,
                 "tracker:referenceIdentifier": "456123"
             },
             {
-                "@id": "urn:ExternalReference:https:%2F%2Fmusicbrainz.org%2Fdoc%2FTrack:123456",
+                "@id": "https://musicbrainz.org/track/123456";,
                 "@type": "tracker:ExternalReference",
                 "tracker:referenceSource": "https://musicbrainz.org/doc/Track";,
                 "tracker:referenceIdentifier": "123456"


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]