Skip to content

Commit 771867d

Browse files
authored
5.0.16 (#223)
* README update * CHANGELOG update * decontainer setup * Inline nginx and Varnish config templates into docker-compose.yml SaxonJS 3 bump to beta-2 * ssl_verify_client fix * Removed user-supplied `dct:created` values * CHANGELOG update * Fixed XSLT SEF generation in Maven build * Removed comment * [maven-release-plugin] prepare release linkeddatahub-5.0.15 * [maven-release-plugin] prepare for next development iteration * Javadoc fixes * Updated CHANGELOG * More Javadoc fixes * Comment fix
1 parent a07c783 commit 771867d

40 files changed

+5943
-5599
lines changed

CHANGELOG.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,90 @@
1+
2+
## [5.0.16] - 2025-06-15
3+
## Added
4+
- Javadoc comments
5+
6+
## [5.0.15] - 2025-06-15
7+
### Changed
8+
- Inlined nginx and Varnish config templates into `docker-compose.yml`
9+
- SaxonJS 3 bump to 3.0.0-beta-2
10+
11+
### Fixed
12+
- Remove user-supplied `dct:created` values to prevent timestamp conflicts
13+
- XSLT SEF generation in Maven build
14+
15+
## [5.0.14] - 2025-05-25
16+
### Added
17+
- Inline chart save feature for better user experience
18+
19+
### Changed
20+
- Improved template match patterns for better performance
21+
22+
### Fixed
23+
- Fixed action URL in navbar form
24+
- Comment fixes in codebase
25+
26+
## [5.0.13] - 2025-05-12
27+
### Added
28+
- Saxon-JS upgraded from 2.x to 3.x with "suspended promise tree" architecture
29+
- Auto-generation of WebID certificates (owner and secretary) in entrypoint
30+
- Request access modal forms with ACL integration
31+
- Multi-platform Docker images (ARM64 + AMD64) with GitHub Actions
32+
- Modal document editing forms with in-place editing
33+
- Rate limiting and retry logic for HTTP 429 responses with `Retry-After` headers
34+
- Conditional HTTP requests support (`ETag`, `If-None-Match`, preconditions)
35+
- Access control endpoints for authorization management
36+
- Progress indicators for long-running operations
37+
- Drag-and-drop improvements for block reorganization
38+
- SPARQL endpoint read-only access for authenticated agents
39+
- Enhanced form controls with better `datetime-local` rendering
40+
- New HTTP test suite for conditional requests and access endpoints
41+
- Chart creation workflow improvements
42+
- View system overhaul - `ldh:View` now embedded via `ldh:Object`
43+
- Secrets management for Google OAuth credentials
44+
- Enhanced SSL/TLS management with automated keystore generation
45+
- MacOS compatibility improvements
46+
47+
### Changed
48+
- CLI tools reorganization - scripts moved to `bin/` directory with PATH management
49+
- Client-side named templates converted to XPath functions for better composability
50+
- Promise-based rendering for charts, views, and objects
51+
- `ldh:View` is now a "normal" resource instead of content block
52+
- Authorization query optimization for better performance
53+
- Document type injection with dynamic `VALUES` for type-based queries
54+
- Varnish configuration improvements with separate VCL templates
55+
- User-specific content handling with proper cache bypass
56+
- RDF/POST parser improvements for empty values and relative URIs
57+
- SPARQL.js 2.x compatibility with regex fixes for datatype URIs
58+
- Container orchestration with memory limits and better configuration
59+
- Base image updates: `atomgraph/letsencrypt-tomcat:10.1.34`, `atomgraph/fuseki:4.7.0`
60+
- XHTML namespace handling with default `xmlns="http://www.w3.org/1999/xhtml"`
61+
- Block system improvements with better nesting and unique identifiers
62+
- Authorization filter improvements with `SERVICE`-less queries
63+
- Static file optimizations with increased burst limits
64+
65+
### Fixed
66+
- Multiple null pointer exceptions in Java code
67+
- XPath syntax errors in XSLT stylesheets
68+
- Variable naming conflicts and scoping issues
69+
- Certificate permission issues across platforms
70+
- Progress bar visibility and selector issues
71+
- Block rendering and nesting logic
72+
- Form submission and response handling
73+
- Chart rendering and display logic
74+
- View navigation and object loading
75+
- HTTP status code handling (`201 Created`, `308 Permanent Redirect`)
76+
- Double slash URI prevention in requests
77+
- Container CSS and modal sizing issues
78+
- RDFS-specific vocabulary support
79+
80+
### Removed
81+
- `IMPORT_KEEPALIVE` parameter
82+
- Unused `Reserialize` Saxon function (replaced with pure XSLT)
83+
- Debug output from XSLT stylesheets
84+
- Unnecessary `ixsl:http-request` arguments
85+
- Secret environment variables from Dockerfile
86+
- `bs2:RowContent` mode in XSLT
87+
188
## [4.0.10] - 2024-11-07
289
### Changed
390
- Fixed namespace prefix declaration in client-side XSLT

CLAUDE.md

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## Project Overview
6+
7+
LinkedDataHub (LDH) is a low-code Knowledge Graph application platform that enables managing data, creating visualizations, and building apps on RDF Knowledge Graphs. It's a completely data-driven platform where applications and documents are defined as data, managed using a single generic HTTP API, and presented using declarative technologies.
8+
9+
## Build System and Development Commands
10+
11+
LinkedDataHub uses Maven as the primary build system with Docker for containerization.
12+
13+
### Development Setup
14+
```bash
15+
# Initial setup (requires .env file configuration)
16+
./bin/server-cert-gen.sh .env nginx ssl
17+
docker-compose up --build
18+
```
19+
20+
### Core Build Commands
21+
```bash
22+
# Maven build (Java 17 required)
23+
mvn clean install
24+
25+
# Build specific profiles
26+
mvn -Pstandalone clean install # Standalone WAR
27+
mvn -Pdependency clean install # JAR dependency
28+
mvn -Prelease clean install # Release with signing
29+
30+
# Docker-based development
31+
docker-compose up --build # Start all services
32+
docker-compose down -v # Stop and remove volumes
33+
sudo rm -rf data uploads && docker-compose down -v # Complete reset
34+
```
35+
36+
### Testing
37+
```bash
38+
# HTTP tests (requires running application)
39+
cd http-tests
40+
./run.sh ssl/owner/cert.pem [password] ssl/secretary/cert.pem [password]
41+
42+
# Test individual suites
43+
find ./document-hierarchy/ -name '*.sh' -exec bash {} \;
44+
```
45+
46+
## Architecture Overview
47+
48+
### Core Application Structure
49+
- **JAX-RS based**: Uses Jersey framework for RESTful web services
50+
- **Multi-application architecture**: Separate admin and end-user applications
51+
- **Data-driven design**: Applications and resources defined as RDF data
52+
- **XSLT-based UI**: Client-side rendering using Saxon-JS with XSLT transformations
53+
54+
### Key Components
55+
56+
#### Applications (`com.atomgraph.linkeddatahub.apps.model`)
57+
- `AdminApplication` - Administrative interface and functions
58+
- `EndUserApplication` - Main user-facing application
59+
- Applications are data-driven and loaded from RDF datasets
60+
61+
#### Security & Authentication (`com.atomgraph.linkeddatahub.server.filter.request.auth`)
62+
- WebID-based authentication with client certificates
63+
- OAuth2 integration (Google)
64+
- Authorization filters and context management
65+
- Multi-level security: Agent, Authorization, and Application filters
66+
67+
#### Data Management (`com.atomgraph.linkeddatahub.model`)
68+
- RDF-native data handling with Jena
69+
- Import/Export functionality for CSV, RDF, and other formats
70+
- SPARQL endpoint integration with separate admin and end-user stores
71+
72+
#### Resource Handling (`com.atomgraph.linkeddatahub.resource`)
73+
- RESTful resource endpoints for CRUD operations
74+
- File upload and content-addressed storage
75+
- Transformation and generation utilities
76+
77+
### Service Architecture
78+
The application runs as a multi-container setup:
79+
- **nginx**: Reverse proxy and SSL termination
80+
- **linkeddatahub**: Main Java application (Tomcat)
81+
- **fuseki-admin/fuseki-end-user**: Separate SPARQL stores
82+
- **varnish-frontend/varnish-admin/varnish-end-user**: Caching layers
83+
84+
### Data Flow
85+
1. Requests come through nginx proxy
86+
2. Varnish provides caching layer
87+
3. LinkedDataHub application handles business logic
88+
4. Data persisted to appropriate Fuseki triplestore
89+
5. XSLT transforms data for client presentation
90+
91+
### Key Extension Points
92+
- **Vocabulary definitions** in `com.atomgraph.linkeddatahub.vocabulary`
93+
- **Custom resource handlers** in `com.atomgraph.linkeddatahub.resource`
94+
- **Import processors** in `com.atomgraph.linkeddatahub.imports`
95+
- **XSLT transformations** in `src/main/webapp/static/com/atomgraph/linkeddatahub/xsl`
96+
97+
## CLI Tools
98+
LinkedDataHub includes extensive CLI tools in the `bin/` directory:
99+
- Resource management: `create-container.sh`, `create-item.sh`, `get.sh`, `post.sh`, `put.sh`
100+
- Import functionality: `imports/create-csv-import.sh`, `imports/import-rdf.sh`
101+
- Admin operations: `admin/model/add-class.sh`, `admin/acl/create-authorization.sh`
102+
- Certificate management: `webid-keygen.sh`, `server-cert-gen.sh`
103+
104+
Add CLI tools to PATH for development:
105+
```bash
106+
export PATH="$(find bin -type d -exec realpath {} \; | tr '\n' ':')$PATH"
107+
```
108+
109+
## Development Notes
110+
- Java 17 is required for compilation
111+
- The application uses AtomGraph's Processor and Web-Client libraries as core dependencies
112+
- XSLT stylesheets are processed during build to inline XML entities
113+
- Saxon-JS SEF files are generated during Maven package phase for client-side XSLT
114+
- WebID certificates are required for authenticated API access
115+
- The system expects Jena CLI tools to be available (`JENA_HOME` environment variable)

README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ It takes a few clicks and filling out a form to install the product into your ow
7676
- `data` where the triplestore(s) will persist RDF data
7777
- `datasets` where LDH persists agent metadata files
7878
- `uploads` where LDH stores content-hashed file uploads
79-
It should take up to half a minute as datasets are being loaded into triplestores. After a successful startup, the last line of the Docker log should read something like:
80-
```
81-
linkeddatahub_1 | 09-Feb-2021 14:18:10.536 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [32609] milliseconds
82-
```
79+
It should take up to half a minute as datasets are being loaded into triplestores. After a successful startup you should see periodic healtcheck requests being made to the https://localhost:4443/ns URL.
8380
6. Install `ssl/owner/keystore.p12` into a web browser of your choice (password is the `owner_cert_password` secret value)
8481
- Google Chrome: `Settings > Advanced > Manage Certificates > Import...`
8582
- Mozilla Firefox: `Options > Privacy > Security > View Certificates... > Import...`
@@ -203,6 +200,7 @@ The scripts can be found in the [`bin`](https://github.com/AtomGraph/LinkedDataH
203200
```shell
204201
export PATH="$(find bin -type d -exec realpath {} \; | tr '\n' ':')$PATH"
205202
```
203+
If you will be using LinkedDataHub's CLI regurarly, add the above command to your shell profile.
206204

207205
_:warning: The CLI scripts internally use [Jena's CLI commands](https://jena.apache.org/documentation/tools/). Set up the Jena environment before running the scripts._
208206

0 commit comments

Comments
 (0)