mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-10 11:33:04 +00:00
added support for embedded resources
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import "reflect-metadata";
|
import "reflect-metadata";
|
||||||
import { GenericConstructor } from "../../shared/generic-constructor";
|
import { GenericConstructor } from "../../shared/generic-constructor";
|
||||||
import { CacheableObject } from "../object-cache.reducer";
|
import { CacheableObject } from "../object-cache.reducer";
|
||||||
import { NormalizedDSOType } from "../models/normalized-dspace-object-type";
|
import { ResourceType } from "../../shared/resource-type";
|
||||||
|
|
||||||
const mapsToMetadataKey = Symbol("mapsTo");
|
const mapsToMetadataKey = Symbol("mapsTo");
|
||||||
const relationshipKey = Symbol("relationship");
|
const relationshipKey = Symbol("relationship");
|
||||||
@@ -16,7 +16,7 @@ export const getMapsTo = function(target: any) {
|
|||||||
return Reflect.getOwnMetadata(mapsToMetadataKey, target);
|
return Reflect.getOwnMetadata(mapsToMetadataKey, target);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const relationship = function(value: NormalizedDSOType): any {
|
export const relationship = function(value: ResourceType): any {
|
||||||
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
||||||
if (!target || !propertyKey) {
|
if (!target || !propertyKey) {
|
||||||
return;
|
return;
|
||||||
|
@@ -13,7 +13,8 @@ import { Observable } from "rxjs/Observable";
|
|||||||
import { RemoteData } from "../../data/remote-data";
|
import { RemoteData } from "../../data/remote-data";
|
||||||
import { GenericConstructor } from "../../shared/generic-constructor";
|
import { GenericConstructor } from "../../shared/generic-constructor";
|
||||||
import { getMapsTo, getResourceType, getRelationships } from "./build-decorators";
|
import { getMapsTo, getResourceType, getRelationships } from "./build-decorators";
|
||||||
import { NormalizedDSOFactory } from "../models/normalized-dspace-object-factory";
|
import { NormalizedObjectFactory } from "../models/normalized-object-factory";
|
||||||
|
import { Request } from "../../data/request.models";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RemoteDataBuildService {
|
export class RemoteDataBuildService {
|
||||||
@@ -124,13 +125,13 @@ export class RemoteDataBuildService {
|
|||||||
relationships.forEach((relationship: string) => {
|
relationships.forEach((relationship: string) => {
|
||||||
if (hasValue(normalized[relationship])) {
|
if (hasValue(normalized[relationship])) {
|
||||||
const resourceType = getResourceType(normalized, relationship);
|
const resourceType = getResourceType(normalized, relationship);
|
||||||
const resourceConstructor = NormalizedDSOFactory.getConstructor(resourceType);
|
const resourceConstructor = NormalizedObjectFactory.getConstructor(resourceType);
|
||||||
if (Array.isArray(normalized[relationship])) {
|
if (Array.isArray(normalized[relationship])) {
|
||||||
// without the setTimeout, the actions inside requestService.configure
|
// without the setTimeout, the actions inside requestService.configure
|
||||||
// are dispatched, but sometimes don't arrive. I'm unsure why atm.
|
// are dispatched, but sometimes don't arrive. I'm unsure why atm.
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
normalized[relationship].forEach((href: string) => {
|
normalized[relationship].forEach((href: string) => {
|
||||||
this.requestService.configure(href, resourceConstructor)
|
this.requestService.configure(new Request(href))
|
||||||
});
|
});
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
@@ -142,7 +143,7 @@ export class RemoteDataBuildService {
|
|||||||
// without the setTimeout, the actions inside requestService.configure
|
// without the setTimeout, the actions inside requestService.configure
|
||||||
// are dispatched, but sometimes don't arrive. I'm unsure why atm.
|
// are dispatched, but sometimes don't arrive. I'm unsure why atm.
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.requestService.configure(normalized[relationship], resourceConstructor);
|
this.requestService.configure(new Request(normalized[relationship]));
|
||||||
},0);
|
},0);
|
||||||
|
|
||||||
links[relationship] = this.buildSingle(normalized[relationship], resourceConstructor);
|
links[relationship] = this.buildSingle(normalized[relationship], resourceConstructor);
|
||||||
|
@@ -2,7 +2,7 @@ import { autoserialize, inheritSerialization } from "cerialize";
|
|||||||
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
||||||
import { Bundle } from "../../shared/bundle.model";
|
import { Bundle } from "../../shared/bundle.model";
|
||||||
import { mapsTo, relationship } from "../builders/build-decorators";
|
import { mapsTo, relationship } from "../builders/build-decorators";
|
||||||
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
import { ResourceType } from "../../shared/resource-type";
|
||||||
|
|
||||||
@mapsTo(Bundle)
|
@mapsTo(Bundle)
|
||||||
@inheritSerialization(NormalizedDSpaceObject)
|
@inheritSerialization(NormalizedDSpaceObject)
|
||||||
@@ -11,7 +11,7 @@ export class NormalizedBundle extends NormalizedDSpaceObject {
|
|||||||
* The primary bitstream of this Bundle
|
* The primary bitstream of this Bundle
|
||||||
*/
|
*/
|
||||||
@autoserialize
|
@autoserialize
|
||||||
@relationship(NormalizedDSOType.NormalizedBitstream)
|
@relationship(ResourceType.Bitstream)
|
||||||
primaryBitstream: string;
|
primaryBitstream: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,6 +25,6 @@ export class NormalizedBundle extends NormalizedDSpaceObject {
|
|||||||
owner: string;
|
owner: string;
|
||||||
|
|
||||||
@autoserialize
|
@autoserialize
|
||||||
@relationship(NormalizedDSOType.NormalizedBitstream)
|
@relationship(ResourceType.Bitstream)
|
||||||
bitstreams: Array<string>;
|
bitstreams: Array<string>;
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@ import { autoserialize, inheritSerialization, autoserializeAs } from "cerialize"
|
|||||||
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
||||||
import { Collection } from "../../shared/collection.model";
|
import { Collection } from "../../shared/collection.model";
|
||||||
import { mapsTo, relationship } from "../builders/build-decorators";
|
import { mapsTo, relationship } from "../builders/build-decorators";
|
||||||
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
import { ResourceType } from "../../shared/resource-type";
|
||||||
|
|
||||||
@mapsTo(Collection)
|
@mapsTo(Collection)
|
||||||
@inheritSerialization(NormalizedDSpaceObject)
|
@inheritSerialization(NormalizedDSpaceObject)
|
||||||
@@ -30,7 +30,7 @@ export class NormalizedCollection extends NormalizedDSpaceObject {
|
|||||||
owner: string;
|
owner: string;
|
||||||
|
|
||||||
@autoserialize
|
@autoserialize
|
||||||
@relationship(NormalizedDSOType.NormalizedItem)
|
@relationship(ResourceType.Item)
|
||||||
items: Array<string>;
|
items: Array<string>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@ import { autoserialize, inheritSerialization, autoserializeAs } from "cerialize"
|
|||||||
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
||||||
import { Community } from "../../shared/community.model";
|
import { Community } from "../../shared/community.model";
|
||||||
import { mapsTo, relationship } from "../builders/build-decorators";
|
import { mapsTo, relationship } from "../builders/build-decorators";
|
||||||
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
import { ResourceType } from "../../shared/resource-type";
|
||||||
|
|
||||||
@mapsTo(Community)
|
@mapsTo(Community)
|
||||||
@inheritSerialization(NormalizedDSpaceObject)
|
@inheritSerialization(NormalizedDSpaceObject)
|
||||||
@@ -30,7 +30,7 @@ export class NormalizedCommunity extends NormalizedDSpaceObject {
|
|||||||
owner: string;
|
owner: string;
|
||||||
|
|
||||||
@autoserialize
|
@autoserialize
|
||||||
@relationship(NormalizedDSOType.NormalizedCollection)
|
@relationship(ResourceType.Collection)
|
||||||
collections: Array<string>;
|
collections: Array<string>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +0,0 @@
|
|||||||
export enum NormalizedDSOType {
|
|
||||||
NormalizedBitstream,
|
|
||||||
NormalizedBundle,
|
|
||||||
NormalizedItem,
|
|
||||||
NormalizedCollection,
|
|
||||||
NormalizedCommunity
|
|
||||||
}
|
|
@@ -1,6 +1,7 @@
|
|||||||
import { autoserialize, autoserializeAs } from "cerialize";
|
import { autoserialize, autoserializeAs } from "cerialize";
|
||||||
import { CacheableObject } from "../object-cache.reducer";
|
import { CacheableObject } from "../object-cache.reducer";
|
||||||
import { Metadatum } from "../../shared/metadatum.model";
|
import { Metadatum } from "../../shared/metadatum.model";
|
||||||
|
import { ResourceType } from "../../shared/resource-type";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An abstract model class for a DSpaceObject.
|
* An abstract model class for a DSpaceObject.
|
||||||
@@ -26,7 +27,7 @@ export abstract class NormalizedDSpaceObject implements CacheableObject {
|
|||||||
* A string representing the kind of DSpaceObject, e.g. community, item, …
|
* A string representing the kind of DSpaceObject, e.g. community, item, …
|
||||||
*/
|
*/
|
||||||
@autoserialize
|
@autoserialize
|
||||||
type: string;
|
type: ResourceType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name for this DSpaceObject
|
* The name for this DSpaceObject
|
||||||
@@ -49,5 +50,6 @@ export abstract class NormalizedDSpaceObject implements CacheableObject {
|
|||||||
/**
|
/**
|
||||||
* The DSpaceObject that owns this DSpaceObject
|
* The DSpaceObject that owns this DSpaceObject
|
||||||
*/
|
*/
|
||||||
|
@autoserialize
|
||||||
owner: string;
|
owner: string;
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@ import { inheritSerialization, autoserialize } from "cerialize";
|
|||||||
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
||||||
import { Item } from "../../shared/item.model";
|
import { Item } from "../../shared/item.model";
|
||||||
import { mapsTo, relationship } from "../builders/build-decorators";
|
import { mapsTo, relationship } from "../builders/build-decorators";
|
||||||
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
import { ResourceType } from "../../shared/resource-type";
|
||||||
|
|
||||||
@mapsTo(Item)
|
@mapsTo(Item)
|
||||||
@inheritSerialization(NormalizedDSpaceObject)
|
@inheritSerialization(NormalizedDSpaceObject)
|
||||||
@@ -33,7 +33,7 @@ export class NormalizedItem extends NormalizedDSpaceObject {
|
|||||||
* An array of Collections that are direct parents of this Item
|
* An array of Collections that are direct parents of this Item
|
||||||
*/
|
*/
|
||||||
@autoserialize
|
@autoserialize
|
||||||
@relationship(NormalizedDSOType.NormalizedCollection)
|
@relationship(ResourceType.Collection)
|
||||||
parents: Array<string>;
|
parents: Array<string>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,6 +42,6 @@ export class NormalizedItem extends NormalizedDSpaceObject {
|
|||||||
owner: string;
|
owner: string;
|
||||||
|
|
||||||
@autoserialize
|
@autoserialize
|
||||||
@relationship(NormalizedDSOType.NormalizedBundle)
|
@relationship(ResourceType.Bundle)
|
||||||
bundles: Array<string>;
|
bundles: Array<string>;
|
||||||
}
|
}
|
||||||
|
@@ -4,25 +4,25 @@ import { NormalizedBundle } from "./normalized-bundle.model";
|
|||||||
import { NormalizedItem } from "./normalized-item.model";
|
import { NormalizedItem } from "./normalized-item.model";
|
||||||
import { NormalizedCollection } from "./normalized-collection.model";
|
import { NormalizedCollection } from "./normalized-collection.model";
|
||||||
import { GenericConstructor } from "../../shared/generic-constructor";
|
import { GenericConstructor } from "../../shared/generic-constructor";
|
||||||
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
|
||||||
import { NormalizedCommunity } from "./normalized-community.model";
|
import { NormalizedCommunity } from "./normalized-community.model";
|
||||||
|
import { ResourceType } from "../../shared/resource-type";
|
||||||
|
|
||||||
export class NormalizedDSOFactory {
|
export class NormalizedObjectFactory {
|
||||||
public static getConstructor(type: NormalizedDSOType): GenericConstructor<NormalizedDSpaceObject> {
|
public static getConstructor(type: ResourceType): GenericConstructor<NormalizedDSpaceObject> {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case NormalizedDSOType.NormalizedBitstream: {
|
case ResourceType.Bitstream: {
|
||||||
return NormalizedBitstream
|
return NormalizedBitstream
|
||||||
}
|
}
|
||||||
case NormalizedDSOType.NormalizedBundle: {
|
case ResourceType.Bundle: {
|
||||||
return NormalizedBundle
|
return NormalizedBundle
|
||||||
}
|
}
|
||||||
case NormalizedDSOType.NormalizedItem: {
|
case ResourceType.Item: {
|
||||||
return NormalizedItem
|
return NormalizedItem
|
||||||
}
|
}
|
||||||
case NormalizedDSOType.NormalizedCollection: {
|
case ResourceType.Collection: {
|
||||||
return NormalizedCollection
|
return NormalizedCollection
|
||||||
}
|
}
|
||||||
case NormalizedDSOType.NormalizedCommunity: {
|
case ResourceType.Community: {
|
||||||
return NormalizedCommunity
|
return NormalizedCommunity
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
6
src/app/core/cache/response-cache.models.ts
vendored
6
src/app/core/cache/response-cache.models.ts
vendored
@@ -9,8 +9,12 @@ export class SuccessResponse extends Response {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ErrorResponse extends Response {
|
export class ErrorResponse extends Response {
|
||||||
constructor(public errorMessage: string) {
|
errorMessage: string;
|
||||||
|
|
||||||
|
constructor(error: Error) {
|
||||||
super(false);
|
super(false);
|
||||||
|
console.error(error);
|
||||||
|
this.errorMessage = error.message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,11 +33,8 @@ export abstract class DataService<TNormalized extends CacheableObject, TDomain>
|
|||||||
|
|
||||||
findAll(scopeID?: string): RemoteData<Array<TDomain>> {
|
findAll(scopeID?: string): RemoteData<Array<TDomain>> {
|
||||||
const href = this.getFindAllHref(scopeID);
|
const href = this.getFindAllHref(scopeID);
|
||||||
if (!this.responseCache.has(href) && !this.requestService.isPending(href)) {
|
const request = new FindAllRequest(href, scopeID);
|
||||||
const request = new FindAllRequest(href, this.normalizedResourceType, scopeID);
|
this.requestService.configure(request);
|
||||||
this.store.dispatch(new RequestConfigureAction(request));
|
|
||||||
this.store.dispatch(new RequestExecuteAction(href));
|
|
||||||
}
|
|
||||||
return this.rdbService.buildList<TNormalized, TDomain>(href, this.normalizedResourceType);
|
return this.rdbService.buildList<TNormalized, TDomain>(href, this.normalizedResourceType);
|
||||||
// return this.rdbService.buildList(href);
|
// return this.rdbService.buildList(href);
|
||||||
}
|
}
|
||||||
@@ -48,21 +45,14 @@ export abstract class DataService<TNormalized extends CacheableObject, TDomain>
|
|||||||
|
|
||||||
findById(id: string): RemoteData<TDomain> {
|
findById(id: string): RemoteData<TDomain> {
|
||||||
const href = this.getFindByIDHref(id);
|
const href = this.getFindByIDHref(id);
|
||||||
if (!this.objectCache.hasBySelfLink(href) && !this.requestService.isPending(href)) {
|
const request = new FindByIDRequest(href, id);
|
||||||
const request = new FindByIDRequest(href, this.normalizedResourceType, id);
|
this.requestService.configure(request);
|
||||||
this.store.dispatch(new RequestConfigureAction(request));
|
|
||||||
this.store.dispatch(new RequestExecuteAction(href));
|
|
||||||
}
|
|
||||||
return this.rdbService.buildSingle<TNormalized, TDomain>(href, this.normalizedResourceType);
|
return this.rdbService.buildSingle<TNormalized, TDomain>(href, this.normalizedResourceType);
|
||||||
// return this.rdbService.buildSingle(href);
|
// return this.rdbService.buildSingle(href);
|
||||||
}
|
}
|
||||||
|
|
||||||
findByHref(href: string): RemoteData<TDomain> {
|
findByHref(href: string): RemoteData<TDomain> {
|
||||||
if (!this.objectCache.hasBySelfLink(href) && !this.requestService.isPending(href)) {
|
this.requestService.configure(new Request(href));
|
||||||
const request = new Request(href, this.normalizedResourceType);
|
|
||||||
this.store.dispatch(new RequestConfigureAction(request));
|
|
||||||
this.store.dispatch(new RequestExecuteAction(href));
|
|
||||||
}
|
|
||||||
return this.rdbService.buildSingle<TNormalized, TDomain>(href, this.normalizedResourceType);
|
return this.rdbService.buildSingle<TNormalized, TDomain>(href, this.normalizedResourceType);
|
||||||
// return this.rdbService.buildSingle(href));
|
// return this.rdbService.buildSingle(href));
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@ import { DSpaceRESTv2Serializer } from "../dspace-rest-v2/dspace-rest-v2.seriali
|
|||||||
import { CacheableObject } from "../cache/object-cache.reducer";
|
import { CacheableObject } from "../cache/object-cache.reducer";
|
||||||
import { Observable } from "rxjs";
|
import { Observable } from "rxjs";
|
||||||
import { Response, SuccessResponse, ErrorResponse } from "../cache/response-cache.models";
|
import { Response, SuccessResponse, ErrorResponse } from "../cache/response-cache.models";
|
||||||
import { hasNoValue } from "../../shared/empty.util";
|
import { hasNoValue, hasValue, isEmpty, isNotEmpty } from "../../shared/empty.util";
|
||||||
import { GlobalConfig, GLOBAL_CONFIG } from "../../../config";
|
import { GlobalConfig, GLOBAL_CONFIG } from "../../../config";
|
||||||
import { RequestState, RequestEntry } from "./request.reducer";
|
import { RequestState, RequestEntry } from "./request.reducer";
|
||||||
import {
|
import {
|
||||||
@@ -17,6 +17,12 @@ import {
|
|||||||
} from "./request.actions";
|
} from "./request.actions";
|
||||||
import { ResponseCacheService } from "../cache/response-cache.service";
|
import { ResponseCacheService } from "../cache/response-cache.service";
|
||||||
import { RequestService } from "./request.service";
|
import { RequestService } from "./request.service";
|
||||||
|
import { NormalizedObjectFactory } from "../cache/models/normalized-object-factory";
|
||||||
|
import { ResourceType } from "../shared/resource-type";
|
||||||
|
|
||||||
|
function isObjectLevel(halObj: any) {
|
||||||
|
return isNotEmpty(halObj._links) && hasValue(halObj._links.self);
|
||||||
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RequestEffects {
|
export class RequestEffects {
|
||||||
@@ -38,30 +44,87 @@ export class RequestEffects {
|
|||||||
.take(1);
|
.take(1);
|
||||||
})
|
})
|
||||||
.flatMap((entry: RequestEntry) => {
|
.flatMap((entry: RequestEntry) => {
|
||||||
const [ifArray, ifNotArray] = this.restApi.get(entry.request.href)
|
return this.restApi.get(entry.request.href)
|
||||||
.share() // share ensures restApi.get() doesn't get called twice when the partitions are used below
|
.map((data: DSpaceRESTV2Response) => this.processEmbedded(data._embedded))
|
||||||
.partition((data: DSpaceRESTV2Response) => Array.isArray(data._embedded));
|
.map((ids: Array<string>) => new SuccessResponse(ids))
|
||||||
|
|
||||||
return Observable.merge(
|
|
||||||
|
|
||||||
ifArray.map((data: DSpaceRESTV2Response) => {
|
|
||||||
return new DSpaceRESTv2Serializer(entry.request.resourceType).deserializeArray(data);
|
|
||||||
}).do((cos: CacheableObject[]) => cos.forEach((t) => this.addToObjectCache(t)))
|
|
||||||
.map((cos: Array<CacheableObject>): Array<string> => cos.map(t => t.uuid)),
|
|
||||||
|
|
||||||
ifNotArray.map((data: DSpaceRESTV2Response) => {
|
|
||||||
return new DSpaceRESTv2Serializer(entry.request.resourceType).deserialize(data);
|
|
||||||
}).do((co: CacheableObject) => this.addToObjectCache(co))
|
|
||||||
.map((co: CacheableObject): Array<string> => [co.uuid])
|
|
||||||
|
|
||||||
).map((ids: Array<string>) => new SuccessResponse(ids))
|
|
||||||
.do((response: Response) => this.responseCache.add(entry.request.href, response, this.EnvConfig.cache.msToLive))
|
.do((response: Response) => this.responseCache.add(entry.request.href, response, this.EnvConfig.cache.msToLive))
|
||||||
.map((response: Response) => new RequestCompleteAction(entry.request.href))
|
.map((response: Response) => new RequestCompleteAction(entry.request.href))
|
||||||
.catch((error: Error) => Observable.of(new ErrorResponse(error.message))
|
.catch((error: Error) => Observable.of(new ErrorResponse(error))
|
||||||
.do((response: Response) => this.responseCache.add(entry.request.href, response, this.EnvConfig.cache.msToLive))
|
.do((response: Response) => this.responseCache.add(entry.request.href, response, this.EnvConfig.cache.msToLive))
|
||||||
.map((response: Response) => new RequestCompleteAction(entry.request.href)));
|
.map((response: Response) => new RequestCompleteAction(entry.request.href)));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
protected processEmbedded(_embedded: any): Array<string> {
|
||||||
|
|
||||||
|
if (isNotEmpty(_embedded)) {
|
||||||
|
if (isObjectLevel(_embedded)) {
|
||||||
|
return this.deserializeAndCache(_embedded);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let uuids = [];
|
||||||
|
Object.keys(_embedded)
|
||||||
|
.filter(property => _embedded.hasOwnProperty(property))
|
||||||
|
.forEach(property => {
|
||||||
|
uuids = [...uuids, ...this.deserializeAndCache(_embedded[property])];
|
||||||
|
});
|
||||||
|
return uuids;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected deserializeAndCache(obj): Array<string> {
|
||||||
|
let type: ResourceType;
|
||||||
|
const isArray = Array.isArray(obj);
|
||||||
|
|
||||||
|
if (isArray && isEmpty(obj)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isArray) {
|
||||||
|
type = obj[0]["type"];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
type = obj["type"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasValue(type)) {
|
||||||
|
const normObjConstructor = NormalizedObjectFactory.getConstructor(type);
|
||||||
|
|
||||||
|
if (hasValue(normObjConstructor)) {
|
||||||
|
const serializer = new DSpaceRESTv2Serializer(normObjConstructor);
|
||||||
|
|
||||||
|
if (isArray) {
|
||||||
|
obj.forEach(o => {
|
||||||
|
if (isNotEmpty(o._embedded)) {
|
||||||
|
this.processEmbedded(o._embedded);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const normalizedObjArr = serializer.deserializeArray(obj);
|
||||||
|
normalizedObjArr.forEach(t => this.addToObjectCache(t));
|
||||||
|
return normalizedObjArr.map(t => t.uuid);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (isNotEmpty(obj._embedded)) {
|
||||||
|
this.processEmbedded(obj._embedded);
|
||||||
|
}
|
||||||
|
const normalizedObj = serializer.deserialize(obj);
|
||||||
|
this.addToObjectCache(normalizedObj);
|
||||||
|
return [normalizedObj.uuid];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//TODO move check to Validator?
|
||||||
|
throw new Error(`The server returned an object with an unknown a known type: ${type}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//TODO move check to Validator
|
||||||
|
throw new Error(`The server returned an object without a type: ${JSON.stringify(obj)}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected addToObjectCache(co: CacheableObject): void {
|
protected addToObjectCache(co: CacheableObject): void {
|
||||||
if (hasNoValue(co) || hasNoValue(co.uuid)) {
|
if (hasNoValue(co) || hasNoValue(co.uuid)) {
|
||||||
throw new Error('The server returned an invalid object');
|
throw new Error('The server returned an invalid object');
|
||||||
|
@@ -5,28 +5,25 @@ import { GenericConstructor } from "../shared/generic-constructor";
|
|||||||
export class Request<T> {
|
export class Request<T> {
|
||||||
constructor(
|
constructor(
|
||||||
public href: string,
|
public href: string,
|
||||||
public resourceType: GenericConstructor<T>
|
|
||||||
) {}
|
) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class FindByIDRequest<T> extends Request<T> {
|
export class FindByIDRequest<T> extends Request<T> {
|
||||||
constructor(
|
constructor(
|
||||||
href: string,
|
href: string,
|
||||||
resourceType: GenericConstructor<T>,
|
|
||||||
public resourceID: string
|
public resourceID: string
|
||||||
) {
|
) {
|
||||||
super(href, resourceType);
|
super(href);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class FindAllRequest<T> extends Request<T> {
|
export class FindAllRequest<T> extends Request<T> {
|
||||||
constructor(
|
constructor(
|
||||||
href: string,
|
href: string,
|
||||||
resourceType: GenericConstructor<T>,
|
|
||||||
public scopeID?: string,
|
public scopeID?: string,
|
||||||
public paginationOptions?: PaginationOptions,
|
public paginationOptions?: PaginationOptions,
|
||||||
public sortOptions?: SortOptions
|
public sortOptions?: SortOptions
|
||||||
) {
|
) {
|
||||||
super(href, resourceType);
|
super(href);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,6 @@ import { RequestConfigureAction, RequestExecuteAction } from "./request.actions"
|
|||||||
import { ResponseCacheService } from "../cache/response-cache.service";
|
import { ResponseCacheService } from "../cache/response-cache.service";
|
||||||
import { ObjectCacheService } from "../cache/object-cache.service";
|
import { ObjectCacheService } from "../cache/object-cache.service";
|
||||||
import { CacheableObject } from "../cache/object-cache.reducer";
|
import { CacheableObject } from "../cache/object-cache.reducer";
|
||||||
import { GenericConstructor } from "../shared/generic-constructor";
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RequestService {
|
export class RequestService {
|
||||||
@@ -35,14 +34,13 @@ export class RequestService {
|
|||||||
return this.store.select<RequestEntry>('core', 'data', 'request', href);
|
return this.store.select<RequestEntry>('core', 'data', 'request', href);
|
||||||
}
|
}
|
||||||
|
|
||||||
configure<T extends CacheableObject>(href: string, normalizedType: GenericConstructor<T>): void {
|
configure<T extends CacheableObject>(request: Request<T>): void {
|
||||||
const isCached = this.objectCache.hasBySelfLink(href);
|
const isCached = this.objectCache.hasBySelfLink(request.href);
|
||||||
const isPending = this.isPending(href);
|
const isPending = this.isPending(request.href);
|
||||||
|
|
||||||
if (!(isCached || isPending)) {
|
if (!(isCached || isPending)) {
|
||||||
const request = new Request(href, normalizedType);
|
|
||||||
this.store.dispatch(new RequestConfigureAction(request));
|
this.store.dispatch(new RequestConfigureAction(request));
|
||||||
this.store.dispatch(new RequestExecuteAction(href));
|
this.store.dispatch(new RequestExecuteAction(request.href));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -84,14 +84,10 @@ describe("DSpaceRESTv2Serializer", () => {
|
|||||||
|
|
||||||
it("should turn a valid document describing a single entity in to a valid model", () => {
|
it("should turn a valid document describing a single entity in to a valid model", () => {
|
||||||
const serializer = new DSpaceRESTv2Serializer(TestModel);
|
const serializer = new DSpaceRESTv2Serializer(TestModel);
|
||||||
const doc = {
|
const model = serializer.deserialize(testResponses[0]);
|
||||||
"_embedded": testResponses[0],
|
|
||||||
};
|
|
||||||
|
|
||||||
const model = serializer.deserialize(doc);
|
expect(model.id).toBe(testResponses[0].id);
|
||||||
|
expect(model.name).toBe(testResponses[0].name);
|
||||||
expect(model.id).toBe(doc._embedded.id);
|
|
||||||
expect(model.name).toBe(doc._embedded.name);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//TODO cant implement/test this yet - depends on how relationships
|
//TODO cant implement/test this yet - depends on how relationships
|
||||||
@@ -127,12 +123,8 @@ describe("DSpaceRESTv2Serializer", () => {
|
|||||||
|
|
||||||
it("should throw an error when dealing with a document describing an array", () => {
|
it("should throw an error when dealing with a document describing an array", () => {
|
||||||
const serializer = new DSpaceRESTv2Serializer(TestModel);
|
const serializer = new DSpaceRESTv2Serializer(TestModel);
|
||||||
const doc = {
|
|
||||||
"_embedded": testResponses
|
|
||||||
};
|
|
||||||
|
|
||||||
expect(() => {
|
expect(() => {
|
||||||
serializer.deserialize(doc);
|
serializer.deserialize(testResponses);
|
||||||
}).toThrow();
|
}).toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -3,6 +3,7 @@ import { Serializer } from "../serializer";
|
|||||||
import { DSpaceRESTV2Response } from "./dspace-rest-v2-response.model";
|
import { DSpaceRESTV2Response } from "./dspace-rest-v2-response.model";
|
||||||
import { DSpaceRESTv2Validator } from "./dspace-rest-v2.validator";
|
import { DSpaceRESTv2Validator } from "./dspace-rest-v2.validator";
|
||||||
import { GenericConstructor } from "../shared/generic-constructor";
|
import { GenericConstructor } from "../shared/generic-constructor";
|
||||||
|
import { hasNoValue, hasValue } from "../../shared/empty.util";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This Serializer turns responses from v2 of DSpace's REST API
|
* This Serializer turns responses from v2 of DSpace's REST API
|
||||||
@@ -49,13 +50,13 @@ export class DSpaceRESTv2Serializer<T> implements Serializer<T> {
|
|||||||
* @param response An object returned by the backend
|
* @param response An object returned by the backend
|
||||||
* @returns a model of type T
|
* @returns a model of type T
|
||||||
*/
|
*/
|
||||||
deserialize(response: DSpaceRESTV2Response): T {
|
deserialize(response: any): T {
|
||||||
// TODO enable validation, once rest data stabilizes
|
// TODO enable validation, once rest data stabilizes
|
||||||
// new DSpaceRESTv2Validator(response).validate();
|
// new DSpaceRESTv2Validator(response).validate();
|
||||||
if (Array.isArray(response._embedded)) {
|
if (Array.isArray(response)) {
|
||||||
throw new Error('Expected a single model, use deserializeArray() instead');
|
throw new Error('Expected a single model, use deserializeArray() instead');
|
||||||
}
|
}
|
||||||
let normalized = Object.assign({}, response._embedded, this.normalizeLinks(response._embedded._links));
|
let normalized = Object.assign({}, response, this.normalizeLinks(response._links));
|
||||||
return <T> Deserialize(normalized, this.modelType);
|
return <T> Deserialize(normalized, this.modelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,13 +66,13 @@ export class DSpaceRESTv2Serializer<T> implements Serializer<T> {
|
|||||||
* @param response An object returned by the backend
|
* @param response An object returned by the backend
|
||||||
* @returns an array of models of type T
|
* @returns an array of models of type T
|
||||||
*/
|
*/
|
||||||
deserializeArray(response: DSpaceRESTV2Response): Array<T> {
|
deserializeArray(response: any): Array<T> {
|
||||||
//TODO enable validation, once rest data stabilizes
|
//TODO enable validation, once rest data stabilizes
|
||||||
// new DSpaceRESTv2Validator(response).validate();
|
// new DSpaceRESTv2Validator(response).validate();
|
||||||
if (!Array.isArray(response._embedded)) {
|
if (!Array.isArray(response)) {
|
||||||
throw new Error('Expected an Array, use deserialize() instead');
|
throw new Error('Expected an Array, use deserialize() instead');
|
||||||
}
|
}
|
||||||
let normalized = response._embedded.map((resource) => {
|
let normalized = response.map((resource) => {
|
||||||
return Object.assign({}, resource, this.normalizeLinks(resource._links));
|
return Object.assign({}, resource, this.normalizeLinks(resource._links));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -2,6 +2,7 @@ import { Metadatum } from "./metadatum.model"
|
|||||||
import { isEmpty, isNotEmpty } from "../../shared/empty.util";
|
import { isEmpty, isNotEmpty } from "../../shared/empty.util";
|
||||||
import { CacheableObject } from "../cache/object-cache.reducer";
|
import { CacheableObject } from "../cache/object-cache.reducer";
|
||||||
import { RemoteData } from "../data/remote-data";
|
import { RemoteData } from "../data/remote-data";
|
||||||
|
import { ResourceType } from "./resource-type";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An abstract model class for a DSpaceObject.
|
* An abstract model class for a DSpaceObject.
|
||||||
@@ -23,7 +24,7 @@ export abstract class DSpaceObject implements CacheableObject {
|
|||||||
/**
|
/**
|
||||||
* A string representing the kind of DSpaceObject, e.g. community, item, …
|
* A string representing the kind of DSpaceObject, e.g. community, item, …
|
||||||
*/
|
*/
|
||||||
type: string;
|
type: ResourceType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name for this DSpaceObject
|
* The name for this DSpaceObject
|
||||||
|
11
src/app/core/shared/resource-type.ts
Normal file
11
src/app/core/shared/resource-type.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* TODO replace with actual string enum after upgrade to TypeScript 2.4:
|
||||||
|
* https://github.com/Microsoft/TypeScript/pull/15486
|
||||||
|
*/
|
||||||
|
export enum ResourceType {
|
||||||
|
Bundle = <any> "bundle",
|
||||||
|
Bitstream = <any> "bitstream",
|
||||||
|
Item = <any> "item",
|
||||||
|
Collection = <any> "collection",
|
||||||
|
Community = <any> "community"
|
||||||
|
}
|
@@ -82,7 +82,7 @@ export function createMockApi() {
|
|||||||
let id = req.params.community_id;
|
let id = req.params.community_id;
|
||||||
try {
|
try {
|
||||||
req.community_id = id;
|
req.community_id = id;
|
||||||
req.community = COMMUNITIES.find((community) => {
|
req.community = COMMUNITIES["communities"].find((community) => {
|
||||||
return community.id === id;
|
return community.id === id;
|
||||||
});
|
});
|
||||||
next();
|
next();
|
||||||
@@ -143,7 +143,7 @@ export function createMockApi() {
|
|||||||
let id = req.params.collection_id;
|
let id = req.params.collection_id;
|
||||||
try {
|
try {
|
||||||
req.collection_id = id;
|
req.collection_id = id;
|
||||||
req.collection = COLLECTIONS.find((collection) => {
|
req.collection = COLLECTIONS["collections"].find((collection) => {
|
||||||
return collection.id === id;
|
return collection.id === id;
|
||||||
});
|
});
|
||||||
next();
|
next();
|
||||||
@@ -205,7 +205,7 @@ export function createMockApi() {
|
|||||||
let id = req.params.item_id;
|
let id = req.params.item_id;
|
||||||
try {
|
try {
|
||||||
req.item_id = id;
|
req.item_id = id;
|
||||||
req.item = ITEMS.find((item) => {
|
req.item = ITEMS["items"].find((item) => {
|
||||||
return item.id === id;
|
return item.id === id;
|
||||||
});
|
});
|
||||||
next();
|
next();
|
||||||
@@ -250,7 +250,7 @@ export function createMockApi() {
|
|||||||
let id = req.params.bundle_id;
|
let id = req.params.bundle_id;
|
||||||
try {
|
try {
|
||||||
req.bundle_id = id;
|
req.bundle_id = id;
|
||||||
req.bundle = BUNDLES.find((bundle) => {
|
req.bundle = BUNDLES["bundles"].find((bundle) => {
|
||||||
return bundle.id === id;
|
return bundle.id === id;
|
||||||
});
|
});
|
||||||
next();
|
next();
|
||||||
@@ -280,7 +280,7 @@ export function createMockApi() {
|
|||||||
let id = req.params.bitstream_id;
|
let id = req.params.bitstream_id;
|
||||||
try {
|
try {
|
||||||
req.bitstream_id = id;
|
req.bitstream_id = id;
|
||||||
req.bitstream = BITSTREAMS.find((bitstream) => {
|
req.bitstream = BITSTREAMS["bitstreams"].find((bitstream) => {
|
||||||
return bitstream.id === id;
|
return bitstream.id === id;
|
||||||
});
|
});
|
||||||
next();
|
next();
|
||||||
|
@@ -1,46 +1,48 @@
|
|||||||
export const BITSTREAMS = [
|
export const BITSTREAMS = {
|
||||||
{
|
"bitstreams": [
|
||||||
"_links": {
|
{
|
||||||
"self": { "href": "/bitstreams/3678" },
|
"_links": {
|
||||||
"bundle": { "href": "/bundles/35e0606d-5e18-4f9c-aa61-74fc751cc3f9" },
|
"self": { "href": "/bitstreams/3678" },
|
||||||
"retrieve": { "href": "/bitstreams/43c57c2b-206f-4645-8c8f-5f10c84b09fa/retrieve" }
|
"bundle": { "href": "/bundles/35e0606d-5e18-4f9c-aa61-74fc751cc3f9" },
|
||||||
|
"retrieve": { "href": "/bitstreams/43c57c2b-206f-4645-8c8f-5f10c84b09fa/retrieve" }
|
||||||
|
},
|
||||||
|
"id": "3678",
|
||||||
|
"uuid": "43c57c2b-206f-4645-8c8f-5f10c84b09fa",
|
||||||
|
"type": "bitstream",
|
||||||
|
"name": "do_open_access_CRL.pdf",
|
||||||
|
"size": 636626,
|
||||||
|
"checksum": {
|
||||||
|
"value": "063dfbbbac873aa3fca479b878eccff3",
|
||||||
|
"algorithm": "MD5"
|
||||||
|
},
|
||||||
|
"metadata": [
|
||||||
|
{ "key": "dc.title", "value": "do_open_access_CRL.pdf", "language": null },
|
||||||
|
{ "key": "dc.description", "value": "Conference Paper", "language": "en" }
|
||||||
|
],
|
||||||
|
"format": "Adobe PDF",
|
||||||
|
"mimetype": "application/pdf"
|
||||||
},
|
},
|
||||||
"id": "3678",
|
{
|
||||||
"uuid": "43c57c2b-206f-4645-8c8f-5f10c84b09fa",
|
"_links": {
|
||||||
"type": "bitstream",
|
"self": { "href": "/bitstreams/8842" },
|
||||||
"name": "do_open_access_CRL.pdf",
|
"bundle": { "href": "/bundles/a469c57a-abcf-45c3-83e4-b187ebd708fd" },
|
||||||
"size": 636626,
|
"retrieve": { "href": "/rest/bitstreams/1a013ecc-fb25-4689-a44f-f1383ad26632/retrieve" }
|
||||||
"checksum": {
|
},
|
||||||
"value": "063dfbbbac873aa3fca479b878eccff3",
|
"id": "8842",
|
||||||
"algorithm": "MD5"
|
"uuid": "1a013ecc-fb25-4689-a44f-f1383ad26632",
|
||||||
},
|
"type": "bitstream",
|
||||||
"metadata": [
|
"name": "do_open_access_CRL.pdf.jpg",
|
||||||
{ "key": "dc.title", "value": "do_open_access_CRL.pdf", "language": null },
|
"size": 41183,
|
||||||
{ "key": "dc.description", "value": "Conference Paper", "language": "en" }
|
"checksum": {
|
||||||
],
|
"value": "a8ad475e86f9645c60e13e06f1427814",
|
||||||
"format": "Adobe PDF",
|
"algorithm": "MD5"
|
||||||
"mimetype": "application/pdf"
|
},
|
||||||
},
|
"metadata": [
|
||||||
{
|
{ "key": "dc.title", "value": "do_open_access_CRL.pdf.jpg", "language": null },
|
||||||
"_links": {
|
{ "key": "dc.description", "value": "Generated Thumbnail", "language": "en" }
|
||||||
"self": { "href": "/bitstreams/8842" },
|
],
|
||||||
"bundle": { "href": "/bundles/a469c57a-abcf-45c3-83e4-b187ebd708fd" },
|
"format": "JPEG",
|
||||||
"retrieve": { "href": "/rest/bitstreams/1a013ecc-fb25-4689-a44f-f1383ad26632/retrieve" }
|
"mimetype": "image/jpeg"
|
||||||
},
|
}
|
||||||
"id": "8842",
|
]
|
||||||
"uuid": "1a013ecc-fb25-4689-a44f-f1383ad26632",
|
};
|
||||||
"type": "bitstream",
|
|
||||||
"name": "do_open_access_CRL.pdf.jpg",
|
|
||||||
"size": 41183,
|
|
||||||
"checksum": {
|
|
||||||
"value": "a8ad475e86f9645c60e13e06f1427814",
|
|
||||||
"algorithm": "MD5"
|
|
||||||
},
|
|
||||||
"metadata": [
|
|
||||||
{ "key": "dc.title", "value": "do_open_access_CRL.pdf.jpg", "language": null },
|
|
||||||
{ "key": "dc.description", "value": "Generated Thumbnail", "language": "en" }
|
|
||||||
],
|
|
||||||
"format": "JPEG",
|
|
||||||
"mimetype": "image/jpeg"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
@@ -1,40 +1,42 @@
|
|||||||
export const BUNDLES = [
|
export const BUNDLES = {
|
||||||
{
|
"bundles": [
|
||||||
"_links": {
|
{
|
||||||
"self": { "href": "/bundles/2355" },
|
"_links": {
|
||||||
"items": [
|
"self": { "href": "/bundles/2355" },
|
||||||
{ "href": "/items/8871" }
|
"items": [
|
||||||
],
|
{ "href": "/items/8871" }
|
||||||
"bitstreams": [
|
],
|
||||||
{ "href": "/bitstreams/3678" },
|
"bitstreams": [
|
||||||
],
|
{ "href": "/bitstreams/3678" },
|
||||||
"primaryBitstream": { "href": "/bitstreams/3678" }
|
],
|
||||||
|
"primaryBitstream": { "href": "/bitstreams/3678" }
|
||||||
|
},
|
||||||
|
"id": "2355",
|
||||||
|
"uuid": "35e0606d-5e18-4f9c-aa61-74fc751cc3f9",
|
||||||
|
"type": "bundle",
|
||||||
|
"name": "ORIGINAL",
|
||||||
|
"metadata": [
|
||||||
|
{ "key": "dc.title", "value": "ORIGINAL", "language": "en" }
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"id": "2355",
|
{
|
||||||
"uuid": "35e0606d-5e18-4f9c-aa61-74fc751cc3f9",
|
"_links": {
|
||||||
"type": "bundle",
|
"self": { "href": "/bundles/5687" },
|
||||||
"name": "ORIGINAL",
|
"items": [
|
||||||
"metadata": [
|
{ "href": "/items/8871" }
|
||||||
{ "key": "dc.title", "value": "ORIGINAL", "language": "en" }
|
],
|
||||||
]
|
"bitstreams": [
|
||||||
},
|
{ "href": "/bitstreams/8842" },
|
||||||
{
|
],
|
||||||
"_links": {
|
"primaryBitstream": { "href": "/bitstreams/8842" }
|
||||||
"self": { "href": "/bundles/5687" },
|
},
|
||||||
"items": [
|
"id": "5687",
|
||||||
{ "href": "/items/8871" }
|
"uuid": "a469c57a-abcf-45c3-83e4-b187ebd708fd",
|
||||||
],
|
"type": "bundle",
|
||||||
"bitstreams": [
|
"name": "THUMBNAIL",
|
||||||
{ "href": "/bitstreams/8842" },
|
"metadata": [
|
||||||
],
|
{ "key": "dc.title", "value": "THUMBNAIL", "language": "en" }
|
||||||
"primaryBitstream": { "href": "/bitstreams/8842" }
|
]
|
||||||
},
|
}
|
||||||
"id": "5687",
|
]
|
||||||
"uuid": "a469c57a-abcf-45c3-83e4-b187ebd708fd",
|
};
|
||||||
"type": "bundle",
|
|
||||||
"name": "THUMBNAIL",
|
|
||||||
"metadata": [
|
|
||||||
{ "key": "dc.title", "value": "THUMBNAIL", "language": "en" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
@@ -1,74 +1,76 @@
|
|||||||
export const COLLECTIONS = [
|
export const COLLECTIONS = {
|
||||||
{
|
"collections": [
|
||||||
"_links": {
|
{
|
||||||
"self": { "href": "/collections/5179" },
|
"_links": {
|
||||||
"items": [
|
"self": { "href": "/collections/5179" },
|
||||||
{ "href": "/items/8871" },
|
"items": [
|
||||||
{ "href": "/items/9978" }
|
{ "href": "/items/8871" },
|
||||||
|
{ "href": "/items/9978" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"id": "5179",
|
||||||
|
"uuid": "9e32a2e2-6b91-4236-a361-995ccdc14c60",
|
||||||
|
"type": "collection",
|
||||||
|
"name": "A Test Collection",
|
||||||
|
"handle": "123456789/5179",
|
||||||
|
"metadata": [
|
||||||
|
{
|
||||||
|
"key": "dc.rights",
|
||||||
|
"value": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description",
|
||||||
|
"value": "<p class='lead'>An introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.abstract",
|
||||||
|
"value": "A collection for testing purposes",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.tableofcontents",
|
||||||
|
"value": "<p>Some news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"id": "5179",
|
{
|
||||||
"uuid": "9e32a2e2-6b91-4236-a361-995ccdc14c60",
|
"_links": {
|
||||||
"type": "collection",
|
"self": { "href": "/collections/6547" },
|
||||||
"name": "A Test Collection",
|
"items": [
|
||||||
"handle": "123456789/5179",
|
{ "href": "/items/8871" },
|
||||||
"metadata": [
|
{ "href": "/items/9978" }
|
||||||
{
|
]
|
||||||
"key": "dc.rights",
|
|
||||||
"value": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
|
|
||||||
"language": null
|
|
||||||
},
|
},
|
||||||
{
|
"id": "6547",
|
||||||
"key": "dc.description",
|
"uuid": "598ce822-c357-46f3-ab70-63724d02d6ad",
|
||||||
"value": "<p class='lead'>An introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
|
"type": "collection",
|
||||||
"language": null
|
"name": "Another Test Collection",
|
||||||
},
|
"handle": "123456789/6547",
|
||||||
{
|
"metadata": [
|
||||||
"key": "dc.description.abstract",
|
{
|
||||||
"value": "A collection for testing purposes",
|
"key": "dc.rights",
|
||||||
"language": null
|
"value": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
|
||||||
},
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.description.tableofcontents",
|
{
|
||||||
"value": "<p>Some news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>",
|
"key": "dc.description",
|
||||||
"language": null
|
"value": "<p class='lead'>Another introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
|
||||||
}
|
"language": null
|
||||||
]
|
},
|
||||||
},
|
{
|
||||||
{
|
"key": "dc.description.abstract",
|
||||||
"_links": {
|
"value": "Another collection for testing purposes",
|
||||||
"self": { "href": "/collections/6547" },
|
"language": null
|
||||||
"items": [
|
},
|
||||||
{ "href": "/items/8871" },
|
{
|
||||||
{ "href": "/items/9978" }
|
"key": "dc.description.tableofcontents",
|
||||||
|
"value": "<p>Some more news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
}
|
||||||
"id": "6547",
|
]
|
||||||
"uuid": "598ce822-c357-46f3-ab70-63724d02d6ad",
|
};
|
||||||
"type": "collection",
|
|
||||||
"name": "Another Test Collection",
|
|
||||||
"handle": "123456789/6547",
|
|
||||||
"metadata": [
|
|
||||||
{
|
|
||||||
"key": "dc.rights",
|
|
||||||
"value": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
|
|
||||||
"language": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.description",
|
|
||||||
"value": "<p class='lead'>Another introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
|
|
||||||
"language": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.description.abstract",
|
|
||||||
"value": "Another collection for testing purposes",
|
|
||||||
"language": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.description.tableofcontents",
|
|
||||||
"value": "<p>Some more news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>",
|
|
||||||
"language": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
@@ -1,86 +1,88 @@
|
|||||||
export const COMMUNITIES = [
|
export const COMMUNITIES = {
|
||||||
{
|
"communities": [
|
||||||
"name": "Community 1",
|
{
|
||||||
"handle": "10673/1",
|
"name": "Community 1",
|
||||||
"id": "6631",
|
"handle": "10673/1",
|
||||||
"uuid": "83cd3281-f241-48be-9234-d876f8010d14",
|
"id": "6631",
|
||||||
"type": "community",
|
"uuid": "83cd3281-f241-48be-9234-d876f8010d14",
|
||||||
"metadata": [
|
"type": "community",
|
||||||
{
|
"metadata": [
|
||||||
"key": "dc.description",
|
{
|
||||||
"value": "<p>This is the introductory text for the <em>Sample Community</em> on the DSpace Demonstration Site. It is editable by System or Community Administrators (of this Community).</p>\r\n<p><strong>DSpace Communities may contain one or more Sub-Communities or Collections (of Items).</strong></p>\r\n<p>This particular Community has its own logo (the <a href=\"http://www.duraspace.org/\">DuraSpace</a> logo).</p>",
|
"key": "dc.description",
|
||||||
"language": null
|
"value": "<p>This is the introductory text for the <em>Sample Community</em> on the DSpace Demonstration Site. It is editable by System or Community Administrators (of this Community).</p>\r\n<p><strong>DSpace Communities may contain one or more Sub-Communities or Collections (of Items).</strong></p>\r\n<p>This particular Community has its own logo (the <a href=\"http://www.duraspace.org/\">DuraSpace</a> logo).</p>",
|
||||||
},
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.description.abstract",
|
{
|
||||||
"value": "This is a sample top-level community",
|
"key": "dc.description.abstract",
|
||||||
"language": null
|
"value": "This is a sample top-level community",
|
||||||
},
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.description.tableofcontents",
|
{
|
||||||
"value": "<p>This is the <em>news section</em> for this <em>Sample Community</em>. System or Community Administrators (of this Community) can edit this News field.</p>",
|
"key": "dc.description.tableofcontents",
|
||||||
"language": null
|
"value": "<p>This is the <em>news section</em> for this <em>Sample Community</em>. System or Community Administrators (of this Community) can edit this News field.</p>",
|
||||||
},
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.rights",
|
{
|
||||||
"value": "<p><em>If this Community had special copyright text to display, it would be displayed here.</em></p>",
|
"key": "dc.rights",
|
||||||
"language": null
|
"value": "<p><em>If this Community had special copyright text to display, it would be displayed here.</em></p>",
|
||||||
},
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.title",
|
{
|
||||||
"value": "Sample Community",
|
"key": "dc.title",
|
||||||
"language": null
|
"value": "Sample Community",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_links": {
|
||||||
|
"self": {
|
||||||
|
"href": "http://dspace7.4science.it/dspace-spring-rest/api/core/community/9076bd16-e69a-48d6-9e41-0238cb40d863"
|
||||||
|
},
|
||||||
|
"collections": [
|
||||||
|
{ "href": "/collections/5179" }
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
},
|
||||||
"_links": {
|
{
|
||||||
"self": {
|
"name": "Community 2",
|
||||||
"href": "http://dspace7.4science.it/dspace-spring-rest/api/core/community/9076bd16-e69a-48d6-9e41-0238cb40d863"
|
"handle": "10673/2",
|
||||||
},
|
"id": "2365",
|
||||||
"collections": [
|
"uuid": "80eec4c6-70bd-4beb-b3d4-5d46c6343157",
|
||||||
{ "href": "/collections/5179" }
|
"type": "community",
|
||||||
]
|
"metadata": [
|
||||||
}
|
{
|
||||||
},
|
"key": "dc.description",
|
||||||
{
|
"value": "<p>This is the introductory text for the <em>Sample Community</em> on the DSpace Demonstration Site. It is editable by System or Community Administrators (of this Community).</p>\r\n<p><strong>DSpace Communities may contain one or more Sub-Communities or Collections (of Items).</strong></p>\r\n<p>This particular Community has its own logo (the <a href=\"http://www.duraspace.org/\">DuraSpace</a> logo).</p>",
|
||||||
"name": "Community 2",
|
"language": null
|
||||||
"handle": "10673/2",
|
},
|
||||||
"id": "2365",
|
{
|
||||||
"uuid": "80eec4c6-70bd-4beb-b3d4-5d46c6343157",
|
"key": "dc.description.abstract",
|
||||||
"type": "community",
|
"value": "This is a sample top-level community",
|
||||||
"metadata": [
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.description",
|
{
|
||||||
"value": "<p>This is the introductory text for the <em>Sample Community</em> on the DSpace Demonstration Site. It is editable by System or Community Administrators (of this Community).</p>\r\n<p><strong>DSpace Communities may contain one or more Sub-Communities or Collections (of Items).</strong></p>\r\n<p>This particular Community has its own logo (the <a href=\"http://www.duraspace.org/\">DuraSpace</a> logo).</p>",
|
"key": "dc.description.tableofcontents",
|
||||||
"language": null
|
"value": "<p>This is the <em>news section</em> for this <em>Sample Community</em>. System or Community Administrators (of this Community) can edit this News field.</p>",
|
||||||
},
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.description.abstract",
|
{
|
||||||
"value": "This is a sample top-level community",
|
"key": "dc.rights",
|
||||||
"language": null
|
"value": "<p><em>If this Community had special copyright text to display, it would be displayed here.</em></p>",
|
||||||
},
|
"language": null
|
||||||
{
|
},
|
||||||
"key": "dc.description.tableofcontents",
|
{
|
||||||
"value": "<p>This is the <em>news section</em> for this <em>Sample Community</em>. System or Community Administrators (of this Community) can edit this News field.</p>",
|
"key": "dc.title",
|
||||||
"language": null
|
"value": "Sample Community",
|
||||||
},
|
"language": null
|
||||||
{
|
}
|
||||||
"key": "dc.rights",
|
],
|
||||||
"value": "<p><em>If this Community had special copyright text to display, it would be displayed here.</em></p>",
|
"_links": {
|
||||||
"language": null
|
"self": {
|
||||||
},
|
"href": "http://dspace7.4science.it/dspace-spring-rest/api/core/community/9076bd16-e69a-48d6-9e41-0238cb40d863"
|
||||||
{
|
},
|
||||||
"key": "dc.title",
|
"collections": [
|
||||||
"value": "Sample Community",
|
{ "href": "/collections/6547" }
|
||||||
"language": null
|
]
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"_links": {
|
|
||||||
"self": {
|
|
||||||
"href": "http://dspace7.4science.it/dspace-spring-rest/api/core/community/9076bd16-e69a-48d6-9e41-0238cb40d863"
|
|
||||||
},
|
|
||||||
"collections": [
|
|
||||||
{ "href": "/collections/6547" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
];
|
};
|
||||||
|
@@ -1,168 +1,281 @@
|
|||||||
export const ITEMS = [
|
export const ITEMS = {
|
||||||
{
|
"items": [
|
||||||
"_links": {
|
{
|
||||||
"self": {
|
"_links": {
|
||||||
"href": "/items/8871"
|
"self": {
|
||||||
|
"href": "/items/8871"
|
||||||
|
},
|
||||||
|
"parents": [
|
||||||
|
{
|
||||||
|
"href": "/collections/5179"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href": "/collections/6547"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bundles": [
|
||||||
|
{
|
||||||
|
"href": "/bundles/2355"
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// "href": "/bundles/5687"
|
||||||
|
// }
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"parents": [
|
"id": "8871",
|
||||||
|
"uuid": "21539b1d-9ef1-4eda-9c77-49565b5bfb78",
|
||||||
|
"type": "item",
|
||||||
|
"name": "Do Open-Access Articles Have a Greater Research Impact?",
|
||||||
|
"handle": "123456789/8871",
|
||||||
|
"lastModified": "2016-10-14 10:41:12.886",
|
||||||
|
"isArchived": true,
|
||||||
|
"isWithdrawn": false,
|
||||||
|
"metadata": [
|
||||||
{
|
{
|
||||||
"href": "/collections/5179"
|
"key": "dc.contributor.author",
|
||||||
|
"value": "Antelman, Kristin",
|
||||||
|
"language": "en"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"href": "/collections/6547"
|
"key": "dc.date.accessioned",
|
||||||
|
"value": "2016-10-14T10:41:13Z",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.date.available",
|
||||||
|
"value": "2016-10-14T10:41:13Z",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.date.issued",
|
||||||
|
"value": "2004-09-01",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.identifier.uri",
|
||||||
|
"value": "http://hdl.handle.net/123456789/8871",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.abstract",
|
||||||
|
"value": "Although many authors believe that their work has a greater research impact if it is freely available, studies to demonstrate that impact are few. This study looks at articles in four disciplines at varying stages of adoption of open access—philosophy, political science, electrical and electronic engineering and mathematics—to see whether they have a greater impact as measured by citations in the ISI Web of Science database when their authors make them freely available on the Internet. The finding is that, across all four disciplines, freely available articles do have a greater research impact. Shedding light on this category of open access reveals that scholars in diverse disciplines are adopting open-access practices and being rewarded for it.",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.publisher",
|
||||||
|
"value": "College & Research Libraries News",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.subject",
|
||||||
|
"value": "Publishing",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.subject",
|
||||||
|
"value": "Intellectual Property",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.subject",
|
||||||
|
"value": "Open Access",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.title",
|
||||||
|
"value": "Do Open-Access Articles Have a Greater Research Impact?",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.type",
|
||||||
|
"value": "(not specified)",
|
||||||
|
"language": "en"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bundles": [
|
"_embedded": {
|
||||||
{
|
"parents": [
|
||||||
"href": "/bundles/2355"
|
{
|
||||||
},
|
"_links": {
|
||||||
// {
|
"self": { "href": "/collections/5179" },
|
||||||
// "href": "/bundles/5687"
|
"items": [
|
||||||
// }
|
{ "href": "/items/8871" },
|
||||||
]
|
{ "href": "/items/9978" }
|
||||||
},
|
]
|
||||||
"id": "8871",
|
},
|
||||||
"uuid": "21539b1d-9ef1-4eda-9c77-49565b5bfb78",
|
"id": "5179",
|
||||||
"type": "item",
|
"uuid": "9e32a2e2-6b91-4236-a361-995ccdc14c60",
|
||||||
"name": "Do Open-Access Articles Have a Greater Research Impact?",
|
"type": "collection",
|
||||||
"handle": "123456789/8871",
|
"name": "A Test Collection",
|
||||||
"lastModified": "2016-10-14 10:41:12.886",
|
"handle": "123456789/5179",
|
||||||
"isArchived": true,
|
},
|
||||||
"isWithdrawn": false,
|
{
|
||||||
"metadata": [
|
"_links": {
|
||||||
{
|
"self": { "href": "/collections/6547" },
|
||||||
"key": "dc.contributor.author",
|
"items": [
|
||||||
"value": "Antelman, Kristin",
|
{ "href": "/items/8871" },
|
||||||
"language": "en"
|
{ "href": "/items/9978" }
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"key": "dc.date.accessioned",
|
"id": "6547",
|
||||||
"value": "2016-10-14T10:41:13Z",
|
"uuid": "598ce822-c357-46f3-ab70-63724d02d6ad",
|
||||||
"language": null
|
"type": "collection",
|
||||||
},
|
"name": "Another Test Collection",
|
||||||
{
|
"handle": "123456789/6547",
|
||||||
"key": "dc.date.available",
|
}
|
||||||
"value": "2016-10-14T10:41:13Z",
|
],
|
||||||
"language": null
|
"bundles": [
|
||||||
},
|
{
|
||||||
{
|
"_links": {
|
||||||
"key": "dc.date.issued",
|
"self": { "href": "/bundles/2355" },
|
||||||
"value": "2004-09-01",
|
"items": [
|
||||||
"language": "en"
|
{ "href": "/items/8871" }
|
||||||
},
|
],
|
||||||
{
|
"bitstreams": [
|
||||||
"key": "dc.identifier.uri",
|
{ "href": "/bitstreams/3678" },
|
||||||
"value": "http://hdl.handle.net/123456789/8871",
|
],
|
||||||
"language": null
|
"primaryBitstream": { "href": "/bitstreams/3678" }
|
||||||
},
|
},
|
||||||
{
|
"id": "2355",
|
||||||
"key": "dc.description.abstract",
|
"uuid": "35e0606d-5e18-4f9c-aa61-74fc751cc3f9",
|
||||||
"value": "Although many authors believe that their work has a greater research impact if it is freely available, studies to demonstrate that impact are few. This study looks at articles in four disciplines at varying stages of adoption of open access—philosophy, political science, electrical and electronic engineering and mathematics—to see whether they have a greater impact as measured by citations in the ISI Web of Science database when their authors make them freely available on the Internet. The finding is that, across all four disciplines, freely available articles do have a greater research impact. Shedding light on this category of open access reveals that scholars in diverse disciplines are adopting open-access practices and being rewarded for it.",
|
"type": "bundle",
|
||||||
"language": "en"
|
"name": "ORIGINAL",
|
||||||
},
|
"metadata": [
|
||||||
{
|
{ "key": "dc.title", "value": "ORIGINAL", "language": "en" }
|
||||||
"key": "dc.publisher",
|
],
|
||||||
"value": "College & Research Libraries News",
|
"_embedded": {
|
||||||
"language": "en"
|
"bitstreams": [
|
||||||
},
|
{
|
||||||
{
|
"_links": {
|
||||||
"key": "dc.subject",
|
"self": { "href": "/bitstreams/3678" },
|
||||||
"value": "Publishing",
|
"bundle": { "href": "/bundles/35e0606d-5e18-4f9c-aa61-74fc751cc3f9" },
|
||||||
"language": "en"
|
"retrieve": { "href": "/bitstreams/43c57c2b-206f-4645-8c8f-5f10c84b09fa/retrieve" }
|
||||||
},
|
},
|
||||||
{
|
"id": "3678",
|
||||||
"key": "dc.subject",
|
"uuid": "43c57c2b-206f-4645-8c8f-5f10c84b09fa",
|
||||||
"value": "Intellectual Property",
|
"type": "bitstream",
|
||||||
"language": "en"
|
"name": "do_open_access_CRL.pdf",
|
||||||
},
|
"size": 636626,
|
||||||
{
|
"checksum": {
|
||||||
"key": "dc.subject",
|
"value": "063dfbbbac873aa3fca479b878eccff3",
|
||||||
"value": "Open Access",
|
"algorithm": "MD5"
|
||||||
"language": "en"
|
},
|
||||||
},
|
"metadata": [
|
||||||
{
|
{ "key": "dc.title", "value": "do_open_access_CRL.pdf", "language": null },
|
||||||
"key": "dc.title",
|
{ "key": "dc.description", "value": "Conference Paper", "language": "en" }
|
||||||
"value": "Do Open-Access Articles Have a Greater Research Impact?",
|
],
|
||||||
"language": "en"
|
"format": "Adobe PDF",
|
||||||
},
|
"mimetype": "application/pdf"
|
||||||
{
|
}
|
||||||
"key": "dc.type",
|
]
|
||||||
"value": "(not specified)",
|
}
|
||||||
"language": "en"
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
},
|
||||||
},
|
{
|
||||||
{
|
"_links": {
|
||||||
"_links": {
|
"self": {
|
||||||
"self": {
|
"href": "/items/9978"
|
||||||
"href": "/items/9978"
|
},
|
||||||
|
"parents": [
|
||||||
|
{
|
||||||
|
"href": "/collections/5179"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href": "/collections/6547"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bundles": [
|
||||||
|
{
|
||||||
|
"href": "/bundles/2355"
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// "href": "/bundles/5687"
|
||||||
|
// }
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"parents": [
|
"id": "9978",
|
||||||
|
"uuid": "be8325f7-243b-49f4-8a4b-df2b793ff3b5",
|
||||||
|
"type": "item",
|
||||||
|
"name": "Another Test Item",
|
||||||
|
"handle": "123456789/9978",
|
||||||
|
"lastModified": "2016-05-27 03:00:20.063",
|
||||||
|
"isArchived": true,
|
||||||
|
"isWithdrawn": false,
|
||||||
|
"metadata": [
|
||||||
{
|
{
|
||||||
"href": "/collections/5179"
|
"key": "dc.contributor.author",
|
||||||
|
"value": "John Doe",
|
||||||
|
"language": "en"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"href": "/collections/6547"
|
"key": "dc.date.accessioned",
|
||||||
|
"value": "2016-05-27T07:45:04Z",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.date.available",
|
||||||
|
"value": "2016-05-27T07:45:04Z",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.date.issued",
|
||||||
|
"value": "2016-05-27",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.identifier.uri",
|
||||||
|
"value": "http://hdl.handle.net/123456789/9978",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.abstract",
|
||||||
|
"value": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacus velit, lacinia eu ultrices nec, auctor in sem. Donec interdum convallis ornare. Aliquam et tortor risus. Praesent ut feugiat eros, eu consequat nibh. Morbi id quam eu mi pellentesque consequat vel vitae sem. Praesent sed velit ullamcorper, efficitur odio non, aliquet urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque eu placerat urna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla non aliquet mauris. Nulla quis posuere lorem. Pellentesque tempus maximus ipsum ac pretium. Nunc hendrerit tempus sem, vitae luctus erat consectetur vestibulum. Nulla sodales felis in dictum sagittis.\n\nNullam porta magna quis magna vulputate elementum. Pellentesque dictum lorem id nisl tincidunt condimentum. Sed est dolor, dapibus sit amet augue at, malesuada cursus quam. Pellentesque elit felis, malesuada dictum congue tristique, iaculis euismod ligula. Donec dignissim dolor eu lacus pulvinar porttitor. Sed quis semper augue, dictum sollicitudin eros. \n\nMauris congue lectus at turpis viverra scelerisque. Praesent at urna rhoncus, condimentum odio ac, sagittis libero. Nulla aliquam ornare bibendum. Duis quis ornare urna. Suspendisse semper tincidunt neque nec consequat. Sed enim diam, mollis eu neque vitae, lacinia varius risus. Fusce nec sem tempor, efficitur lectus sed, porta sem. Pellentesque sollicitudin ut dui vitae malesuada.",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.title",
|
||||||
|
"value": "Another Test Item",
|
||||||
|
"language": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.type",
|
||||||
|
"value": "(not specified)",
|
||||||
|
"language": "en"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bundles": [
|
"_embedded": {
|
||||||
{
|
"parents": [
|
||||||
"href": "/bundles/2355"
|
{
|
||||||
},
|
"_links": {
|
||||||
// {
|
"self": { "href": "/collections/5179" },
|
||||||
// "href": "/bundles/5687"
|
"items": [
|
||||||
// }
|
{ "href": "/items/8871" },
|
||||||
]
|
{ "href": "/items/9978" }
|
||||||
},
|
]
|
||||||
"id": "9978",
|
},
|
||||||
"uuid": "be8325f7-243b-49f4-8a4b-df2b793ff3b5",
|
"id": "5179",
|
||||||
"type": "item",
|
"uuid": "9e32a2e2-6b91-4236-a361-995ccdc14c60",
|
||||||
"name": "Another Test Item",
|
"type": "collection",
|
||||||
"handle": "123456789/9978",
|
"name": "A Test Collection",
|
||||||
"lastModified": "2016-05-27 03:00:20.063",
|
"handle": "123456789/5179",
|
||||||
"isArchived": true,
|
},
|
||||||
"isWithdrawn": false,
|
{
|
||||||
"metadata": [
|
"_links": {
|
||||||
{
|
"self": { "href": "/collections/6547" },
|
||||||
"key": "dc.contributor.author",
|
"items": [
|
||||||
"value": "John Doe",
|
{ "href": "/items/8871" },
|
||||||
"language": "en"
|
{ "href": "/items/9978" }
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"key": "dc.date.accessioned",
|
"id": "6547",
|
||||||
"value": "2016-05-27T07:45:04Z",
|
"uuid": "598ce822-c357-46f3-ab70-63724d02d6ad",
|
||||||
"language": null
|
"type": "collection",
|
||||||
},
|
"name": "Another Test Collection",
|
||||||
{
|
"handle": "123456789/6547",
|
||||||
"key": "dc.date.available",
|
}
|
||||||
"value": "2016-05-27T07:45:04Z",
|
]
|
||||||
"language": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.date.issued",
|
|
||||||
"value": "2016-05-27",
|
|
||||||
"language": "en"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.identifier.uri",
|
|
||||||
"value": "http://hdl.handle.net/123456789/9978",
|
|
||||||
"language": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.description.abstract",
|
|
||||||
"value": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacus velit, lacinia eu ultrices nec, auctor in sem. Donec interdum convallis ornare. Aliquam et tortor risus. Praesent ut feugiat eros, eu consequat nibh. Morbi id quam eu mi pellentesque consequat vel vitae sem. Praesent sed velit ullamcorper, efficitur odio non, aliquet urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque eu placerat urna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla non aliquet mauris. Nulla quis posuere lorem. Pellentesque tempus maximus ipsum ac pretium. Nunc hendrerit tempus sem, vitae luctus erat consectetur vestibulum. Nulla sodales felis in dictum sagittis.\n\nNullam porta magna quis magna vulputate elementum. Pellentesque dictum lorem id nisl tincidunt condimentum. Sed est dolor, dapibus sit amet augue at, malesuada cursus quam. Pellentesque elit felis, malesuada dictum congue tristique, iaculis euismod ligula. Donec dignissim dolor eu lacus pulvinar porttitor. Sed quis semper augue, dictum sollicitudin eros. \n\nMauris congue lectus at turpis viverra scelerisque. Praesent at urna rhoncus, condimentum odio ac, sagittis libero. Nulla aliquam ornare bibendum. Duis quis ornare urna. Suspendisse semper tincidunt neque nec consequat. Sed enim diam, mollis eu neque vitae, lacinia varius risus. Fusce nec sem tempor, efficitur lectus sed, porta sem. Pellentesque sollicitudin ut dui vitae malesuada.",
|
|
||||||
"language": "en"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.title",
|
|
||||||
"value": "Another Test Item",
|
|
||||||
"language": "en"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "dc.type",
|
|
||||||
"value": "(not specified)",
|
|
||||||
"language": "en"
|
|
||||||
}
|
}
|
||||||
]
|
}
|
||||||
}
|
]
|
||||||
];
|
};
|
||||||
|
@@ -1,182 +1,184 @@
|
|||||||
export const METADATA = [
|
export const METADATA = {
|
||||||
{
|
"metadata": [
|
||||||
"type": "metadata",
|
{
|
||||||
"id": "d58a3098-b390-4cd6-8f52-b088b3daa637",
|
"type": "metadata",
|
||||||
"attributes": {
|
"id": "d58a3098-b390-4cd6-8f52-b088b3daa637",
|
||||||
"key": "dc.contributor.author",
|
"attributes": {
|
||||||
"value": "Antelman, Kristin",
|
"key": "dc.contributor.author",
|
||||||
"language": "en"
|
"value": "Antelman, Kristin",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "56660730-0e0d-47ec-864a-bda2327d5716",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.date.accessioned",
|
||||||
|
"value": "2016-10-14T10:41:13Z",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "b9d4ae74-2758-4964-a95e-eecd35b62f26",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.date.available",
|
||||||
|
"value": "2016-10-14T10:41:13Z",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "311529ea-e339-4d8f-9292-813ebe515f03",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.date.issued",
|
||||||
|
"value": "2004-09-01",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "fa875444-3faf-482a-b099-77233bda914d",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.identifier.uri",
|
||||||
|
"value": "http://hdl.handle.net/123456789/8871",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "ddbb161b-6e52-4a90-9096-c8eae8cec4c9",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.description.abstract",
|
||||||
|
"value": "Although many authors believe that their work has a greater research impact if it is freely available, studies to demonstrate that impact are few. This study looks at articles in four disciplines at varying stages of adoption of open access—philosophy, political science, electrical and electronic engineering and mathematics—to see whether they have a greater impact as measured by citations in the ISI Web of Science database when their authors make them freely available on the Internet. The finding is that, across all four disciplines, freely available articles do have a greater research impact. Shedding light on this category of open access reveals that scholars in diverse disciplines are adopting open-access practices and being rewarded for it.",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "ba51287d-a2c9-409b-8129-060b693a7570",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.publisher",
|
||||||
|
"value": "College & Research Libraries News",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "e5c1c9d4-b4e2-4bdc-9153-6b769742b33f",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.subject",
|
||||||
|
"value": "Publishing",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "4c125844-1eca-47aa-98f8-61c51a9c962f",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.subject",
|
||||||
|
"value": "Intellectual Property",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "362c753c-a44d-468d-b256-486470b8c1e1",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.subject",
|
||||||
|
"value": "Open Access",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": " 69a02355-37bb-479f-9496-c8743fcacf3c",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.title",
|
||||||
|
"value": "Do Open-Access Articles Have a Greater Research Impact?",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "ffbd75d5-bf3a-47ff-af22-490240f6fcc6",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.type",
|
||||||
|
"value": "(not specified)",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "981c725e-53f3-4749-89ee-ef042f23c3c3",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.contributor.author",
|
||||||
|
"value": "John Doe",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "521df61d-c541-4180-beb8-ac0a1bd1e852",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.date.accessioned",
|
||||||
|
"value": "2016-05-27T07:45:04Z",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "551a216d-5350-4b15-9398-9bc2e95e7a3d",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.date.available",
|
||||||
|
"value": "2016-05-27T07:45:04Z",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": " eb17dce4-3892-47fe-b014-6ff8e17a93ef",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.date.issued",
|
||||||
|
"value": "2016-05-27",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "3e840957-cb1b-4521-8f5d-fb5f6956f303",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.identifier.uri",
|
||||||
|
"value": "http://hdl.handle.net/123456789/9978",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "ae0bc880-481b-4425-aa5b-354b38d24e4f",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.description.abstract",
|
||||||
|
"value": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacus velit, lacinia eu ultrices nec, auctor in sem. Donec interdum convallis ornare. Aliquam et tortor risus. Praesent ut feugiat eros, eu consequat nibh. Morbi id quam eu mi pellentesque consequat vel vitae sem. Praesent sed velit ullamcorper, efficitur odio non, aliquet urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque eu placerat urna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla non aliquet mauris. Nulla quis posuere lorem. Pellentesque tempus maximus ipsum ac pretium. Nunc hendrerit tempus sem, vitae luctus erat consectetur vestibulum. Nulla sodales felis in dictum sagittis.\n\nNullam porta magna quis magna vulputate elementum. Pellentesque dictum lorem id nisl tincidunt condimentum. Sed est dolor, dapibus sit amet augue at, malesuada cursus quam. Pellentesque elit felis, malesuada dictum congue tristique, iaculis euismod ligula. Donec dignissim dolor eu lacus pulvinar porttitor. Sed quis semper augue, dictum sollicitudin eros. \n\nMauris congue lectus at turpis viverra scelerisque. Praesent at urna rhoncus, condimentum odio ac, sagittis libero. Nulla aliquam ornare bibendum. Duis quis ornare urna. Suspendisse semper tincidunt neque nec consequat. Sed enim diam, mollis eu neque vitae, lacinia varius risus. Fusce nec sem tempor, efficitur lectus sed, porta sem. Pellentesque sollicitudin ut dui vitae malesuada.",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "8dc89ac4-d606-4f1a-8524-8f70a6b371de",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.title",
|
||||||
|
"value": "Another Test Item",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "metadata",
|
||||||
|
"id": "13185eb9-dc05-4bd7-9c2d-5322a2ac5326",
|
||||||
|
"attributes": {
|
||||||
|
"key": "dc.type",
|
||||||
|
"value": "(not specified)",
|
||||||
|
"language": "en"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
]
|
||||||
{
|
};
|
||||||
"type": "metadata",
|
|
||||||
"id": "56660730-0e0d-47ec-864a-bda2327d5716",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.date.accessioned",
|
|
||||||
"value": "2016-10-14T10:41:13Z",
|
|
||||||
"language": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "b9d4ae74-2758-4964-a95e-eecd35b62f26",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.date.available",
|
|
||||||
"value": "2016-10-14T10:41:13Z",
|
|
||||||
"language": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "311529ea-e339-4d8f-9292-813ebe515f03",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.date.issued",
|
|
||||||
"value": "2004-09-01",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "fa875444-3faf-482a-b099-77233bda914d",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.identifier.uri",
|
|
||||||
"value": "http://hdl.handle.net/123456789/8871",
|
|
||||||
"language": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "ddbb161b-6e52-4a90-9096-c8eae8cec4c9",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.description.abstract",
|
|
||||||
"value": "Although many authors believe that their work has a greater research impact if it is freely available, studies to demonstrate that impact are few. This study looks at articles in four disciplines at varying stages of adoption of open access—philosophy, political science, electrical and electronic engineering and mathematics—to see whether they have a greater impact as measured by citations in the ISI Web of Science database when their authors make them freely available on the Internet. The finding is that, across all four disciplines, freely available articles do have a greater research impact. Shedding light on this category of open access reveals that scholars in diverse disciplines are adopting open-access practices and being rewarded for it.",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "ba51287d-a2c9-409b-8129-060b693a7570",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.publisher",
|
|
||||||
"value": "College & Research Libraries News",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "e5c1c9d4-b4e2-4bdc-9153-6b769742b33f",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.subject",
|
|
||||||
"value": "Publishing",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "4c125844-1eca-47aa-98f8-61c51a9c962f",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.subject",
|
|
||||||
"value": "Intellectual Property",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "362c753c-a44d-468d-b256-486470b8c1e1",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.subject",
|
|
||||||
"value": "Open Access",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": " 69a02355-37bb-479f-9496-c8743fcacf3c",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.title",
|
|
||||||
"value": "Do Open-Access Articles Have a Greater Research Impact?",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "ffbd75d5-bf3a-47ff-af22-490240f6fcc6",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.type",
|
|
||||||
"value": "(not specified)",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "981c725e-53f3-4749-89ee-ef042f23c3c3",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.contributor.author",
|
|
||||||
"value": "John Doe",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "521df61d-c541-4180-beb8-ac0a1bd1e852",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.date.accessioned",
|
|
||||||
"value": "2016-05-27T07:45:04Z",
|
|
||||||
"language": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "551a216d-5350-4b15-9398-9bc2e95e7a3d",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.date.available",
|
|
||||||
"value": "2016-05-27T07:45:04Z",
|
|
||||||
"language": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": " eb17dce4-3892-47fe-b014-6ff8e17a93ef",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.date.issued",
|
|
||||||
"value": "2016-05-27",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "3e840957-cb1b-4521-8f5d-fb5f6956f303",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.identifier.uri",
|
|
||||||
"value": "http://hdl.handle.net/123456789/9978",
|
|
||||||
"language": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "ae0bc880-481b-4425-aa5b-354b38d24e4f",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.description.abstract",
|
|
||||||
"value": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacus velit, lacinia eu ultrices nec, auctor in sem. Donec interdum convallis ornare. Aliquam et tortor risus. Praesent ut feugiat eros, eu consequat nibh. Morbi id quam eu mi pellentesque consequat vel vitae sem. Praesent sed velit ullamcorper, efficitur odio non, aliquet urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque eu placerat urna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla non aliquet mauris. Nulla quis posuere lorem. Pellentesque tempus maximus ipsum ac pretium. Nunc hendrerit tempus sem, vitae luctus erat consectetur vestibulum. Nulla sodales felis in dictum sagittis.\n\nNullam porta magna quis magna vulputate elementum. Pellentesque dictum lorem id nisl tincidunt condimentum. Sed est dolor, dapibus sit amet augue at, malesuada cursus quam. Pellentesque elit felis, malesuada dictum congue tristique, iaculis euismod ligula. Donec dignissim dolor eu lacus pulvinar porttitor. Sed quis semper augue, dictum sollicitudin eros. \n\nMauris congue lectus at turpis viverra scelerisque. Praesent at urna rhoncus, condimentum odio ac, sagittis libero. Nulla aliquam ornare bibendum. Duis quis ornare urna. Suspendisse semper tincidunt neque nec consequat. Sed enim diam, mollis eu neque vitae, lacinia varius risus. Fusce nec sem tempor, efficitur lectus sed, porta sem. Pellentesque sollicitudin ut dui vitae malesuada.",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "8dc89ac4-d606-4f1a-8524-8f70a6b371de",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.title",
|
|
||||||
"value": "Another Test Item",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "metadata",
|
|
||||||
"id": "13185eb9-dc05-4bd7-9c2d-5322a2ac5326",
|
|
||||||
"attributes": {
|
|
||||||
"key": "dc.type",
|
|
||||||
"value": "(not specified)",
|
|
||||||
"language": "en"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
Reference in New Issue
Block a user