Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
7e9ef14
new geospatial block
lubitchv May 21, 2025
e17a01b
remove block
lubitchv May 21, 2025
f85e079
expanded geospatial block
lubitchv May 28, 2025
81e7459
geospatial properties
lubitchv May 28, 2025
9b343cd
geospatial properties fix
lubitchv May 28, 2025
e724514
geospatial properties fix
lubitchv May 28, 2025
ab6d9a1
geospatial.tsv
lubitchv May 28, 2025
93f5551
updated schema
lubitchv May 28, 2025
96be722
fix geospatial.tsv
lubitchv May 28, 2025
fd7072c
geo false on creation
lubitchv Jun 5, 2025
9640193
geo fix
lubitchv Jun 5, 2025
ea4327f
int test naumber of fields
lubitchv Jun 6, 2025
3d4c125
upgrade snippet
lubitchv Jun 6, 2025
8b11565
Merge branch '10398-geospatial-block' into develop_geo
lubitchv Sep 4, 2025
b102ebd
Merge pull request #73 from lubitchv/develop_geo
lubitchv Sep 4, 2025
41ba53b
Remove empy line
lubitchv Sep 4, 2025
11fb9f6
Updated geoblock
lubitchv Sep 4, 2025
d8920e1
integration tests
lubitchv Sep 5, 2025
f8d0614
Merge branch 'IQSS:develop' into 10398-geospatial-block
lubitchv Oct 15, 2025
2302973
change to reolution
lubitchv Oct 15, 2025
92af478
update geo block
lubitchv Oct 23, 2025
0f34ee0
Merge branch 'develop' into 10398-geospatial-block
qqmyers Oct 24, 2025
1643e76
Merge branch 'IQSS:develop' into 10398-geospatial-block
lubitchv Dec 4, 2025
a0eb3d5
geospatial.tsv
lubitchv Jan 22, 2026
b79d38b
Merge branch 'IQSS:develop' into 10398-geospatial-block
lubitchv Jan 29, 2026
daae81a
removed quotes
lubitchv Jan 29, 2026
66ea07f
Merge branch 'develop' into 10398-geospatial-block
lubitchv Mar 23, 2026
16a7096
Remove two fake fields
lubitchv May 13, 2026
63e520b
Merge branch 'IQSS:develop' into 10398-geospatial-block
lubitchv May 26, 2026
47cbce0
Integration testing
lubitchv May 26, 2026
a1de833
solr remove header fields
lubitchv May 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions conf/solr/schema.xml

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions doc/release-notes/10398-geospatial-block.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
### Update geospatial metadata block in existing installation (PR #11507)

.. code-block:: javascript

curl http://localhost:8080/api/admin/datasetfield/load -H "Content-type: text/tab-separated-values" -X POST --upload-file geospatial.tsv
curl "http://localhost:8080/api/admin/index/solr/schema" > new.xml
./dataverse/conf/solr/update-fields.sh /usr/local/solr/solr-9.8.0/server/solr/collection1/conf/schema.xml new.xml
curl "http://localhost:8983/solr/admin/cores?action=RELOAD&core=collection1"
597 changes: 333 additions & 264 deletions scripts/api/data/metadatablocks/geospatial.tsv

Large diffs are not rendered by default.

128 changes: 128 additions & 0 deletions src/main/java/propertyFiles/geospatial.properties
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,90 @@ datasetfieldtype.westLongitude.watermark=
datasetfieldtype.eastLongitude.watermark=
datasetfieldtype.northLatitude.watermark=
datasetfieldtype.southLatitude.watermark=
datasetfieldtype.resourceType.title=Type of Geospatial Data Resource
datasetfieldtype.resourceType.description=The type of geospatial data resource (dataset, service, or series) that is described in this metadata record.
datasetfieldtype.resourceType.watermark=
datasetfieldtype.referenceDate.title=Resource Reference Date
datasetfieldtype.referenceDate.description=A date which is used to help identify the resource (ISO 19115-3)
datasetfieldtype.referenceDate.watermark=
datasetfieldtype.referenceDateValue.title=Date
datasetfieldtype.referenceDateValue.description=Other date as expressed in yyyy-mm-dd
datasetfieldtype.referenceDateValue.watermark=
datasetfieldtype.referenceDateType.title=Type
datasetfieldtype.referenceDateType.description=The type of date represented in the Date field.
datasetfieldtype.referenceDateType.watermark=revision, expiry, lastUpdate, lastRevision, nextUpdate, unavailable, inForce, adopted, deprecated, superseded, publication
datasetfieldtype.dataLineageStatement.title=Data Lineage Statement
datasetfieldtype.dataLineageStatement.description=General explanation of the data producer's knowledge of the dataset lineage.
datasetfieldtype.dataLineageStatement.watermark=
datasetfieldtype.processStep.title=Data Lineage Process Step Description
datasetfieldtype.processStep.description=Description of the processes performed on the data, as part of the dataset's lineage or processing history.
datasetfieldtype.processStep.watermark=
datasetfieldtype.referenceSystemInfo.title=Reference System Information
datasetfieldtype.referenceSystemInfo.description=Description of the spatial and temporal reference systems used in the resource.
datasetfieldtype.referenceSystemInfo.watermark=
datasetfieldtype.referenceSystemCode.title=Reference System Code
datasetfieldtype.referenceSystemCode.description=An alphanumeric identifier for the reference system for this data resource. The reference system provides a framework to define how the bounding box coordinates map to real-world locations.
datasetfieldtype.referenceSystemCode.watermark=
datasetfieldtype.referenceSystemCodeSpace.title=Reference System Code Space
datasetfieldtype.referenceSystemCodeSpace.description=Identifier/ namespace of the system in which the reference system code is valid. E.g. "EPSG"
datasetfieldtype.referenceSystemCodeSpace.watermark=EPSG, WGS, etc.
datasetfieldtype.spatialResolution.title=Spatial Resolution
datasetfieldtype.spatialResolution.description=The spatial resolution provides a general understanding of the density of spatial data in the resource, or describes the range of resolutions in which a digital resource may be used. Spatial resolution can be expressed as an equivalent scale (the scale of a comparable hardcopy map or chart), distance (horizontal ground sampling distance), vertical (vertical sampling distance), angularDistance (angular sampling distance), or level of detail (brief textual description of the spatial resolution of the resource). For more information please refer to ISO 19115-1:2014(E), Table B.3.4. NOTE: This element should be repeated when describing upper and lower range.
datasetfieldtype.spatialResolution.watermark=
datasetfieldtype.spatialResolutionValue.title=Value
datasetfieldtype.spatialResolutionValue.description=The resource's spatial resolution, expressed as an equivalent scale, a distance, an angle, or a brief textual description.
datasetfieldtype.spatialResolutionValue.watermark=
datasetfieldtype.spatialResolutionType.title=Type
datasetfieldtype.spatialResolutionType.description=Format in which the spatial resolution value is expressed (distance, vertical, angularDistance, levelOfDetail).
datasetfieldtype.spatialResolutionType.watermark=distance, vertical, angularDistance, levelOfDetail
datasetfieldtype.spatialRepresentationType.title=Spatial Representation Type
datasetfieldtype.spatialRepresentationType.description=The type of spatial representation refers to the method or structure format that was used to represent geographic information (spatial data) in this dataset. Spatial representation can be as vector, raster (or grid), textTable (textual or tabular data), tin (triangulated irregular network), stereoModel (a 3-D view formed by intersecting homologous rays of an overlapping pair of images), or video (scene from a video recording). For more information about these types please refer to ISO 10115-1:2014(E), Tables B.3.29 and B.7.
datasetfieldtype.spatialRepresentationType.watermark=
datasetfieldtype.spatialResolutionUnitOfMeasure.title=Spatial Resolution Unit of Measure
datasetfieldtype.spatialResolutionUnitOfMeasure.description=If the spatial resolution value is expressed as a distance, the unit of measure that corresponds to that value (e.g. 'cm', 'm', 'km', etc.)
datasetfieldtype.spatialResolutionUnitOfMeasure.watermark='cm', 'm', 'km', etc.
datasetfieldtype.distribution.title=Distribution Link
datasetfieldtype.distribution.description=Distribution links are URLs that can be used to acess the dataset (e.g. via a geospatial web service).
datasetfieldtype.distribution.watermark=
datasetfieldtype.distributionLinkLabel.title=Label
datasetfieldtype.distributionLinkLabel.description=A descriptive label for the distribution link.
datasetfieldtype.distributionLinkLabel.watermark=
datasetfieldtype.distributionLink.title=URL
datasetfieldtype.distributionLink.description=The distribution link is a URL that can be used to access the dataset (e.g. via a geospatial web service)
datasetfieldtype.distributionLink.watermark=
datasetfieldtype.protocol.title=Protocol
datasetfieldtype.protocol.description=The service or transfer protocol associated with the distribution link URL (e.g. HTTPS, or FTP)
datasetfieldtype.protocol.watermark=HTTPS, FTP, HTTP, REST, etc.
datasetfieldtype.vectorSpatialRepresentation.title=Vector Spatial Representation
datasetfieldtype.vectorSpatialRepresentation.description=Information about vector spatial objects in the resource.
datasetfieldtype.vectorSpatialRepresentation.watermark=
datasetfieldtype.geometricObjectCount.title=Vector Object Count
datasetfieldtype.geometricObjectCount.description=Vector data only: Total number of geometric objects (curve, composite, complex, point, solid, or surface) in the dataset.
datasetfieldtype.geometricObjectCount.watermark=
datasetfieldtype.geometricObjectType.title=Vector Object Type
datasetfieldtype.geometricObjectType.description=Vector data only: The type of geometric objects (or shapes) that make up the structure of the vector dataset. Geometric objects can be used to locate zero, one, two or three dimensional locations on the dataset. Geometric object types can be curve (a bounded, 1-dimensional geometric primitive, representing the continuous image of a line), composite (connected set of curves, solids or surfaces), point (zero-dimensional geometric primitive, representing a position but not having an extent), surface (bounded, connected 2-dimensional geometric primitive, representing the continuous image of a region of a plane), solid (bounded, connected 3-dimensional geometric primitive, representing the continuous image of a region of space), or complex (a set of geometric primitives whose boundaries can be represented as a union of other primitives). For further details about vector geometric obvects, please refer to ISO 10115-1:2014(E), Table B.7.
datasetfieldtype.geometricObjectType.watermark=curve, composite, complex, point, solid, or surface
datasetfieldtype.numberOfDimensions.title=Raster Dimensions
datasetfieldtype.numberOfDimensions.description=Raster/grid data only: The number of independent spatio-temporal axes, or dimensions, represented in the dataset. For further details about raster data cell geometry, please refer to ISO 19115-1:2014(E), Table B.7.
datasetfieldtype.numberOfDimensions.watermark=
datasetfieldtype.cellGeometry.title=Raster Cell Geometry
datasetfieldtype.cellGeometry.description=Raster/grid data only: Identification of raster/grid data in this dataset as point, area or voxel (volumetric measurement on a regular grid in three-dimensional space).
datasetfieldtype.cellGeometry.watermark=Identification of grid data as point or cell.
datasetfieldtype.axisDimensionProperties.title=Raster Dimension (Axis) Properties
datasetfieldtype.axisDimensionProperties.description=Raster/grid data only: Information about spatial-temporal axis properties (dimensions). NOTE: A raster/grid dataset will usually have 2+ axes or dimensions. Repeat this field to describe all dimensions represented in the dataset
datasetfieldtype.axisDimensionProperties.watermark=
datasetfieldtype.dimensionNameType.title=Raster Dimension (Axis) Name
datasetfieldtype.dimensionNameType.description=Raster/grid data only: Name/type for one of the spatial-temporal axis represented in the dataset (row, column, vertical, track, crossTrack, line, sample, or time). For more information about axis dimension properties, please refer to ISO 19115-1:2014(E), Table B.7.1.
datasetfieldtype.dimensionNameType.watermark=row, column, vertical, track, crossTrack, line, sample, or time
datasetfieldtype.dimensionSize.title=Raster Dimension (Axis) Size
datasetfieldtype.dimensionSize.description=Number of elements along the axis.
datasetfieldtype.dimensionSize.watermark=
datasetfieldtype.resolution.title=Raster Dimension (Axis) Resolution
datasetfieldtype.resolution.description=A decimal value representing a dimension's degree of detail, i.e. the size of the area that corresponds to a single data element along a dataset's axis.
datasetfieldtype.resolution.watermark=enter a decimal value
datasetfieldtype.resolutionUnitOfMeasure.title=Raster Dimension (Axis) Resolution Unit of Measure
datasetfieldtype.resolutionUnitOfMeasure.description=Resolution unit of measure (e.g. 'cm', 'm', 'km', etc.) for the dimension/axis resolution value.
datasetfieldtype.resolutionUnitOfMeasure.watermark='cm', 'm', 'km', etc.
controlledvocabulary.country.afghanistan=Afghanistan
controlledvocabulary.country.albania=Albania
controlledvocabulary.country.algeria=Algeria
Expand Down Expand Up @@ -283,3 +367,47 @@ controlledvocabulary.country.yemen=Yemen
controlledvocabulary.country.zambia=Zambia
controlledvocabulary.country.zimbabwe=Zimbabwe
controlledvocabulary.country.aland_islands=Åland Islands
controlledvocabulary.geometricObjectType.curve=curve
controlledvocabulary.geometricObjectType.composite=composite
controlledvocabulary.geometricObjectType.complex=complex
controlledvocabulary.geometricObjectType.point=point
controlledvocabulary.geometricObjectType.solid=solid
controlledvocabulary.geometricObjectType.surface=surface
controlledvocabulary.cellGeometry.point=point
controlledvocabulary.cellGeometry.area=area
controlledvocabulary.cellGeometry.voxel=voxel
controlledvocabulary.dimensionNameType.row=row
controlledvocabulary.dimensionNameType.column=column
controlledvocabulary.dimensionNameType.vertical=vertical
controlledvocabulary.dimensionNameType.track=track
controlledvocabulary.dimensionNameType.crosstrack=crossTrack
controlledvocabulary.dimensionNameType.line=line
controlledvocabulary.dimensionNameType.sample=sample
controlledvocabulary.dimensionNameType.time=time
controlledvocabulary.spatialRepresentationType.stereomodel=stereoModel
controlledvocabulary.spatialRepresentationType.video=video
controlledvocabulary.spatialRepresentationType.tin=tin
controlledvocabulary.spatialRepresentationType.texttable=textTable
controlledvocabulary.spatialRepresentationType.grid=grid
controlledvocabulary.spatialRepresentationType.vector=vector
controlledvocabulary.dataQualityScope.dataset=dataset
controlledvocabulary.dataQualityScope.service=service
controlledvocabulary.resourceType.dataset=dataset
controlledvocabulary.resourceType.service=service
controlledvocabulary.resourceType.series=series
controlledvocabulary.referenceDateType.revision=revision
controlledvocabulary.referenceDateType.expiry=expiry
controlledvocabulary.referenceDateType.lastupdate=lastUpdate
controlledvocabulary.referenceDateType.lastrevision=lastRevision
controlledvocabulary.referenceDateType.nextupdate=nextUpdate
controlledvocabulary.referenceDateType.unavailable=unavailable
controlledvocabulary.referenceDateType.inforce=inForce
controlledvocabulary.referenceDateType.adopted=adopted
controlledvocabulary.referenceDateType.deprecated=deprecated
controlledvocabulary.referenceDateType.superseded=superseded
controlledvocabulary.referenceDateType.publication=publication
controlledvocabulary.spatialResolutionType.equivalentscale=equivalentScale
controlledvocabulary.spatialResolutionType.distance=distance
controlledvocabulary.spatialResolutionType.vertical=vertical
controlledvocabulary.spatialResolutionType.angulardistance=angularDistance
controlledvocabulary.spatialResolutionType.levelofdetail=levelOfDetail
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here at the bottom let's track failing tests. This is what I'm seeing right now:

edu.harvard.iq.dataverse.api.DatasetFieldsIT.testListAllFacetableDatasetFields
edu.harvard.iq.dataverse.api.DatasetTypesIT.testUpdateDatasetTypeLinksWithMetadataBlocks
edu.harvard.iq.dataverse.api.DataversesIT.testListMetadataBlocks
edu.harvard.iq.dataverse.api.MetadataBlocksIT.testListMetadataBlocks

From a quick look they all have to do with the number of fields expected, like this:

JSON path data.size() doesn't match.
Expected: <64>
  Actual: <71>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fixed the integration tests.

Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public static void setUpClass() {
void testListAllFacetableDatasetFields() {
Response listAllFacetableDatasetFieldsResponse = UtilIT.listAllFacetableDatasetFields();
listAllFacetableDatasetFieldsResponse.then().assertThat().statusCode(OK.getStatusCode());
int expectedNumberOfFacetableDatasetFields = 64;
int expectedNumberOfFacetableDatasetFields = 71;
listAllFacetableDatasetFieldsResponse.then().assertThat()
.statusCode(OK.getStatusCode())
.body("data[0].name", equalTo("authorName"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ public void testUpdateDatasetTypeLinksWithMetadataBlocks() {
.body("data[0].name", is("citation"))
.body("data[1].name", is("geospatial"))
.body("data[0].fields.size()", is(35))
.body("data[1].fields.size()", is(3));
.body("data[1].fields.size()", is(16));

System.out.println("listing " + dataverseAlias + " collection blocks and inner dataset field types, with display on create and return dataset field types set to true using dataset type " + randomName);
listBlocks = UtilIT.listMetadataBlocks(dataverseAlias, true, true, randomName, apiToken);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1341,7 +1341,7 @@ public void testListMetadataBlocks() {

// Since the included property of geographicCoverage is set to false, we should retrieve the total number of fields minus one
listMetadataBlocksResponse.then().assertThat()
.body(String.format("data[%d].fields.size()", geospatialMetadataBlockIndex), equalTo(2));
.body(String.format("data[%d].fields.size()", geospatialMetadataBlockIndex), equalTo(15));

listMetadataBlocksResponse = UtilIT.getMetadataBlock("geospatial");
String actualGeospatialMetadataField1 = listMetadataBlocksResponse.then().extract().path(String.format("data.fields['geographicCoverage'].name"));
Expand Down
Loading