ochre-sdk 0.22.3 → 0.22.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +28 -25
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -2379,6 +2379,12 @@ function buildPropertyQueryExpression(params) {
2379
2379
  if (propertyVariable != null) propertyQueryExpressions.unshift(buildPropertyLabelQuery(propertyVariable));
2380
2380
  return buildNestedElementQuery(["properties", "property"], buildAndCtsQueryExpressionInternal(propertyQueryExpressions));
2381
2381
  }
2382
+ function buildPropertyPresenceQueryExpression(params) {
2383
+ return buildPropertyQueryExpression({
2384
+ propertyVariable: params.propertyVariable,
2385
+ queryExpression: "cts:true-query()"
2386
+ });
2387
+ }
2382
2388
  function buildPropertyStringQueryExpression(params) {
2383
2389
  const { propertyVariable, value, matchMode, isCaseSensitive, language } = params;
2384
2390
  return buildPropertyQueryExpression({
@@ -2408,7 +2414,7 @@ function buildPropertyScalarQueryExpression(params) {
2408
2414
  }
2409
2415
  function buildPropertyAllQueryExpression(params) {
2410
2416
  const { query, value, matchMode } = params;
2411
- if (matchMode === "exact") return buildPropertyQueryExpression({
2417
+ return buildPropertyQueryExpression({
2412
2418
  propertyVariable: query.propertyVariable,
2413
2419
  queryExpression: buildNestedElementQuery(["value"], buildAndCtsQueryExpressionInternal([buildValueNotIdRefQuery(), buildCtsWordQueryExpression({
2414
2420
  value,
@@ -2416,27 +2422,6 @@ function buildPropertyAllQueryExpression(params) {
2416
2422
  isCaseSensitive: query.isCaseSensitive
2417
2423
  })]))
2418
2424
  });
2419
- return buildPropertyQueryExpression({
2420
- propertyVariable: query.propertyVariable,
2421
- queryExpression: buildNestedElementQuery(["value"], buildAndCtsQueryExpressionInternal([buildValueNotIdRefQuery(), buildOrCtsQueryExpressionInternal([
2422
- buildValueRawValueInnerQuery({
2423
- value,
2424
- matchMode,
2425
- isCaseSensitive: query.isCaseSensitive
2426
- }),
2427
- buildValueDirectTextInnerQuery({
2428
- value,
2429
- matchMode,
2430
- isCaseSensitive: query.isCaseSensitive
2431
- }),
2432
- buildValueContentInnerQuery({
2433
- language: query.language,
2434
- value,
2435
- matchMode,
2436
- isCaseSensitive: query.isCaseSensitive
2437
- })
2438
- ])]))
2439
- });
2440
2425
  }
2441
2426
  function buildPropertyIdRefQueryExpression(params) {
2442
2427
  const { propertyVariable, value } = params;
@@ -2451,8 +2436,8 @@ function buildPropertyIdRefQueryExpression(params) {
2451
2436
  }
2452
2437
  function buildPropertyDateRangeQueryExpression(query) {
2453
2438
  const rangeQueryExpressions = [];
2454
- if (query.from != null) rangeQueryExpressions.push(`cts:element-attribute-range-query(xs:QName("value"), xs:QName("rawValue"), ">=", xs:${query.dataType}(${stringLiteral(query.from)}))`);
2455
- if (query.to != null) rangeQueryExpressions.push(`cts:element-attribute-range-query(xs:QName("value"), xs:QName("rawValue"), "<=", xs:${query.dataType}(${stringLiteral(query.to)}))`);
2439
+ if (query.from != null) rangeQueryExpressions.push(`cts:element-attribute-range-query(xs:QName("value"), xs:QName("rawValue"), ">=", ${stringLiteral(query.from)})`);
2440
+ if (query.to != null) rangeQueryExpressions.push(`cts:element-attribute-range-query(xs:QName("value"), xs:QName("rawValue"), "<=", ${stringLiteral(query.to)})`);
2456
2441
  return buildPropertyQueryExpression({
2457
2442
  propertyVariable: query.propertyVariable,
2458
2443
  queryExpression: buildNestedElementQuery(["value"], buildAndCtsQueryExpressionInternal(rangeQueryExpressions))
@@ -2543,6 +2528,7 @@ function buildLeafValueQueryExpression(params) {
2543
2528
  }
2544
2529
  }
2545
2530
  function buildLeafQueryExpression(query) {
2531
+ if (query.target === "property" && query.dataType !== "date" && query.dataType !== "dateTime" && !("value" in query) && query.propertyVariable != null) return buildPropertyPresenceQueryExpression({ propertyVariable: query.propertyVariable });
2546
2532
  if (query.target === "property" && (query.dataType === "date" || query.dataType === "dateTime") && query.value == null) return buildPropertyDateRangeQueryExpression(query);
2547
2533
  const searchValue = getLeafSearchValue(query);
2548
2534
  if (searchValue == null) throw new Error("Missing searchable value for query leaf");
@@ -2959,6 +2945,23 @@ function getPropertyVariableUuidsFromQueries(queries) {
2959
2945
  }
2960
2946
  return [...propertyVariableUuids];
2961
2947
  }
2948
+ function getItemFilterQueriesFromPropertyValueQueries(queries) {
2949
+ if (queries == null) return null;
2950
+ if ("target" in queries) {
2951
+ if (queries.target !== "property") return queries;
2952
+ if (queries.dataType === "date" || queries.dataType === "dateTime") return queries;
2953
+ return "value" in queries && queries.value != null ? queries : null;
2954
+ }
2955
+ const filteredChildren = [];
2956
+ const childQueries = "and" in queries ? queries.and : queries.or;
2957
+ for (const childQuery of childQueries) {
2958
+ const filteredChildQuery = getItemFilterQueriesFromPropertyValueQueries(childQuery);
2959
+ if (filteredChildQuery != null) filteredChildren.push(filteredChildQuery);
2960
+ }
2961
+ if (filteredChildren.length === 0) return null;
2962
+ if (filteredChildren.length === 1) return filteredChildren[0] ?? null;
2963
+ return "and" in queries ? { and: filteredChildren } : { or: filteredChildren };
2964
+ }
2962
2965
  /**
2963
2966
  * Schema for a single property value query item in the OCHRE API response
2964
2967
  */
@@ -3040,7 +3043,7 @@ function buildXQuery(params) {
3040
3043
  if (setScopeUuids.length > 0) setScopeFilter = `/set[(${setScopeUuids.map((uuid) => `@uuid="${uuid}"`).join(" or ")})]/items/*`;
3041
3044
  const propertyVariableFilters = getPropertyVariableUuidsFromQueries(queries).map((uuid) => `@uuid="${uuid}"`).join(" or ");
3042
3045
  const baseItemsExpression = `doc()/ochre${setScopeFilter}`;
3043
- const compiledQueryPlan = buildQueryPlan({ queries });
3046
+ const compiledQueryPlan = buildQueryPlan({ queries: getItemFilterQueriesFromPropertyValueQueries(queries) });
3044
3047
  const itemsQueryExpressions = [];
3045
3048
  const belongsToCollectionQueryExpression = buildBelongsToCollectionQueryExpression(belongsToCollectionScopeUuids, BELONGS_TO_COLLECTION_UUID);
3046
3049
  if (compiledQueryPlan.queryExpression != null) itemsQueryExpressions.push(compiledQueryPlan.queryExpression);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ochre-sdk",
3
- "version": "0.22.3",
3
+ "version": "0.22.4",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Node.js library for working with OCHRE (Online Cultural and Historical Research Environment) data",