Skip to content
Snippets Groups Projects
Commit 2bd46788 authored by Benedikt Heinrichs's avatar Benedikt Heinrichs Committed by Kimia Beheshti
Browse files

Update: Different default for class retrieval

parent e8167313
No related branches found
No related tags found
2 merge requests!132Release: Sprint/2023 13,!124Update: Different default for class retrieval
......@@ -28,6 +28,7 @@
"dependencies": {
"@coscine/api-client": "^2.9.2",
"@zazuko/rdf-vocabularies": "^2022.6.29",
"axios": "^1.3.5",
"bootstrap": "4.6.1",
"bootstrap-vue": "^2.22.0",
"rdf-ext": "^2.0.1",
......
......
......@@ -37,7 +37,7 @@ import locale from '@/locale';
import VueI18n from 'vue-i18n';
import { MetadataApi, UserApi } from '@coscine/api-client';
import { UserApi } from '@coscine/api-client';
import type { Dataset, Quad, Quad_Object, Quad_Subject } from 'rdf-js';
import factory from 'rdf-ext';
......@@ -47,13 +47,13 @@ import LinkedDataHandler from '@/base/LinkedDataHandler';
import { prefixes } from '@zazuko/rdf-vocabularies';
import type { UserObject } from '@coscine/api-client/dist/types/Coscine.Api.User';
import type { BilingualLabels } from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import type {
FixedValueObject,
FixedValues,
ValueType,
} from '@/types/fixedValues';
import type DatasetExt from 'rdf-ext/lib/Dataset';
import { retrieveChildren } from './util/linkedData';
if (Vue) {
Vue.use(VueI18n);
......@@ -124,13 +124,8 @@ export default defineComponent({
type: String,
},
classReceiver: {
default: () => async (classUrl: string) => {
const response = await MetadataApi.metadataGetClassInstances(classUrl);
return response.data;
},
type: Function as PropType<
(classUrl: string) => Promise<BilingualLabels>
>,
default: () => retrieveChildren,
type: Function as PropType<typeof retrieveChildren>,
},
userReceiver: {
default: () => async () => {
......
......
......@@ -5,16 +5,8 @@ import SHACLValidator from 'rdf-validate-shacl';
import rdfParser from 'rdf-parse';
import { Readable } from 'stream';
import { prefixes } from '@zazuko/rdf-vocabularies';
import type {
DataFactory,
Dataset,
DatasetCore,
DatasetCoreFactory,
Quad,
Quad_Object,
Quad_Subject,
} from 'rdf-js';
import type ValidationReport from 'rdf-validate-shacl/src/validation-report';
import type { Dataset, Quad, Quad_Object, Quad_Subject } from 'rdf-js';
import type { ValidationType } from '@/types/validationTypes';
export default defineComponent({
data() {
......@@ -25,20 +17,7 @@ export default defineComponent({
};
},
methods: {
fillResults(
currentResults: Array<
ValidationReport.ValidationResult<
DataFactory<Quad, Quad> &
DatasetCoreFactory<Quad, Quad, DatasetCore<Quad, Quad>>
>
>,
results: Array<
ValidationReport.ValidationResult<
DataFactory<Quad, Quad> &
DatasetCoreFactory<Quad, Quad, DatasetCore<Quad, Quad>>
>
>
) {
fillResults(currentResults: ValidationType, results: ValidationType) {
for (const currentResult of currentResults) {
results.push(currentResult);
if (currentResult.detail) {
......@@ -48,12 +27,7 @@ export default defineComponent({
},
setErrorMessages(
metadata: Dataset,
results: Array<
ValidationReport.ValidationResult<
DataFactory<Quad, Quad> &
DatasetCoreFactory<Quad, Quad, DatasetCore<Quad, Quad>>
>
>,
results: ValidationType,
subjectNode: Quad_Subject
) {
for (const result of results) {
......@@ -148,12 +122,7 @@ export default defineComponent({
this.$emit('isValid', report, clonedValidationContext);
this.errorMessages = {};
const results: Array<
ValidationReport.ValidationResult<
DataFactory<Quad, Quad> &
DatasetCoreFactory<Quad, Quad, DatasetCore<Quad, Quad>>
>
> = [];
const results: ValidationType = [];
this.fillResults(report.results, results);
this.setErrorMessages(clonedMetadata, results, subjectNode);
......
......
......@@ -29,12 +29,10 @@ if (Vue) {
// TODO: Deal with Vue 3
}
import type {
BilingualLabels,
Label,
} from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import type { Label } from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import type { NamedNode, Quad_Object } from 'rdf-js';
import factory from 'rdf-ext';
import { retrieveChildren } from '@/util/linkedData';
const i18n = new VueI18n({
locale: 'en',
......@@ -71,12 +69,8 @@ export default defineComponent({
type: Object as PropType<NamedNode<string>>,
},
classReceiver: {
default: () => {
return async () => ({} as BilingualLabels);
},
type: Function as PropType<
(classUrl: string) => Promise<BilingualLabels>
>,
default: () => retrieveChildren,
type: Function as PropType<typeof retrieveChildren>,
},
},
data() {
......@@ -129,10 +123,22 @@ export default defineComponent({
}
},
async retrieveLabels() {
let classReceiver:
| typeof retrieveChildren
| (() => typeof retrieveChildren) = this.classReceiver;
// Deal with weird behavior during dev builds
try {
const bilingualLabels = await this.classReceiver(
this.classObject.value
);
// If the function has no arguments, it's not the retrieveChildren one
if (classReceiver.length === 0) {
classReceiver = (
classReceiver as unknown as () => typeof retrieveChildren
)();
}
} catch (e) {
// Ignore
}
try {
const bilingualLabels = await classReceiver(this.classObject.value);
if (this.languageCode === 'en' && bilingualLabels.en) {
this.list = bilingualLabels.en;
} else if (this.languageCode === 'de' && bilingualLabels.de) {
......
......
......@@ -29,10 +29,7 @@ if (Vue) {
// TODO: Deal with Vue 3
}
import type {
BilingualLabels,
Label,
} from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import type { Label } from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import type { Quad_Object } from 'rdf-js';
import factory from 'rdf-ext';
......@@ -70,14 +67,6 @@ export default defineComponent({
required: true,
type: Array as PropType<Array<string>>,
},
classReceiver: {
default: () => {
return async () => ({} as BilingualLabels);
},
type: Function as PropType<
(classUrl: string) => Promise<BilingualLabels>
>,
},
},
data() {
return {
......
......
......@@ -34,8 +34,8 @@ import type { Dataset, Quad_Object } from 'rdf-js';
import factory from 'rdf-ext';
import { BCard } from 'bootstrap-vue';
import { type FixedValues } from '@/types/fixedValues';
import { type BilingualLabels } from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import { type UserObject } from '@coscine/api-client/dist/types/Coscine.Api.User';
import { retrieveChildren } from '@/util/linkedData';
const i18n = new VueI18n({
locale: 'en',
......@@ -91,12 +91,8 @@ export default defineComponent({
type: Boolean,
},
classReceiver: {
default: () => {
return async () => ({} as BilingualLabels);
},
type: Function as PropType<
(classUrl: string) => Promise<BilingualLabels>
>,
default: () => retrieveChildren,
type: Function as PropType<typeof retrieveChildren>,
},
userReceiver: {
default: () => {
......
......
......@@ -164,12 +164,15 @@ const i18n = new VueI18n({
silentFallbackWarn: true,
});
import type { BilingualLabels } from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import type { UserObject } from '@coscine/api-client/dist/types/Coscine.Api.User';
import type { Dataset, NamedNode, Quad_Object, Quad_Subject } from 'rdf-js';
import { prefixes } from '@zazuko/rdf-vocabularies';
import factory from 'rdf-ext';
import { getObject, getObjectStringList } from '@/util/linkedData';
import {
getObject,
getObjectStringList,
retrieveChildren,
} from '@/util/linkedData';
import type {
FixedValueObject,
FixedValues,
......@@ -228,12 +231,8 @@ export default defineComponent({
type: Object as PropType<{ [nodeName: string]: Quad_Object[] }>,
},
classReceiver: {
default: () => {
return async () => ({} as BilingualLabels);
},
type: Function as PropType<
(classUrl: string) => Promise<BilingualLabels>
>,
default: () => retrieveChildren,
type: Function as PropType<typeof retrieveChildren>,
},
userReceiver: {
default: () => {
......
......
export interface TerminologyResponse {
responseHeader: ResponseHeader;
response: Response;
facet_counts: FacetCounts;
highlighting: { [key: string]: FacetDates };
}
export interface FacetCounts {
facet_queries: FacetDates;
facet_fields: FacetFields;
facet_dates: FacetDates;
facet_ranges: FacetDates;
facet_intervals: FacetDates;
facet_heatmaps: FacetDates;
}
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface FacetDates {}
export interface FacetFields {
ontology_name: Array<number | string>;
ontology_prefix: Array<number | string>;
type: Array<number | string>;
subset: Array<number | string>;
is_defining_ontology: Array<number | string>;
is_obsolete: Array<number | string>;
}
export interface Response {
numFound: number;
start: number;
docs: Doc[];
}
export interface Doc {
id: string;
iri: string;
short_form: string;
label: string;
ontology_name: Ontology;
ontology_prefix: Ontology;
type: Type;
is_defining_ontology: boolean;
obo_id?: string;
description?: string[];
}
export enum Ontology {
DR = 'dr',
Premis3 = 'premis3',
}
export enum Type {
Class = 'class',
Individual = 'individual',
}
export interface ResponseHeader {
status: number;
QTime: number;
params: Params;
}
export interface Params {
'facet.field': string[];
hl: string;
fl: string;
start: string;
fq: string[];
rows: string;
'hl.simple.pre': string;
bq: string;
q: string;
defType: string;
'hl.simple.post': string;
qf: string;
'hl.fl': string[];
facet: string;
wt: string;
}
import type ValidationReport from 'rdf-validate-shacl/src/validation-report';
import type {
DataFactory,
DatasetCore,
DatasetCoreFactory,
Quad,
} from 'rdf-js';
export type ValidationType = Array<
ValidationReport.ValidationResult<
DataFactory<Quad, Quad> &
DatasetCoreFactory<Quad, Quad, DatasetCore<Quad, Quad>>
>
>;
import { prefixes } from '@zazuko/rdf-vocabularies';
import factory from 'rdf-ext';
import axios from 'axios';
import type { TerminologyResponse } from '@/types/terminologyResponse';
import type { BilingualLabels } from '@coscine/api-client/dist/types/Coscine.Api.Metadata';
import type {
Dataset,
Literal,
......@@ -70,3 +73,22 @@ export function getObjectStringList(
.filter((quad) => quad.predicate.equals(rdfFirstNode))
.map((quad) => quad.object.value);
}
export async function retrieveChildren(
classUrl: string
): Promise<BilingualLabels> {
const response = await axios.get(
`https://service.tib.eu/ts4tib/api/search?q=*&obsoletes=false&local=false&groupField=iri&childrenOf=${classUrl}&format=json`
);
const tibResponse: TerminologyResponse = response.data;
const de = tibResponse.response.docs.map((doc) => {
return {
name: doc.label,
value: doc.iri,
};
});
return {
de,
en: de,
};
}
......@@ -351,6 +351,7 @@ __metadata:
"@vue/eslint-config-typescript": ^11.0.1
"@vue/test-utils": ^1.3.0
"@zazuko/rdf-vocabularies": ^2022.6.29
axios: ^1.3.5
bootstrap: 4.6.1
bootstrap-vue: ^2.22.0
conventional-changelog-eslint: 3.0.9
......@@ -2094,6 +2095,17 @@ __metadata:
languageName: node
linkType: hard
"axios@npm:^1.3.5":
version: 1.3.5
resolution: "axios@npm:1.3.5"
dependencies:
follow-redirects: ^1.15.0
form-data: ^4.0.0
proxy-from-env: ^1.1.0
checksum: 4d6bcf933b1cdff86d4993752aaeeeedc4a7f7a4b1c942847f6884bb13fc6106610ff826b076acf0b08d8ced55dee9344bb9a11f3624c3e70ab1da1a40bb5506
languageName: node
linkType: hard
"balanced-match@npm:^1.0.0":
version: 1.0.2
resolution: "balanced-match@npm:1.0.2"
......@@ -4367,7 +4379,7 @@ __metadata:
languageName: node
linkType: hard
"follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.5.1":
"follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.15.0, follow-redirects@npm:^1.5.1":
version: 1.15.2
resolution: "follow-redirects@npm:1.15.2"
peerDependenciesMeta:
......@@ -7912,6 +7924,13 @@ __metadata:
languageName: node
linkType: hard
"proxy-from-env@npm:^1.1.0":
version: 1.1.0
resolution: "proxy-from-env@npm:1.1.0"
checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4
languageName: node
linkType: hard
"pseudomap@npm:^1.0.2":
version: 1.0.2
resolution: "pseudomap@npm:1.0.2"
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment