Graph model footprint optimisation #23
|
@ -9,18 +9,21 @@ import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Relation models any edge between two nodes in the OpenAIRE graph. It has a source id and a target id pointing to
|
* Relation models any edge between two nodes in the OpenAIRE graph. It has a source id and a target id pointing to
|
||||||
* graph node identifiers and it is further characterised by the semantic of the link through the fields relType,
|
* graph node identifiers, and it is further characterised by the semantic of the link through the fields relType,
|
||||||
* subRelType and relClass. Provenance information is modeled according to the dataInfo element and collectedFrom, while
|
* subRelType and relClass. Provenance information is modeled according to the dataInfo element and collectedFrom, while
|
||||||
* individual relationship types can provide extra information via the properties field.
|
* individual relationship types can provide extra information via the properties field.
|
||||||
*/
|
*/
|
||||||
public class Relation extends Oaf implements Serializable {
|
public class Relation extends Oaf implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
public enum RELTYPE {
|
public enum RELTYPE {
|
||||||
resultResult,
|
resultResult,
|
||||||
resultProject,
|
resultProject,
|
||||||
resultOrganization,
|
resultOrganization,
|
||||||
projectOrganization,
|
projectOrganization,
|
||||||
datasourceOrganization
|
datasourceOrganization
|
||||||
|
|
||||||
|
//TODO organizationOrganization ????
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SUBRELTYPE {
|
public enum SUBRELTYPE {
|
||||||
|
@ -36,8 +39,7 @@ public class Relation extends Oaf implements Serializable {
|
||||||
similarity,
|
similarity,
|
||||||
supplement,
|
supplement,
|
||||||
version;
|
version;
|
||||||
|
public static boolean exists(String subreltype) {
|
||||||
public boolean exists(String subreltype) {
|
|
||||||
try {
|
try {
|
||||||
SUBRELTYPE.valueOf(subreltype);
|
SUBRELTYPE.valueOf(subreltype);
|
||||||
return true;
|
return true;
|
||||||
|
@ -83,6 +85,7 @@ public class Relation extends Oaf implements Serializable {
|
||||||
IsVariantFormOf,
|
IsVariantFormOf,
|
||||||
isProducedBy,
|
isProducedBy,
|
||||||
IsMetadataFor,
|
IsMetadataFor,
|
||||||
|
HasAssociationWith,
|
||||||
Cites,
|
Cites,
|
||||||
IsRequiredBy,
|
IsRequiredBy,
|
||||||
IsOriginalFormOf,
|
IsOriginalFormOf,
|
||||||
|
@ -95,6 +98,7 @@ public class Relation extends Oaf implements Serializable {
|
||||||
IsDerivedFrom,
|
IsDerivedFrom,
|
||||||
Obsoletes,
|
Obsoletes,
|
||||||
Reviews,
|
Reviews,
|
||||||
|
isSimilarTo,
|
||||||
produces;
|
produces;
|
||||||
|
|
||||||
public static boolean exists(String relclass) {
|
public static boolean exists(String relclass) {
|
||||||
|
@ -105,6 +109,75 @@ public class Relation extends Oaf implements Serializable {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@Transient
|
||||||
|
public SUBRELTYPE getSubRel() {
|
||||||
|
switch (this) {
|
||||||
|
case isParticipant:
|
||||||
|
case hasParticipant:
|
||||||
|
return SUBRELTYPE.participation;
|
||||||
|
case isAuthorInstitutionOf:
|
||||||
|
case hasAuthorInstitution:
|
||||||
|
return SUBRELTYPE.affiliation;
|
||||||
|
case isMergedIn:
|
||||||
|
case merges:
|
||||||
|
case isSimilarTo:
|
||||||
|
return SUBRELTYPE.dedup;
|
||||||
|
case isProducedBy:
|
||||||
|
case produces:
|
||||||
|
return SUBRELTYPE.outcome;
|
||||||
|
case isProvidedBy:
|
||||||
|
case provides:
|
||||||
|
return SUBRELTYPE.provision;
|
||||||
|
case IsAmongTopNSimilarDocuments:
|
||||||
|
case HasAmongTopNSimilarDocuments:
|
||||||
|
return SUBRELTYPE.similarity;
|
||||||
|
case IsSupplementedBy:
|
||||||
|
case IsSupplementTo:
|
||||||
|
return SUBRELTYPE.supplement;
|
||||||
|
case IsPartOf:
|
||||||
|
case HasPart:
|
||||||
|
return SUBRELTYPE.part;
|
||||||
|
case IsCitedBy:
|
||||||
|
case Cites:
|
||||||
|
return SUBRELTYPE.citation;
|
||||||
|
case IsIdenticalTo:
|
||||||
|
case IsReferencedBy:
|
||||||
|
case References:
|
||||||
|
case IsContinuedBy:
|
||||||
|
case Continues:
|
||||||
|
case IsDocumentedBy:
|
||||||
|
case Documents:
|
||||||
|
case IsDerivedFrom:
|
||||||
|
case IsSourceOf:
|
||||||
|
case IsRelatedTo:
|
||||||
|
case IsCompiledBy:
|
||||||
|
case Compiles:
|
||||||
|
case IsDescribedBy:
|
||||||
|
case Describes:
|
||||||
|
case IsMetadataFor:
|
||||||
|
case IsMetadataOf:
|
||||||
|
case HasAssociationWith:
|
||||||
|
case IsRequiredBy:
|
||||||
|
case Requires:
|
||||||
|
case IsChildOf:
|
||||||
|
case IsParentOf:
|
||||||
|
return SUBRELTYPE.relationship;
|
||||||
|
case IsPreviousVersionOf:
|
||||||
|
case IsNewVersionOf:
|
||||||
|
case IsVariantFormOf:
|
||||||
|
case IsOriginalFormOf:
|
||||||
|
case IsObsoletedBy:
|
||||||
|
case Obsoletes:
|
||||||
|
case IsVersionOf:
|
||||||
|
case HasVersion:
|
||||||
|
return SUBRELTYPE.version;
|
||||||
|
case IsReviewedBy:
|
||||||
|
case Reviews:
|
||||||
|
return SUBRELTYPE.review;
|
||||||
|
}
|
||||||
|
// makes the compiler happy
|
||||||
|
throw new IllegalArgumentException("missing SubRel mapping for" + this);
|
||||||
|
}
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
public RELCLASS getInverse() {
|
public RELCLASS getInverse() {
|
||||||
|
@ -341,6 +414,20 @@ public class Relation extends Oaf implements Serializable {
|
||||||
&& target.equals(relation.target);
|
&& target.equals(relation.target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Relation inverse() {
|
||||||
|
final Relation inverse = new Relation();
|
||||||
|
inverse.setSource(this.target);
|
||||||
|
inverse.setTarget(this.source);
|
||||||
|
inverse.setRelClass(this.relClass.getInverse());
|
||||||
|
inverse.setRelType(this.relType);
|
||||||
|
inverse.setSubRelType(this.subRelType);
|
||||||
|
inverse.setProperties(this.properties);
|
||||||
|
inverse.setValidated(validated);
|
||||||
|
inverse.setProvenance(provenance);
|
||||||
|
inverse.setValidationDate(validationDate);
|
||||||
|
return inverse;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(relType, subRelType, relClass, source, target, provenance);
|
return Objects.hash(relType, subRelType, relClass, source, target, provenance);
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package eu.dnetlib.dhp.schema.oaf;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class RelationTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void checkExistRelType() {
|
||||||
|
assertTrue(Relation.SUBRELTYPE.exists(Relation.SUBRELTYPE.dedup.toString()));
|
||||||
|
assertFalse(Relation.SUBRELTYPE.exists("foo"));
|
||||||
|
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void checSubRelType() {
|
||||||
|
Relation.RELCLASS rc = Relation.RELCLASS.merges;
|
||||||
|
assertEquals(Relation.SUBRELTYPE.dedup, rc.getSubRel());
|
||||||
|
|
||||||
|
for (Relation.RELCLASS value : Relation.RELCLASS.values()) {
|
||||||
|
System.out.printf("%s => %s\n", value, value.getSubRel());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue