Skip to content

Commit

Permalink
#238 updated and refactored search&indexing
Browse files Browse the repository at this point in the history
  • Loading branch information
GordeaS authored and GordeaS committed Jul 8, 2020
1 parent 4654a8c commit 5fc9ccf
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,50 @@ public class BaseWebAnnotationProtocolTest {
public static final String TAG_ANNOTATION = "/tag/annotation.json";
public static final String WHITELIST_ENTRY = "/whitelist/entry.json";

public static final String VALUE_TESTSET = "generator_uri: \"http://test.europeana.org/45e86248-1218-41fc-9643-689d30dbe651\"";
public static final String VALUE_ID = "anno_id:";

public static final String VALUE_TARGET_URI = "http://data.europeana.eu/item/09102/_UEDIN_214";
public static final String VALUE_SEARCH_TARGET = "target_uri:\""+ VALUE_TARGET_URI +"\"";

public static final String VALUE_TARGET_TAG_URI = "http://data.europeana.eu/item/000002/_UEDIN_214";
public static final String VALUE_SEARCH_TARGET_TAG = "target_uri:\""+ VALUE_TARGET_TAG_URI +"\"";


public static final String VALUE_TARGET_LINK_URI = "http://data.europeana.eu/item/2020601/https___1914_1918_europeana_eu_contributions_19584";
public static final String VALUE_SEARCH_TARGET_LINK = "target_uri:\""+ VALUE_TARGET_LINK_URI +"\"";

// public static final String VALUE_TARGET_LINK_SEMANTIC_URI = "http://data.europeana.eu/item/2059207/data_sounds_T471_5";
public static final String VALUE_TARGET_LINK_SEMANTIC_URI = "http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6";
public static final String VALUE_SEARCH_TARGET_LINK_SEMANTIC = "target_uri:\""+ VALUE_TARGET_LINK_SEMANTIC_URI +"\"";

public static final String VALUE_DESCRIBING_TARGET_SCOPE_URI = "http://data.europeana.eu/item/07931/diglit_uah_m1";
public static final String VALUE_SEARCH_DESCRIBING_TARGET_SCOPE = "target_uri:\""+ VALUE_TARGET_LINK_SEMANTIC_URI +"\"";

public static final String VALUE_TAG_BODY_URI = "http://www.geonames.org/2988507";
public static final String VALUE_SEARCH_TAG_BODY_URI = "body_uri:\"" +VALUE_TAG_BODY_URI+ "\"";

public static final String VALUE_DESCRIBING_BODY_VALUE = "body_value:\"... this is the textual description of the item ...\"";
public static final String VALUE_SEARCH_DESCRIBING_BODY_VALUE = "body_value:\""+VALUE_DESCRIBING_BODY_VALUE+"\"";

public static final String VALUE_TAG_BODY_VALUE = "trombone";
public static final String VALUE_SEARCH_TAG_BODY_VALUE = "body_value:\""+VALUE_TAG_BODY_VALUE+"\"";

public static final String VALUE_BODY_LINK_RELATION = "isSimilarTo";
public static final String VALUE_SEARCH_BODY_LINK_RELATION = "link_relation:\"" +VALUE_BODY_LINK_RELATION+ "\"";

public static final String VALUE_BODY_LINK_RESOURCE_URI = "https://www.wikidata.org/wiki/Q762";
public static final String VALUE_SEARCH_BODY_LINK_RESOURCE_URI = "link_resource_uri:\""+VALUE_BODY_LINK_RESOURCE_URI+"\"";


public static final String VALUE_BODY_SPECIFIC_RESOURCE = "http://www.geonames.org/2988507"; // source
public static final String VALUE_SEARCH_BODY_SPECIFIC_RESOURCE = "body_uri:\""+VALUE_BODY_SPECIFIC_RESOURCE+"\""; // source

public static final String VALUE_BODY_FULL_TEXT_RESOURCE = "... complete transcribed text in HTML ...";
public static final String VALUE_SEARCH_BODY_FULL_TEXT_RESOURCE = "body_value:\""+VALUE_BODY_FULL_TEXT_RESOURCE+"\"";



String START = "{";
String END = "}";
String TYPE = "\"@context\": \"" + WebAnnotationModelKeywords.WA_CONTEXT + "\","
Expand Down Expand Up @@ -83,10 +127,6 @@ public class BaseWebAnnotationProtocolTest {

public String LINK_JSON = START + LINK_CORE + "\"motivation\": \"oa:linking\"," + END;

public String TEST_USER_TOKEN = "tester1";
public String ADMIN_USER_TOKEN = "admin";
public String ANONYMOUS_USER_TOKEN = "anonymous";

private WebAnnotationProtocolApi apiClient;

@BeforeEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ public class BodyTypesTest extends BaseTaggingTest {
static final String VALUE_ID = "anno_id:";
static final String VALUE_TARGET = "target_uri:\"http://data.europeana.eu/item/09102/_UEDIN_214\"";
static final String VALUE_TARGET_TAG = "target_uri:\"http://data.europeana.eu/item/000002/_UEDIN_214\"";
static final String VALUE_TARGET_LINK = "target_uri:\"http://data.europeana.eu/item/123/xyz\"";
static final String VALUE_TARGET_LINK_SEMANTIC = "target_uri:\"http://data.europeana.eu/item/2059207/data_sounds_T471_5\"";
static final String VALUE_TARGET_LINK = "target_uri:\"http://data.europeana.eu/item/2020601/https___1914_1918_europeana_eu_contributions_19584\"";
static final String VALUE_TARGET_LINK_SEMANTIC = "target_uri:\"http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6\"";
static final String VALUE_DESCRIBING_TARGET_SCOPE = "target_uri:\"http://data.europeana.eu/item/07931/diglit_uah_m1\"";
static final String VALUE_BODY_URI = "body_uri:\"http://www.geonames.org/2988507\"";
static final String VALUE_DESCRIBING_BODY_VALUE = "body_value:\"... this is the textual description of the item ...\"";
static final String VALUE_BODY_VALUE = "body_value:\"trombone\"";
static final String VALUE_BODY_LINK_RELATION = "link_relation:\"isSimilarTo\"";
static final String VALUE_BODY_LINK_RESOURCE_URI = "link_resource_uri:\"http://thesession.org/tunes/52\"";
static final String VALUE_BODY_LINK_RESOURCE_URI = "link_resource_uri:\"https://www.wikidata.org/wiki/Q762\"";
static final String VALUE_BODY_SPECIFIC_RESOURCE = "body_uri:\"http://www.geonames.org/2988507\""; // source
static final String VALUE_BODY_FULL_TEXT_RESOURCE = "body_value:\"... complete transcribed text in HTML ...\"";

Expand Down Expand Up @@ -212,7 +212,7 @@ public void createLink() throws IOException, JsonParseException, IllegalAccessEx
assertTrue(storedAnno.getMotivation().equals(MotivationTypes.LINKING.name().toLowerCase()));
Target target = storedAnno.getTarget();
assertNotNull(target.getValues());
assertTrue(target.getValues().contains("http://data.europeana.eu/item/123/xyz"));
assertTrue(target.getValues().contains("http://data.europeana.eu/item/2020601/https___1914_1918_europeana_eu_contributions_19584"));

// remove tag
deleteAnnotation(storedAnno);
Expand All @@ -234,7 +234,7 @@ public void createSemanticLink() throws IOException, JsonParseException, Illegal
assertTrue(storedAnno.getMotivation().equals(MotivationTypes.LINKING.name().toLowerCase()));
Target target = storedAnno.getTarget();
assertNotNull(target.getHttpUri());
assertTrue(target.getHttpUri().equals("http://data.europeana.eu/item/2059207/data_sounds_T471_5"));
assertTrue(target.getHttpUri().equals("http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6"));

// remove tag
deleteAnnotation(storedAnno);
Expand All @@ -259,12 +259,12 @@ public void createGraph() throws IOException, JsonParseException, IllegalAccessE
assertEquals(storedAnno.getBody().getInternalType(), BodyInternalTypes.GRAPH.name());
Graph graphBody = ((GraphBody) storedAnno.getBody()).getGraph();
assertNotNull(graphBody.getNode());
assertTrue(graphBody.getNode().getHttpUri().equals("http://thesession.org/tunes/52"));
assertTrue(graphBody.getNode().getHttpUri().equals("https://www.wikidata.org/wiki/Q762"));
assertTrue(graphBody.getRelationName().equals("isSimilarTo"));
assertTrue(graphBody.getResourceUri().equals("http://data.europeana.eu/item/2059207/data_sounds_T471_5"));
assertTrue(graphBody.getResourceUri().equals("http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6"));
Target target = storedAnno.getTarget();
assertNotNull(target.getHttpUri());
assertTrue(target.getHttpUri().equals("http://data.europeana.eu/item/2059207/data_sounds_T471_5"));
assertTrue(target.getHttpUri().equals("http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6"));

// remove tag
deleteAnnotation(storedAnno);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public class DereferencedSemanticTaggingTest extends BaseTaggingTest {

protected Logger log = LogManager.getLogger(getClass());

private Annotation[] testAnnotations = new Annotation[NUM_TEST_ANNOTATIONS];;
private Annotation[] testAnnotations = new Annotation[NUM_TEST_ANNOTATIONS];

@BeforeEach
public void createTestAnnotations() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,7 @@
*/
public class SearchTypesTest extends BaseTaggingTest {

static final String VALUE_TESTSET = "generator_uri: \"http://test.europeana.org/45e86248-1218-41fc-9643-689d30dbe651\"";
static final String VALUE_ID = "anno_id:";
static final String VALUE_TARGET = "target_uri:\"http://data.europeana.eu/item/09102/_UEDIN_214\"";
static final String VALUE_TARGET_TAG = "target_uri:\"http://data.europeana.eu/item/000002/_UEDIN_214\"";
static final String VALUE_TARGET_LINK = "target_uri:\"http://data.europeana.eu/item/123/xyz\"";
static final String VALUE_TARGET_LINK_SEMANTIC = "target_uri:\"http://data.europeana.eu/item/2059207/data_sounds_T471_5\"";
static final String VALUE_DESCRIBING_TARGET_SCOPE = "target_uri:\"http://data.europeana.eu/item/07931/diglit_uah_m1\"";
static final String VALUE_BODY_URI = "body_uri:\"http://www.geonames.org/2988507\"";
static final String VALUE_DESCRIBING_BODY_VALUE = "body_value:\"... this is the textual description of the item ...\"";
static final String VALUE_BODY_VALUE = "body_value:\"trombone\"";
static final String VALUE_BODY_LINK_RELATION = "link_relation:\"isSimilarTo\"";
static final String VALUE_BODY_LINK_RESOURCE_URI = "link_resource_uri:\"http://thesession.org/tunes/52\"";
static final String VALUE_BODY_SPECIFIC_RESOURCE = "body_uri:\"http://www.geonames.org/2988507\""; // source
static final String VALUE_BODY_FULL_TEXT_RESOURCE = "body_value:\"... complete transcribed text in HTML ...\"";


static final int TOTAL_BY_ID_FOUND = 1;

protected Logger log = LogManager.getLogger(getClass());
Expand Down Expand Up @@ -86,9 +72,9 @@ public void searchSemanticTag() throws IOException, JsonParseException, IllegalA
// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateSemanticTag(storedAnno);
searchByBodyValue(VALUE_BODY_URI, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TAG_BODY_URI, TOTAL_BY_ID_FOUND);
validateSemanticTag(storedAnno);
searchByBodyValue(VALUE_TARGET, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET, TOTAL_BY_ID_FOUND);
validateSemanticTag(storedAnno);

// remove tag
Expand Down Expand Up @@ -130,7 +116,7 @@ public void searchGeoTag() throws IOException, JsonParseException, IllegalAccess
// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateGeoTag(storedAnno);
searchByBodyValue(VALUE_TARGET, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET, TOTAL_BY_ID_FOUND);
validateGeoTag(storedAnno);

// remove tag
Expand Down Expand Up @@ -172,9 +158,9 @@ public void searchTag() throws IOException, JsonParseException, IllegalAccessExc
// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateTag(storedAnno);
searchByBodyValue(VALUE_BODY_VALUE, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TAG_BODY_VALUE, TOTAL_BY_ID_FOUND);
validateTag(storedAnno);
searchByBodyValue(VALUE_TARGET_TAG, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET_TAG, TOTAL_BY_ID_FOUND);
validateTag(storedAnno);

// remove tag
Expand Down Expand Up @@ -210,9 +196,9 @@ public void searchTagText() throws IOException, JsonParseException, IllegalAcces
// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateTagText(storedAnno);
searchByBodyValue(VALUE_DESCRIBING_BODY_VALUE, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_DESCRIBING_BODY_VALUE, TOTAL_BY_ID_FOUND);
validateTagText(storedAnno);
searchByBodyValue(VALUE_DESCRIBING_TARGET_SCOPE, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_DESCRIBING_TARGET_SCOPE, TOTAL_BY_ID_FOUND);
validateTagText(storedAnno);

// remove tag
Expand Down Expand Up @@ -243,12 +229,12 @@ public void searchLink() throws IOException, JsonParseException, IllegalAccessEx
String requestBody = getJsonStringInput(LINK_STANDARD);

// create indexed tag
Annotation storedAnno = createTag(requestBody);
Annotation storedAnno = createLink(requestBody);

// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateLink(storedAnno);
searchByBodyValue(VALUE_TARGET_LINK, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET_LINK, TOTAL_BY_ID_FOUND);
validateLink(storedAnno);

// remove tag
Expand All @@ -264,7 +250,7 @@ private void validateLink(Annotation storedAnno) {
assertTrue(storedAnno.getMotivation().equals(MotivationTypes.LINKING.name().toLowerCase()));
Target target = storedAnno.getTarget();
assertNotNull(target.getValues());
assertTrue(target.getValues().contains("http://data.europeana.eu/item/123/xyz"));
assertTrue(target.getValues().contains(VALUE_TARGET_LINK_URI));
}

@Test
Expand All @@ -273,12 +259,12 @@ public void searchSemanticLink() throws IOException, JsonParseException, Illegal
String requestBody = getJsonStringInput(LINK_SEMANTIC);

// create indexed tag
Annotation storedAnno = createTag(requestBody);
Annotation storedAnno = createLink(requestBody);

// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateSemanticLink(storedAnno);
searchByBodyValue(VALUE_TARGET_LINK_SEMANTIC, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET_LINK_SEMANTIC, TOTAL_BY_ID_FOUND);
validateSemanticLink(storedAnno);

// remove tag
Expand All @@ -294,7 +280,7 @@ private void validateSemanticLink(Annotation storedAnno) {
assertTrue(storedAnno.getMotivation().equals(MotivationTypes.LINKING.name().toLowerCase()));
Target target = storedAnno.getTarget();
assertNotNull(target.getHttpUri());
assertTrue(target.getHttpUri().equals("http://data.europeana.eu/item/2059207/data_sounds_T471_5"));
assertTrue(target.getHttpUri().equals(VALUE_TARGET_LINK_SEMANTIC_URI));
}

@Test
Expand All @@ -303,16 +289,16 @@ public void searchGraph() throws IOException, JsonParseException, IllegalAccessE
String requestBody = getJsonStringInput(LINK_SEMANTIC);

// create indexed tag
Annotation storedAnno = createTag(requestBody);
Annotation storedAnno = createLink(requestBody);

// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateGraph(storedAnno);
searchByBodyValue(VALUE_BODY_LINK_RESOURCE_URI, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_BODY_LINK_RESOURCE_URI, TOTAL_BY_ID_FOUND);
validateGraph(storedAnno);
searchByBodyValue(VALUE_BODY_LINK_RELATION, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_BODY_LINK_RELATION, TOTAL_BY_ID_FOUND);
validateGraph(storedAnno);
searchByBodyValue(VALUE_TARGET_LINK_SEMANTIC, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET_LINK_SEMANTIC, TOTAL_BY_ID_FOUND);
validateGraph(storedAnno);

// remove tag
Expand All @@ -325,16 +311,16 @@ public void searchGraph() throws IOException, JsonParseException, IllegalAccessE
* @param storedAnno
*/
private void validateGraph(Annotation storedAnno) {
assertTrue(storedAnno.getMotivation().equals(MotivationTypes.LINKING.name().toLowerCase()));
assertEquals(storedAnno.getBody().getInternalType(), BodyInternalTypes.GRAPH.name());
assertEquals(MotivationTypes.LINKING.name().toLowerCase(), storedAnno.getMotivation());
assertEquals(BodyInternalTypes.GRAPH.name(), storedAnno.getBody().getInternalType());
Graph graphBody = ((GraphBody) storedAnno.getBody()).getGraph();
assertNotNull(graphBody.getNode());
assertTrue(graphBody.getNode().getHttpUri().equals("http://thesession.org/tunes/52"));
assertTrue(graphBody.getRelationName().equals("isSimilarTo"));
assertTrue(graphBody.getResourceUri().equals("http://data.europeana.eu/item/2059207/data_sounds_T471_5"));
assertEquals(VALUE_BODY_LINK_RESOURCE_URI, graphBody.getNode().getHttpUri());
assertEquals(VALUE_BODY_LINK_RELATION, graphBody.getRelationName());
assertEquals(VALUE_TARGET_LINK_SEMANTIC_URI, graphBody.getResourceUri());
Target target = storedAnno.getTarget();
assertNotNull(target.getHttpUri());
assertTrue(target.getHttpUri().equals("http://data.europeana.eu/item/2059207/data_sounds_T471_5"));
assertEquals(VALUE_TARGET_LINK_SEMANTIC_URI, target.getHttpUri());
}

@Test
Expand All @@ -354,9 +340,9 @@ public void searchSemanticTagSpecific() throws IOException, JsonParseException,
// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateSemanticTagSpecific(storedAnno);
searchByBodyValue(VALUE_BODY_SPECIFIC_RESOURCE, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_BODY_SPECIFIC_RESOURCE, TOTAL_BY_ID_FOUND);
validateSemanticTagSpecific(storedAnno);
searchByBodyValue(VALUE_TARGET, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET, TOTAL_BY_ID_FOUND);
validateSemanticTagSpecific(storedAnno);

// remove tag
Expand Down Expand Up @@ -398,9 +384,9 @@ public void searchFullTextResourceTag() throws IOException, JsonParseException,
// search for indexed id and textual values
searchByBodyValue(VALUE_ID+"\""+storedAnno.getAnnotationId().getIdentifier()+"\"", TOTAL_BY_ID_FOUND);
validateFullTextResourceTag(storedAnno);
searchByBodyValue(VALUE_BODY_FULL_TEXT_RESOURCE, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_BODY_FULL_TEXT_RESOURCE, TOTAL_BY_ID_FOUND);
validateFullTextResourceTag(storedAnno);
searchByBodyValue(VALUE_TARGET, TOTAL_BY_ID_FOUND);
searchByBodyValue(VALUE_SEARCH_TARGET, TOTAL_BY_ID_FOUND);
validateFullTextResourceTag(storedAnno);

// remove tag
Expand Down
8 changes: 4 additions & 4 deletions annotation-client/src/test/resources/link/edmIsSimilarTo.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
"body": {
"@graph": {
"@context": "http://www.europeana.eu/schemas/context/edm.jsonld",
"id": "http://data.europeana.eu/item/2059207/data_sounds_T471_5",
"id": "http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6",
"isSimilarTo": {
"id": "http://thesession.org/tunes/52",
"id": "https://www.wikidata.org/wiki/Q762",
"format": "text/html",
"title": "The Kid On The Mountain (slip jig) on The Session"
"title": "Leonardo da Vinci"
}
}
},
"target": "http://data.europeana.eu/item/2059207/data_sounds_T471_5"
"target": "http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6"
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
"body": {
"@graph": {
"@context": "http://www.europeana.eu/schemas/context/edm.jsonld",
"id": "http://data.europeana.eu/item/2059207/data_sounds_T471_5",
"isSimilarTo": "http://thesession.org/tunes/52"
"id": "http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6",
"isSimilarTo": "https://www.wikidata.org/wiki/Q762"
}
},
"target": "http://data.europeana.eu/item/2059207/data_sounds_T471_5"
"target": "http://data.europeana.eu/item/2048410/item_I5DUPVW2Q5HT2OQFSVXV7VYODA5P32P6"
}
15 changes: 5 additions & 10 deletions annotation-client/src/test/resources/link/standard.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,12 @@
"@context": "http://www.europeana.eu/annotation/context.jsonld",
"type": "Annotation",
"motivation": "linking",
"creator": {
"id": "https://www.historypin.org/en/person/55376/",
"type": "Person",
"name": "John Smith"
},
"created": "2015-02-27T12:00:43Z",
"generated": "2015-02-28T13:00:34Z",
"generator": "http://www.historypin.org",
"generator": "http://europeana.transcribathon.eu",
"target": [
"http://data.europeana.eu/item/123/xyz",
"http://data.europeana.eu/item/333/xxx"
"http://data.europeana.eu/item/2020601/https___1914_1918_europeana_eu_contributions_19584",
"http://data.europeana.eu/item/2020601/https___1914_1918_europeana_eu_contributions_6191",
"http://data.europeana.eu/item/2020601/https___1914_1918_europeana_eu_contributions_19586"
],
"oa:equivalentTo": "https://www.historypin.org/en/item/789"
"oa:equivalentTo": "https://europeana.transcribathon.eu/documents/story/?story=106191"
}

0 comments on commit 5fc9ccf

Please sign in to comment.