From 19986d7de321e17a4a54d30addf9d949163adcdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= Date: Mon, 23 Mar 2026 13:49:51 +0100 Subject: [PATCH 1/7] Remodel instance vs work category search terms --- source/apps.jsonld | 16 +++---- source/vocab/libris-search-experimental.ttl | 53 ++++++++++----------- 2 files changed, 32 insertions(+), 37 deletions(-) diff --git a/source/apps.jsonld b/source/apps.jsonld index e5977086..dc34b88a 100644 --- a/source/apps.jsonld +++ b/source/apps.jsonld @@ -83,8 +83,8 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, - { "dimensionChain": ["hasInstanceCategory"], "itemLimit": 100 }, + { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, { "dimensionChain": ["yearPublished"], "itemLimit": 500, "range": true }, @@ -156,8 +156,8 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, - { "dimensionChain": ["hasInstanceCategory"], "itemLimit": 100 }, + { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["contributor"], "itemLimit": 20 }, { "dimensionChain": ["subject"], "itemLimit": 100 }, @@ -215,8 +215,8 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, - { "dimensionChain": ["hasInstanceCategory"], "itemLimit": 100 }, + { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, { "dimensionChain": ["yearPublished"], "itemLimit": 500, "range": true }, @@ -289,8 +289,8 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, - { "dimensionChain": ["hasInstanceCategory"], "itemLimit": 100 }, + { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, { "dimensionChain": ["yearPublished"], "itemLimit": 500, "range": true }, diff --git a/source/vocab/libris-search-experimental.ttl b/source/vocab/libris-search-experimental.ttl index fd51a5df..7eecb0aa 100644 --- a/source/vocab/libris-search-experimental.ttl +++ b/source/vocab/libris-search-experimental.ttl @@ -117,12 +117,17 @@ ls:composite a skos:Collection ; ls:preferLike a skos:Collection ; :code "preferLike" . +ls:coercing a skos:Collection ; + :category :pending . + # TODO? Could be ls:MergedProperty rdfs:subClassOf owl:ObjectProperty ls:merged a skos:Collection ; + :category :pending ; rdfs:label "merged"@en, "sammanslagen"@sv . # TODO: add e.g. label, domain, comment -ls:merges a owl:ObjectProperty . +ls:merges a owl:ObjectProperty ; + :category :pending . ls:isxn a owl:DatatypeProperty ; :category ls:composite, :pending, :searchfilter ; @@ -157,19 +162,6 @@ ls:hasInstanceType a owl:ObjectProperty ; rdfs:domain :Work ; owl:propertyChainAxiom ( :hasInstance rdf:type ) . -ls:instanceOfCategory a owl:ObjectProperty ; - rdfs:label "kategori på verket"@sv, "category of work"@en ; - :category :shorthand, :impliedByObject, :pending ; - rdfs:domain :Instance ; - owl:propertyChainAxiom ( :instanceOf :category ) . - -ls:hasInstanceCategory a owl:ObjectProperty ; - rdfs:label "format"@sv, "format"@en ; - :category :shorthand, :impliedByObject, :pending ; - rdfs:domain :Work ; - sdo:rangeIncludes :InstanceCategory ; - owl:propertyChainAxiom ( :hasInstance :category ) . - ls:originalLanguage a owl:ObjectProperty ; rdfs:label "originalspråk"@sv, "original language"@en ; rdfs:comment "Språk som resursen översatts från."@sv, "Language that resource was translated from."@en; @@ -185,29 +177,32 @@ ls:originalLanguage a owl:ObjectProperty ; ls:indexKey a :DatatypeProperty ; :category :pending . -ls:findCategory a :ObjectProperty ; - :category :pending ; - rdfs:subPropertyOf :category ; +ls:workCategory a owl:ObjectProperty ; + :category :impliedByObject, :pending ; + rdfs:label "kategori"@sv, "category"@en ; rdfs:domain :Work ; + rdfs:range :WorkCategory ; + ls:indexKey "_categoryByCollection.@none" . + +ls:instanceCategory a owl:ObjectProperty ; + :category :impliedByObject, :pending ; + rdfs:label "format"@sv, "format"@en ; + rdfs:domain :Instance ; + rdfs:range :InstanceCategory ; + ls:indexKey "_categoryByCollection.@none" . + +ls:findCategory a :ObjectProperty ; + :category :pending, ls:coercing ; + rdfs:subPropertyOf ls:workCategory ; rdfs:range [ rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :inCollection ; owl:hasValue ] ] ; - sdo:rangeIncludes :WorkCategory ; ls:indexKey "_categoryByCollection.find" . ls:identifyCategory a :ObjectProperty ; - :category :pending ; - rdfs:subPropertyOf :category ; - rdfs:domain :Work ; + :category :pending, ls:coercing ; + rdfs:subPropertyOf ls:workCategory ; rdfs:range [ rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :inCollection ; owl:hasValue ] ] ; - sdo:rangeIncludes :WorkCategory ; ls:indexKey "_categoryByCollection.identify" . -ls:noneCategory a :ObjectProperty ; - :category :pending ; - rdfs:subPropertyOf :category ; - rdfs:domain :Work ; - sdo:rangeIncludes :WorkCategory ; - ls:indexKey "_categoryByCollection.@none" . - ls:title a owl:ObjectProperty ; :category :searchfilter, ls:composite, :pending ; rdfs:label "titel"@sv, "title"@en ; From f236ead058b9f50a3126dd729d5ff96e2325f5d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= Date: Tue, 24 Mar 2026 16:08:44 +0100 Subject: [PATCH 2/7] Remodel instance vs work type search terms --- source/apps.jsonld | 26 ++++++++++----------- source/vocab/libris-search-experimental.ttl | 16 ++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/source/apps.jsonld b/source/apps.jsonld index dc34b88a..7ddf0e71 100644 --- a/source/apps.jsonld +++ b/source/apps.jsonld @@ -79,7 +79,8 @@ "titleByLang": {"sv": "Libris sök", "en": "Libris Search"}, "statistics": { "sliceList": [ - { "dimensionChain": ["hasInstanceType"], "itemLimit": 100 }, + { "dimensionChain": ["rdf:type"], "itemLimit": 100 }, + { "dimensionChain": ["instanceType"], "itemLimit": 100 }, { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, @@ -91,8 +92,7 @@ { "dimensionChain": ["contributor"], "itemLimit": 20 }, { "dimensionChain": ["subject"], "itemLimit": 100 }, { "dimensionChain": ["bibliography"], "itemLimit": 200 }, - { "dimensionChain": ["rdf:type"], "itemLimit": 100 }, - { "dimensionChain": ["instanceOfType"], "itemLimit": 100 }, + { "dimensionChain": ["workType"], "itemLimit": 100 }, { "dimensionChain": ["nationality"], "itemLimit": 100 }, { "dimensionChain": ["hasOccupation"], "itemLimit": 100 }, { "dimensionChain": ["fieldOfActivity"], "itemLimit": 100 } @@ -104,8 +104,8 @@ { "alias": "excludePreliminary", "filter": "NOT encodingLevel:(\"marc:PartialPreliminaryLevel\" OR \"marc:PrepublicationLevel\")", "prefLabelByLang": { "sv": "Exkludera kommande publiceringar", "en": "Exclude upcoming publications" } }, { "alias": "includePreliminary", "filter": "NOT excludePreliminary", "prefLabelByLang": { "sv": "Inkludera kommande publiceringar", "en": "Include upcoming publications" } }, { "alias": "existsImage", "filter": "image:*", "prefLabelByLang": { "sv": "Har omslags-/miniatyrbild", "en": "Has cover/thumbnail" } }, - { "alias": "freeOnline", "filter": "hasInstanceType:DigitalResource AND (usageAndAccessPolicy.label:gratis OR \"associatedMedia.marc:publicNote\":\"fritt tillgänglig\" OR usageAndAccessPolicy:(\"https://id.kb.se/policy/freely-available\" OR \"https://id.kb.se/policy/oa/gratis\"))", "prefLabelByLang": { "sv": "Fritt online", "en": "Free online material" } }, - { "alias": "_suecia", "filter": "(bibliography:\"sigel:SAHF\" OR bibliography:\"sigel:SAHT\" OR bibliography:\"sigel:SAH\") hasInstanceType:DigitalResource", "prefLabelByLang": { "sv": "Suecia", "en": "Suecia" } } + { "alias": "freeOnline", "filter": "instanceType:DigitalResource AND (usageAndAccessPolicy.label:gratis OR \"associatedMedia.marc:publicNote\":\"fritt tillgänglig\" OR usageAndAccessPolicy:(\"https://id.kb.se/policy/freely-available\" OR \"https://id.kb.se/policy/oa/gratis\"))", "prefLabelByLang": { "sv": "Fritt online", "en": "Free online material" } }, + { "alias": "_suecia", "filter": "(bibliography:\"sigel:SAHF\" OR bibliography:\"sigel:SAHT\" OR bibliography:\"sigel:SAH\") instanceType:DigitalResource", "prefLabelByLang": { "sv": "Suecia", "en": "Suecia" } } ], "defaultSiteFilters": [ { "filter": "\"rdf:type\":Work" }, @@ -164,12 +164,12 @@ { "dimensionChain": ["yearPublished"], "itemLimit": 500, "range": true }, { "dimensionChain": ["bibliography"], "itemLimit": 200 }, { "dimensionChain": ["rdf:type"], "itemLimit": 100 }, - { "dimensionChain": ["instanceOfType"], "itemLimit": 100 } + { "dimensionChain": ["workType"], "itemLimit": 100 } ] }, "filterAliases": [ { "alias": "existsImage", "filter": "image:*", "prefLabelByLang": { "sv": "Har omslags-/miniatyrbild", "en": "Has cover/thumbnail" } }, - { "alias": "_suecia", "filter": "(bibliography:\"sigel:SAHF\" OR bibliography:\"sigel:SAHT\" OR bibliography:\"sigel:SAH\") hasInstanceType:DigitalResource", "prefLabelByLang": { "sv": "Suecia", "en": "Suecia" } } + { "alias": "_suecia", "filter": "(bibliography:\"sigel:SAHF\" OR bibliography:\"sigel:SAHT\" OR bibliography:\"sigel:SAH\") instanceType:DigitalResource", "prefLabelByLang": { "sv": "Suecia", "en": "Suecia" } } ], "defaultSiteFilters": [ { "filter": "\"rdf:type\":Work" }, @@ -211,7 +211,7 @@ "titleByLang": {"sv": "ArkDes sök", "en": "ArkDes Search"}, "statistics": { "sliceList": [ - { "dimensionChain": ["hasInstanceType"], "itemLimit": 100 }, + { "dimensionChain": ["instanceType"], "itemLimit": 100 }, { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, @@ -225,7 +225,7 @@ { "dimensionChain": ["subject"], "itemLimit": 100 }, { "dimensionChain": ["bibliography"], "itemLimit": 200 }, { "dimensionChain": ["rdf:type"], "itemLimit": 100 }, - { "dimensionChain": ["instanceOfType"], "itemLimit": 100 }, + { "dimensionChain": ["workType"], "itemLimit": 100 }, { "dimensionChain": ["intendedAudience"], "itemLimit": 100 }, { "dimensionChain": ["nationality"], "itemLimit": 100 }, { "dimensionChain": ["hasOccupation"], "itemLimit": 100 }, @@ -238,7 +238,7 @@ { "alias": "excludePreliminary", "filter": "NOT encodingLevel:(\"marc:PartialPreliminaryLevel\" OR \"marc:PrepublicationLevel\")", "prefLabelByLang": { "sv": "Exkludera kommande publiceringar", "en": "Exclude upcoming publications" } }, { "alias": "includePreliminary", "filter": "NOT excludePreliminary", "prefLabelByLang": { "sv": "Inkludera kommande publiceringar", "en": "Include upcoming publications" } }, { "alias": "existsImage", "filter": "image:*", "prefLabelByLang": { "sv": "Har omslags-/miniatyrbild", "en": "Has cover/thumbnail" } }, - { "alias": "freeOnline", "filter": "hasInstanceType:DigitalResource AND (usageAndAccessPolicy.label:gratis OR \"associatedMedia.marc:publicNote\":\"fritt tillgänglig\" OR usageAndAccessPolicy:(\"https://id.kb.se/policy/freely-available\" OR \"https://id.kb.se/policy/oa/gratis\"))", "prefLabelByLang": { "sv": "Fritt online", "en": "Free online material" } } + { "alias": "freeOnline", "filter": "instanceType:DigitalResource AND (usageAndAccessPolicy.label:gratis OR \"associatedMedia.marc:publicNote\":\"fritt tillgänglig\" OR usageAndAccessPolicy:(\"https://id.kb.se/policy/freely-available\" OR \"https://id.kb.se/policy/oa/gratis\"))", "prefLabelByLang": { "sv": "Fritt online", "en": "Free online material" } } ], "defaultSiteFilters": [ { "filter": "\"rdf:type\":Work" }, @@ -285,7 +285,7 @@ "titleByLang": {"sv": "Swepub sök", "en": "Swepub Search"}, "statistics": { "sliceList": [ - { "dimensionChain": ["hasInstanceType"], "itemLimit": 100 }, + { "dimensionChain": ["instanceType"], "itemLimit": 100 }, { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, @@ -299,7 +299,7 @@ { "dimensionChain": ["subject"], "itemLimit": 100 }, { "dimensionChain": ["bibliography"], "itemLimit": 200 }, { "dimensionChain": ["rdf:type"], "itemLimit": 100 }, - { "dimensionChain": ["instanceOfType"], "itemLimit": 100 }, + { "dimensionChain": ["workType"], "itemLimit": 100 }, { "dimensionChain": ["intendedAudience"], "itemLimit": 100 }, { "dimensionChain": ["nationality"], "itemLimit": 100 }, { "dimensionChain": ["hasOccupation"], "itemLimit": 100 }, @@ -312,7 +312,7 @@ { "alias": "excludePreliminary", "filter": "NOT encodingLevel:(\"marc:PartialPreliminaryLevel\" OR \"marc:PrepublicationLevel\")", "prefLabelByLang": { "sv": "Exkludera kommande publiceringar", "en": "Exclude upcoming publications" } }, { "alias": "includePreliminary", "filter": "NOT excludePreliminary", "prefLabelByLang": { "sv": "Inkludera kommande publiceringar", "en": "Include upcoming publications" } }, { "alias": "existsImage", "filter": "image:*", "prefLabelByLang": { "sv": "Har omslags-/miniatyrbild", "en": "Has cover/thumbnail" } }, - { "alias": "freeOnline", "filter": "hasInstanceType:DigitalResource AND (usageAndAccessPolicy.label:gratis OR \"associatedMedia.marc:publicNote\":\"fritt tillgänglig\" OR usageAndAccessPolicy:(\"https://id.kb.se/policy/freely-available\" OR \"https://id.kb.se/policy/oa/gratis\"))", "prefLabelByLang": { "sv": "Fritt online", "en": "Free online material" } } + { "alias": "freeOnline", "filter": "instanceType:DigitalResource AND (usageAndAccessPolicy.label:gratis OR \"associatedMedia.marc:publicNote\":\"fritt tillgänglig\" OR usageAndAccessPolicy:(\"https://id.kb.se/policy/freely-available\" OR \"https://id.kb.se/policy/oa/gratis\"))", "prefLabelByLang": { "sv": "Fritt online", "en": "Free online material" } } ], "defaultSiteFilters": [ { "filter": "\"rdf:type\":Work" }, diff --git a/source/vocab/libris-search-experimental.ttl b/source/vocab/libris-search-experimental.ttl index 7eecb0aa..72a16de1 100644 --- a/source/vocab/libris-search-experimental.ttl +++ b/source/vocab/libris-search-experimental.ttl @@ -152,15 +152,15 @@ ls:itemHeldByOrg a owl:ObjectProperty ; sdo:rangeIncludes bibdb:Organization ; owl:propertyChainAxiom ( :hasItem :heldBy :isPartOf ) . -ls:instanceOfType a owl:ObjectProperty ; - :category :shorthand, :impliedByObject, :pending ; - rdfs:domain :Instance ; - owl:propertyChainAxiom ( :instanceOf rdf:type ) . - -ls:hasInstanceType a owl:ObjectProperty ; - :category :shorthand, :impliedByObject, :pending ; +ls:workType a owl:ObjectProperty ; + :category :impliedByObject, :pending ; rdfs:domain :Work ; - owl:propertyChainAxiom ( :hasInstance rdf:type ) . + ls:indexKey "@type" . + +ls:instanceType a owl:ObjectProperty ; + :category :impliedByObject, :pending ; + rdfs:domain :Instance ; + ls:indexKey "@type" . ls:originalLanguage a owl:ObjectProperty ; rdfs:label "originalspråk"@sv, "original language"@en ; From 0015b5c76de9382318d9247cb4284fe1e38bf890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= Date: Tue, 31 Mar 2026 11:07:04 +0200 Subject: [PATCH 3/7] Add missing prefixes --- source/vocab/libris-search-experimental.ttl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/vocab/libris-search-experimental.ttl b/source/vocab/libris-search-experimental.ttl index 72a16de1..fd6335ec 100644 --- a/source/vocab/libris-search-experimental.ttl +++ b/source/vocab/libris-search-experimental.ttl @@ -174,7 +174,7 @@ ls:originalLanguage a owl:ObjectProperty ; rdfs:range :Language ; owl:propertyChainAxiom ( :translationOf :language ) . -ls:indexKey a :DatatypeProperty ; +ls:indexKey a owl:DatatypeProperty ; :category :pending . ls:workCategory a owl:ObjectProperty ; @@ -191,13 +191,13 @@ ls:instanceCategory a owl:ObjectProperty ; rdfs:range :InstanceCategory ; ls:indexKey "_categoryByCollection.@none" . -ls:findCategory a :ObjectProperty ; +ls:findCategory a owl:ObjectProperty ; :category :pending, ls:coercing ; rdfs:subPropertyOf ls:workCategory ; rdfs:range [ rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :inCollection ; owl:hasValue ] ] ; ls:indexKey "_categoryByCollection.find" . -ls:identifyCategory a :ObjectProperty ; +ls:identifyCategory a owl:ObjectProperty ; :category :pending, ls:coercing ; rdfs:subPropertyOf ls:workCategory ; rdfs:range [ rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :inCollection ; owl:hasValue ] ] ; From e00f6730537532be3b97c9aedaff70ddf48c48bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= Date: Thu, 16 Apr 2026 18:24:02 +0200 Subject: [PATCH 4/7] Reintroduce noneCategory and make workCategory composite --- source/apps.jsonld | 10 +++++----- source/vocab/libris-search-experimental.ttl | 13 ++++++++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/source/apps.jsonld b/source/apps.jsonld index 7ddf0e71..48ff8abb 100644 --- a/source/apps.jsonld +++ b/source/apps.jsonld @@ -84,7 +84,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, @@ -122,7 +122,7 @@ ], "relationFilters": [ { "objectType": "Agent", "predicates": [ "contributor", "subject", "publisher" ] }, - { "objectType": "Concept", "predicates": [ "subject", "genreForm", "category", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, + { "objectType": "Concept", "predicates": [ "subject", "genreForm", "category", "fieldOfActivity", "termComponentList" ] }, { "objectType": "Work", "predicates": [ "subject", "isPartOf" ] }, { "objectType": "Instance", "predicates": [ "subject", "isPartOf" ] } ] @@ -156,7 +156,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["contributor"], "itemLimit": 20 }, @@ -215,7 +215,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, @@ -289,7 +289,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["workCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, diff --git a/source/vocab/libris-search-experimental.ttl b/source/vocab/libris-search-experimental.ttl index fd6335ec..c943f251 100644 --- a/source/vocab/libris-search-experimental.ttl +++ b/source/vocab/libris-search-experimental.ttl @@ -178,11 +178,10 @@ ls:indexKey a owl:DatatypeProperty ; :category :pending . ls:workCategory a owl:ObjectProperty ; - :category :impliedByObject, :pending ; + :category :impliedByObject, :pending, ls:composite ; rdfs:label "kategori"@sv, "category"@en ; rdfs:domain :Work ; - rdfs:range :WorkCategory ; - ls:indexKey "_categoryByCollection.@none" . + rdfs:range :WorkCategory . ls:instanceCategory a owl:ObjectProperty ; :category :impliedByObject, :pending ; @@ -203,6 +202,14 @@ ls:identifyCategory a owl:ObjectProperty ; rdfs:range [ rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :inCollection ; owl:hasValue ] ] ; ls:indexKey "_categoryByCollection.identify" . +ls:noneCategory a :ObjectProperty ; + :category :pending, ls:coercing ; + rdfs:subPropertyOf ls:workCategory ; + rdfs:range [ rdfs:subClassOf [ a owl:Restriction; + owl:onProperty :inCollection; + owl:allValuesFrom [ owl:complementOf [ owl:oneOf ( ) ] ] ] ] ; + ls:indexKey "_categoryByCollection.@none" . + ls:title a owl:ObjectProperty ; :category :searchfilter, ls:composite, :pending ; rdfs:label "titel"@sv, "title"@en ; From 77061eb887fe7f3031c311e5d46141515f766fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= Date: Thu, 16 Apr 2026 18:29:09 +0200 Subject: [PATCH 5/7] Show workCategory and instanceCategory as separate relations --- source/apps.jsonld | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/apps.jsonld b/source/apps.jsonld index 48ff8abb..f5ace8f1 100644 --- a/source/apps.jsonld +++ b/source/apps.jsonld @@ -122,7 +122,7 @@ ], "relationFilters": [ { "objectType": "Agent", "predicates": [ "contributor", "subject", "publisher" ] }, - { "objectType": "Concept", "predicates": [ "subject", "genreForm", "category", "fieldOfActivity", "termComponentList" ] }, + { "objectType": "Concept", "predicates": [ "subject", "genreForm", "workCategory", "instanceCategory", "fieldOfActivity", "termComponentList" ] }, { "objectType": "Work", "predicates": [ "subject", "isPartOf" ] }, { "objectType": "Instance", "predicates": [ "subject", "isPartOf" ] } ] @@ -180,7 +180,7 @@ ], "relationFilters": [ { "objectType": "Agent", "predicates": [ "contributor", "subject", "publisher" ] }, - { "objectType": "Concept", "predicates": [ "subject", "genreForm", "category", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, + { "objectType": "Concept", "predicates": [ "subject", "genreForm", "workCategory", "instanceCategory", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, { "objectType": "Work", "predicates": [ "subject", "isPartOf" ] }, { "objectType": "Instance", "predicates": [ "subject", "isPartOf" ] } ] @@ -254,7 +254,7 @@ ], "relationFilters": [ { "objectType": "Agent", "predicates": [ "contributor", "subject", "publisher" ] }, - { "objectType": "Concept", "predicates": [ "subject", "genreForm", "category", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, + { "objectType": "Concept", "predicates": [ "subject", "genreForm", "workCategory", "instanceCategory", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, { "objectType": "Work", "predicates": [ "subject", "isPartOf" ] }, { "objectType": "Instance", "predicates": [ "subject", "isPartOf" ] } ] @@ -326,7 +326,7 @@ ], "relationFilters": [ { "objectType": "Agent", "predicates": [ "contributor", "subject", "publisher" ] }, - { "objectType": "Concept", "predicates": [ "subject", "genreForm", "category", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, + { "objectType": "Concept", "predicates": [ "subject", "genreForm", "workCategory", "instanceCategory", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, { "objectType": "Work", "predicates": [ "subject", "isPartOf" ] }, { "objectType": "Instance", "predicates": [ "subject", "isPartOf" ] } ] From 13c80ace5a322635110e6ff12734ef753e513931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= Date: Fri, 17 Apr 2026 08:33:11 +0200 Subject: [PATCH 6/7] Change showIf from category to workCategory --- source/apps.jsonld | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/apps.jsonld b/source/apps.jsonld index f5ace8f1..1d184c87 100644 --- a/source/apps.jsonld +++ b/source/apps.jsonld @@ -84,7 +84,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["workCategory"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, @@ -156,7 +156,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["workCategory"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["contributor"], "itemLimit": 20 }, @@ -215,7 +215,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["workCategory"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, @@ -289,7 +289,7 @@ { "dimensionChain": ["findCategory"], "itemLimit": 20, "slice": { "dimensionChain": ["identifyCategory"], "itemLimit": 50 } }, - { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["category"] }, + { "dimensionChain": ["noneCategory"], "itemLimit": 100, "connective": "OR", "showIf": ["workCategory"] }, { "dimensionChain": ["instanceCategory"], "itemLimit": 100 }, { "dimensionChain": ["language"], "itemLimit": 100, "connective": "OR" }, { "dimensionChain": ["itemHeldByOrg"], "itemLimit": 1000, "connective": "OR", "countTopLevelDocs": true }, From 3c2c1f4fb0aaf8b295816d441f276bc4e8f7eb57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olov=20Ylinenp=C3=A4=C3=A4?= <51744858+olovy@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:50:30 +0200 Subject: [PATCH 7/7] Apply suggestion from @olovy --- source/apps.jsonld | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/apps.jsonld b/source/apps.jsonld index 1d184c87..338e1b97 100644 --- a/source/apps.jsonld +++ b/source/apps.jsonld @@ -122,7 +122,7 @@ ], "relationFilters": [ { "objectType": "Agent", "predicates": [ "contributor", "subject", "publisher" ] }, - { "objectType": "Concept", "predicates": [ "subject", "genreForm", "workCategory", "instanceCategory", "fieldOfActivity", "termComponentList" ] }, + { "objectType": "Concept", "predicates": [ "subject", "genreForm", "workCategory", "instanceCategory", "hasOccupation", "fieldOfActivity", "termComponentList" ] }, { "objectType": "Work", "predicates": [ "subject", "isPartOf" ] }, { "objectType": "Instance", "predicates": [ "subject", "isPartOf" ] } ]