diff --git a/maven-central-settings.xml b/.github/maven-central-settings.xml similarity index 100% rename from maven-central-settings.xml rename to .github/maven-central-settings.xml diff --git a/.github/workflows/java11-publish.yml b/.github/workflows/java11-publish.yml index d9719567..fb8ba515 100644 --- a/.github/workflows/java11-publish.yml +++ b/.github/workflows/java11-publish.yml @@ -16,14 +16,15 @@ jobs: with: java-version: '11' distribution: 'temurin' + cache: 'maven' server-id: ossrh - - name: Import GPG Key - uses: crazy-max/ghaction-import-gpg@v6 - with: - gpg_private_key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} - passphrase: ${{ secrets.MAVEN_GPG_PASSPHRASE }} + server-username: OSSRH_USERNAME + server-password: OSSRH_TOKEN + gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Publish package - run: mvn -B -Pmaven-central -Dgpg.passphrase=${{secrets.MAVEN_GPG_PASSPHRASE}} -s maven-central-settings.xml deploy + run: mvn -B -Pmaven-central deploy env: - MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} - MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} diff --git a/.github/workflows/java8-publish.yml b/.github/workflows/java8-publish.yml index fb9c897e..8a9f94af 100644 --- a/.github/workflows/java8-publish.yml +++ b/.github/workflows/java8-publish.yml @@ -16,14 +16,15 @@ jobs: with: java-version: '8' distribution: 'temurin' + cache: 'maven' server-id: ossrh - - name: Import GPG Key - uses: crazy-max/ghaction-import-gpg@v6 - with: - gpg_private_key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} - passphrase: ${{ secrets.MAVEN_GPG_PASSPHRASE }} + server-username: OSSRH_USERNAME + server-password: OSSRH_TOKEN + gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Publish package - run: mvn -f pom_jre8.xml -B -Pmaven-central -Dgpg.passphrase=${{secrets.MAVEN_GPG_PASSPHRASE}} -s maven-central-settings.xml deploy + run: mvn -f pom_jre8.xml -B -Pmaven-central deploy env: - MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} - MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} diff --git a/README.md b/README.md index f9ce2ba3..28b4a2d3 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,26 @@ > [!IMPORTANT] > **This Open-Source Project Needs Your Support** > -> This library has been provided as a free, open-source resource, benefiting countless users without requiring anything in return. Yet, maintaining it takes significant time, effort, and resources—something often overlooked by those who use it freely. +> This library is offered as a free, open-source resource, benefiting countless users without requiring anything in return. However, maintaining it takes significant time, effort, and resources—something that is often overlooked by those who use it freely. > -> There is a noticeable gap between usage and contributions. This highlights a challenging reality for open-source: heavy reliance on the work of developers and maintainers without adequate support in return. Open-source projects like this depend on the contributions of their users to remain sustainable. +> There is a noticeable gap between usage and contributions, highlighting a challenging reality for open-source projects: heavy reliance on the work of developers and maintainers without adequate support in return. Open-source projects like this depend on the contributions of their users to remain sustainable. > -> **Open-source is not free labor. If your company profits from this library but refuses to contribute back, you’re not supporting the ecosystem—you’re exploiting it**. +> **Open-source is not free labor. If your company profits from this library but refuses to contribute back, you are not supporting the ecosystem—you are exploiting it.** > -> This library has been sustained through countless hours of work and resources, provided in good faith to the community. If your business depends on it but doesn’t give back, consider whether you deserve the benefits you’re taking. Support the work, or step aside for those who value collaboration and fairness. +> This library has been sustained through countless hours of work and resources, provided in good faith to the community. If your business depends on it but doesn't give back, consider whether you truly deserve the benefits you're taking. Support the work, or step aside for those who value collaboration and fairness. > ->Don’t let open-source be taken for granted. Support the work that supports you. +> Don’t let open-source be taken for granted. Support the work that supports you. # Titanium JSON-LD 1.1 Processor & API -An implementation of the [JSON-LD 1.1](https://www.w3.org/TR/json-ld/) (JSON-based Serialization for Linked Data) specification in Java utilizing [Jakarta JSON Processing](https://github.com/eclipse-ee4j/jsonp). +An implementation of the [JSON-LD 1.1](https://www.w3.org/TR/json-ld/) (JSON-based Serialization for Linked Data) specification in Java, utilizing [Jakarta JSON Processing](https://github.com/eclipse-ee4j/jsonp). ### Goals -- conformance to the specification -- secure, stable, fast, A+ code (covered by **~1800 tests**) -- minimal external dependencies - - only `jakarta.json-api` is required -- simple to use +- Full conformance to the specification +- Secure, stable, fast, high-quality code (covered by **~1800 tests**) +- Minimal external dependencies + - Only `jakarta.json-api` is required +- Easy to use ### Status @@ -34,12 +34,11 @@ An implementation of the [JSON-LD 1.1](https://www.w3.org/TR/json-ld/) (JSON-bas ### Extensions -- [LD-CLI](https://github.com/filip26/ld-cli) is a native command line utility for Ubuntu, Mac, Windows -- [JSON-LD-star](https://json-ld.github.io/json-ld-star) expansion and compaction built-in support (experimental) +- [LD-CLI](https://github.com/filip26/ld-cli): A native command line utility for Ubuntu, Mac, and Windows +- [JSON-LD-star](https://json-ld.github.io/json-ld-star): Expansion and compaction built-in support (experimental) - [Universal RDF Dataset Normalization Algorithm - URDNA2015](https://github.com/simon-greatrix/rdf-urdna) -- [Iridium CBOR-LD](https://github.com/filip26/iridium-cbor-ld) a CBOR-based Processor for Linked Data -- [LEXREX](https://lexrex.web.app/) semantic vocabularies visual builder and manager - +- [Iridium CBOR-LD](https://github.com/filip26/iridium-cbor-ld): A CBOR-based Processor for Linked Data +- [LEXREX](https://lexrex.web.app/): Semantic vocabularies visual builder and manager ## Table of Contents - [Conformance](#conformance) @@ -52,13 +51,13 @@ An implementation of the [JSON-LD 1.1](https://www.w3.org/TR/json-ld/) (JSON-bas ## Conformance - | Feature | Tests | Pass | Status | Notes | - | --- | ---: | ---: | ---: | --- | -| [Expansion](https://www.w3.org/TR/json-ld/#expanded-document-form) | 373 | 373 | 100% | | +| Feature | Tests | Pass | Status | Notes | +| --- | ---: | ---: | ---: | --- | +| [Expansion](https://www.w3.org/TR/json-ld/#expanded-document-form) | 373 | 373 | 100% | | | [Compaction](https://www.w3.org/TR/json-ld/#compacted-document-form) | 243 | 243 | 100% | | | [Flattening](https://www.w3.org/TR/json-ld/#flattened-document-form) | 55 | 55 | 100% | | | [JSON-LD to RDF](https://www.w3.org/TR/json-ld/#relationship-to-rdf) | 453 | 451 | 99.5% |
JsonLdOptions#setUriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
+ * @deprecated since 1.5.0, use
+ * JsonLdOptions#setUriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
* @param enabled set true
to enable validation
*/
@Deprecated
public void setUriValidation(boolean enabled) {
- this.uriValidation = UriValidationPolicy.of(enabled);
+ setUriValidation(enabled ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
+ /**
+ * Sets the URI validation policy. By default, the policy is set to
+ * {@code Full}.
+ *
+ * + * Note: Changing this policy may produce unexpected or non-compliant results, + * depending on the specified validation rules. + *
+ * + * @param uriValidation the desired URI validation policy + * + * @since 1.5.0 + */ public void setUriValidation(UriValidationPolicy uriValidation) { this.uriValidation = uriValidation; } diff --git a/src/main/java/com/apicatalog/jsonld/api/ExpansionApi.java b/src/main/java/com/apicatalog/jsonld/api/ExpansionApi.java index 29b15f3c..8b751ee5 100644 --- a/src/main/java/com/apicatalog/jsonld/api/ExpansionApi.java +++ b/src/main/java/com/apicatalog/jsonld/api/ExpansionApi.java @@ -19,8 +19,8 @@ import com.apicatalog.jsonld.JsonLdError; import com.apicatalog.jsonld.JsonLdOptions; -import com.apicatalog.jsonld.JsonLdVersion; import com.apicatalog.jsonld.JsonLdOptions.ProcessingPolicy; +import com.apicatalog.jsonld.JsonLdVersion; import com.apicatalog.jsonld.document.Document; import com.apicatalog.jsonld.document.JsonDocument; import com.apicatalog.jsonld.loader.DocumentLoader; diff --git a/src/main/java/com/apicatalog/jsonld/context/TermDefinitionBuilder.java b/src/main/java/com/apicatalog/jsonld/context/TermDefinitionBuilder.java index 1f709366..721a834e 100644 --- a/src/main/java/com/apicatalog/jsonld/context/TermDefinitionBuilder.java +++ b/src/main/java/com/apicatalog/jsonld/context/TermDefinitionBuilder.java @@ -34,8 +34,8 @@ import com.apicatalog.jsonld.lang.Keywords; import com.apicatalog.jsonld.lang.LanguageTag; import com.apicatalog.jsonld.uri.UriUtils; - import com.apicatalog.jsonld.uri.UriValidationPolicy; + import jakarta.json.JsonArray; import jakarta.json.JsonObject; import jakarta.json.JsonString; diff --git a/src/main/java/com/apicatalog/jsonld/deseralization/JsonLdToRdf.java b/src/main/java/com/apicatalog/jsonld/deseralization/JsonLdToRdf.java index bbb1102b..5ba19cde 100644 --- a/src/main/java/com/apicatalog/jsonld/deseralization/JsonLdToRdf.java +++ b/src/main/java/com/apicatalog/jsonld/deseralization/JsonLdToRdf.java @@ -204,11 +204,11 @@ public RdfDataset build() throws JsonLdError { } /** - * @deprecated useJsonLdToRdf#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
+ * @deprecated since 1.5.0, use JsonLdToRdf#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
*/
@Deprecated
- public JsonLdToRdf uriValidation(boolean uriValidation) {
- return uriValidation(UriValidationPolicy.of(uriValidation));
+ public JsonLdToRdf uriValidation(boolean enabled) {
+ return uriValidation(enabled ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
public JsonLdToRdf uriValidation(UriValidationPolicy uriValidation) {
diff --git a/src/main/java/com/apicatalog/jsonld/deseralization/ListToRdf.java b/src/main/java/com/apicatalog/jsonld/deseralization/ListToRdf.java
index 98930b47..aafe654f 100644
--- a/src/main/java/com/apicatalog/jsonld/deseralization/ListToRdf.java
+++ b/src/main/java/com/apicatalog/jsonld/deseralization/ListToRdf.java
@@ -122,11 +122,11 @@ public RdfValue build() throws JsonLdError {
}
/**
- * @deprecated use ListToRdf#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
+ * @deprecated since 1.5.0, use ListToRdf#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
*/
@Deprecated
- public ListToRdf uriValidation(boolean uriValidation) {
- return uriValidation(UriValidationPolicy.of(uriValidation));
+ public ListToRdf uriValidation(boolean enabled) {
+ return uriValidation(enabled ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
public ListToRdf uriValidation(UriValidationPolicy uriValidation) {
diff --git a/src/main/java/com/apicatalog/jsonld/deseralization/ObjectToRdf.java b/src/main/java/com/apicatalog/jsonld/deseralization/ObjectToRdf.java
index 75007bf6..22d9c1ed 100644
--- a/src/main/java/com/apicatalog/jsonld/deseralization/ObjectToRdf.java
+++ b/src/main/java/com/apicatalog/jsonld/deseralization/ObjectToRdf.java
@@ -53,17 +53,20 @@
/**
*
- * @see Object to RDF Conversion
+ * @see Object
+ * to RDF Conversion
*
*/
final class ObjectToRdf {
private static final Logger LOGGER = Logger.getLogger(ObjectToRdf.class.getName());
- private static final DecimalFormat xsdNumberFormat =
- new DecimalFormat("0.0##############E0", new DecimalFormatSymbols(Locale.ENGLISH));
+ private static final DecimalFormat xsdNumberFormat = new DecimalFormat("0.0##############E0", new DecimalFormatSymbols(Locale.ENGLISH));
- static { xsdNumberFormat.setMinimumFractionDigits(1); }
+ static {
+ xsdNumberFormat.setMinimumFractionDigits(1);
+ }
// required
private JsonObject item;
@@ -85,7 +88,7 @@ private ObjectToRdf(JsonObject item, ListObject#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
+ * @deprecated since 1.5.0, use
+ * Object#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
*/
@Deprecated
- public ObjectToRdf uriValidation(boolean uriValidation) {
- return uriValidation(UriValidationPolicy.of(uriValidation));
+ public ObjectToRdf uriValidation(boolean enabled) {
+ return uriValidation(enabled ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
public ObjectToRdf uriValidation(UriValidationPolicy uriValidation) {
diff --git a/src/main/java/com/apicatalog/jsonld/expansion/UriExpansion.java b/src/main/java/com/apicatalog/jsonld/expansion/UriExpansion.java
index b844d4ab..da795c68 100644
--- a/src/main/java/com/apicatalog/jsonld/expansion/UriExpansion.java
+++ b/src/main/java/com/apicatalog/jsonld/expansion/UriExpansion.java
@@ -29,8 +29,8 @@
import com.apicatalog.jsonld.lang.Keywords;
import com.apicatalog.jsonld.uri.UriResolver;
import com.apicatalog.jsonld.uri.UriUtils;
-
import com.apicatalog.jsonld.uri.UriValidationPolicy;
+
import jakarta.json.JsonObject;
import jakarta.json.JsonString;
import jakarta.json.JsonValue;
@@ -127,7 +127,7 @@ public String expand(final String value) throws JsonLdError {
final int splitIndex = result.indexOf(':', 1);
if (splitIndex != -1) {
- // 6.1. Split value into a prefix and suffix
+ // 6.1. Split value into a prefix and suffix
// at the first occurrence of a colon (:).
// 6.2. If prefix is underscore (_) or suffix begins with double-forward-slash
// (//), return value as it is already an IRI or a blank node identifier.
@@ -207,13 +207,13 @@ private String expandResult(final String result) {
return result;
}
-
/**
- * @deprecated use UriExpansion#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
+ * @deprecated since 1.5.0, use
+ * UriExpansion#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
*/
@Deprecated
- public UriExpansion uriValidation(boolean uriValidation) {
- return uriValidation(UriValidationPolicy.of(uriValidation));
+ public UriExpansion uriValidation(boolean enabled) {
+ return uriValidation(enabled ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
public UriExpansion uriValidation(UriValidationPolicy uriValidation) {
diff --git a/src/main/java/com/apicatalog/jsonld/framing/Frame.java b/src/main/java/com/apicatalog/jsonld/framing/Frame.java
index a7cdc710..e4747814 100644
--- a/src/main/java/com/apicatalog/jsonld/framing/Frame.java
+++ b/src/main/java/com/apicatalog/jsonld/framing/Frame.java
@@ -30,8 +30,8 @@
import com.apicatalog.jsonld.lang.NodeObject;
import com.apicatalog.jsonld.lang.ValueObject;
import com.apicatalog.jsonld.uri.UriUtils;
-
import com.apicatalog.jsonld.uri.UriValidationPolicy;
+
import jakarta.json.JsonArray;
import jakarta.json.JsonObject;
import jakarta.json.JsonString;
diff --git a/src/main/java/com/apicatalog/jsonld/loader/LRUDocumentCache.java b/src/main/java/com/apicatalog/jsonld/loader/LRUDocumentCache.java
index 5d2579db..2a37d3c1 100644
--- a/src/main/java/com/apicatalog/jsonld/loader/LRUDocumentCache.java
+++ b/src/main/java/com/apicatalog/jsonld/loader/LRUDocumentCache.java
@@ -1,12 +1,12 @@
package com.apicatalog.jsonld.loader;
+import java.net.URI;
+import java.util.Objects;
+
import com.apicatalog.jsonld.JsonLdError;
import com.apicatalog.jsonld.context.cache.LruCache;
import com.apicatalog.jsonld.document.Document;
-import java.net.URI;
-import java.util.Objects;
-
public class LRUDocumentCache implements DocumentLoader {
private final DocumentLoader documentLoader;
diff --git a/src/main/java/com/apicatalog/jsonld/processor/ProcessingRuntime.java b/src/main/java/com/apicatalog/jsonld/processor/ProcessingRuntime.java
index d41d2515..5c4aac86 100644
--- a/src/main/java/com/apicatalog/jsonld/processor/ProcessingRuntime.java
+++ b/src/main/java/com/apicatalog/jsonld/processor/ProcessingRuntime.java
@@ -7,8 +7,8 @@
import com.apicatalog.jsonld.context.cache.Cache;
import com.apicatalog.jsonld.document.Document;
import com.apicatalog.jsonld.loader.DocumentLoader;
-
import com.apicatalog.jsonld.uri.UriValidationPolicy;
+
import jakarta.json.JsonValue;
/**
diff --git a/src/main/java/com/apicatalog/jsonld/serialization/RdfToJsonld.java b/src/main/java/com/apicatalog/jsonld/serialization/RdfToJsonld.java
index d4f79ee0..f4be4543 100644
--- a/src/main/java/com/apicatalog/jsonld/serialization/RdfToJsonld.java
+++ b/src/main/java/com/apicatalog/jsonld/serialization/RdfToJsonld.java
@@ -65,7 +65,6 @@ public final class RdfToJsonld {
// runtime
private GraphMap graphMap;
-
private MapRdfToJsonld#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
+ * @deprecated since 1.5.0, use
+ * RdfToJsonld#uriValidation(com.apicatalog.jsonld.uri.UriValidationPolicy)
*/
@Deprecated
- public RdfToJsonld uriValidation(boolean uriValidation) {
- return uriValidation(UriValidationPolicy.of(uriValidation));
+ public RdfToJsonld uriValidation(boolean enabled) {
+ return uriValidation(enabled ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
public RdfToJsonld uriValidation(UriValidationPolicy uriValidation) {
diff --git a/src/main/java/com/apicatalog/jsonld/serialization/RdfToObject.java b/src/main/java/com/apicatalog/jsonld/serialization/RdfToObject.java
index e7461ede..f0404bb1 100644
--- a/src/main/java/com/apicatalog/jsonld/serialization/RdfToObject.java
+++ b/src/main/java/com/apicatalog/jsonld/serialization/RdfToObject.java
@@ -20,8 +20,8 @@
import com.apicatalog.jsonld.JsonLdError;
import com.apicatalog.jsonld.JsonLdErrorCode;
import com.apicatalog.jsonld.JsonLdOptions.RdfDirection;
-import com.apicatalog.jsonld.json.JsonProvider;
import com.apicatalog.jsonld.JsonLdVersion;
+import com.apicatalog.jsonld.json.JsonProvider;
import com.apicatalog.jsonld.lang.Keywords;
import com.apicatalog.rdf.RdfLiteral;
import com.apicatalog.rdf.RdfValue;
diff --git a/src/main/java/com/apicatalog/jsonld/uri/UriUtils.java b/src/main/java/com/apicatalog/jsonld/uri/UriUtils.java
index a15e02f1..6313f698 100644
--- a/src/main/java/com/apicatalog/jsonld/uri/UriUtils.java
+++ b/src/main/java/com/apicatalog/jsonld/uri/UriUtils.java
@@ -28,12 +28,11 @@ private UriUtils() {
public static final boolean isURI(final String value) {
return value != null
- && StringUtils.isNotBlank(value)
- && !Keywords.matchForm(StringUtils.strip(value))
- && create(StringUtils.strip(value)) != null;
+ && StringUtils.isNotBlank(value)
+ && !Keywords.matchForm(StringUtils.strip(value))
+ && create(StringUtils.strip(value)) != null;
}
-
public static final URI create(final String uri) {
if (uri == null) {
@@ -80,8 +79,7 @@ public static final boolean isNotURI(final String uri) {
return uri == null
|| StringUtils.isBlank(uri)
|| Keywords.matchForm(StringUtils.strip(uri))
- || create(StringUtils.strip(uri)) == null
- ;
+ || create(StringUtils.strip(uri)) == null;
}
/**
@@ -94,11 +92,12 @@ public static final boolean isNotURI(final String uri) {
*/
@Deprecated
public static final boolean isNotAbsoluteUri(final String uri) {
- return isNotAbsoluteUri(uri, UriValidationPolicy.of(true));
+ return isNotAbsoluteUri(uri, UriValidationPolicy.Full);
}
/**
- * Deprecated in favor of {@link UriUtils#isNotAbsoluteUri(String, UriValidationPolicy)}
+ * Deprecated in favor of
+ * {@link UriUtils#isNotAbsoluteUri(String, UriValidationPolicy)}
*
* @deprecated since 1.3.0
*
@@ -107,7 +106,7 @@ public static final boolean isNotAbsoluteUri(final String uri) {
*/
@Deprecated
public static final boolean isNotAbsoluteUri(final String uri, final boolean validate) {
- return !isAbsoluteUri(uri, UriValidationPolicy.of(validate));
+ return !isAbsoluteUri(uri, validate ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
public static final boolean isNotAbsoluteUri(final String uri, UriValidationPolicy policy) {
@@ -115,7 +114,8 @@ public static final boolean isNotAbsoluteUri(final String uri, UriValidationPoli
}
/**
- * Deprecated in favor of {@link UriUtils#isAbsoluteUri(String, UriValidationPolicy)}
+ * Deprecated in favor of
+ * {@link UriUtils#isAbsoluteUri(String, UriValidationPolicy)}
*
* @deprecated since 1.3.0
*
@@ -128,7 +128,8 @@ public static final boolean isAbsoluteUri(final String uri) {
}
/**
- * Deprecated in favor of {@link UriUtils#isAbsoluteUri(String, UriValidationPolicy)}
+ * Deprecated in favor of
+ * {@link UriUtils#isAbsoluteUri(String, UriValidationPolicy)}
*
* @deprecated since 1.4.2
*
@@ -137,29 +138,29 @@ public static final boolean isAbsoluteUri(final String uri) {
*/
@Deprecated
public static final boolean isAbsoluteUri(final String uri, boolean validate) {
- return isAbsoluteUri(uri, UriValidationPolicy.of(validate));
+ return isAbsoluteUri(uri, validate ? UriValidationPolicy.Full : UriValidationPolicy.SchemeOnly);
}
public static final boolean isAbsoluteUri(final String uri, final UriValidationPolicy policy) {
switch (policy) {
- case None:
- return true;
- case SchemeOnly:
- return startsWithScheme(uri);
- case Full:
- if (uri == null
- || uri.length() < 3 // minimal form s(1):ssp(1)
- ) {
+ case None:
+ return true;
+ case SchemeOnly:
+ return startsWithScheme(uri);
+ case Full:
+ if (uri == null
+ || uri.length() < 3 // minimal form s(1):ssp(1)
+ ) {
+ return false;
+ } else {
+ try {
+ return URI.create(uri).isAbsolute();
+ } catch (IllegalArgumentException e) {
return false;
- } else{
- try {
- return URI.create(uri).isAbsolute();
- } catch (IllegalArgumentException e) {
- return false;
- }
}
- default:
- return false;
+ }
+ default:
+ return false;
}
}
@@ -169,17 +170,16 @@ private static final boolean startsWithScheme(final String uri) {
if (uri == null
|| uri.length() < 2 // a scheme must have at least one letter followed by ':'
|| !Character.isLetter(uri.codePointAt(0)) // a scheme name must start with a letter
- ) {
+ ) {
return false;
}
for (int i = 1; i < uri.length(); i++) {
if (
- // a scheme name must start with a letter followed by a letter/digit/+/-/.
- Character.isLetterOrDigit(uri.codePointAt(i))
- || uri.charAt(i) == '-' || uri.charAt(i) == '+' || uri.charAt(i) == '.'
- ) {
+ // a scheme name must start with a letter followed by a letter/digit/+/-/.
+ Character.isLetterOrDigit(uri.codePointAt(i))
+ || uri.charAt(i) == '-' || uri.charAt(i) == '+' || uri.charAt(i) == '.') {
continue;
}
diff --git a/src/main/java/com/apicatalog/jsonld/uri/UriValidationPolicy.java b/src/main/java/com/apicatalog/jsonld/uri/UriValidationPolicy.java
index abb64f37..7d334ca1 100644
--- a/src/main/java/com/apicatalog/jsonld/uri/UriValidationPolicy.java
+++ b/src/main/java/com/apicatalog/jsonld/uri/UriValidationPolicy.java
@@ -1,26 +1,28 @@
package com.apicatalog.jsonld.uri;
+/**
+ * Represents different URI validation policies. These policies determine the
+ * extent to which URIs are validated during processing.
+ */
public enum UriValidationPolicy {
/**
- * No validation is performed
+ * Disables URI validation entirely, accepting all input as-is. This option
+ * provides maximum flexibility but may lead to non-compliant or invalid URI
+ * handling.
*/
None,
/**
- * The validation only targets the scheme
+ * Validates only the scheme component of the URI, allowing for more lenient
+ * processing while still ensuring a recognizable scheme (e.g., "http:",
+ * "https:").
*/
SchemeOnly,
/**
- * The validation is be fully performed
+ * Performs full URI validation, ensuring that the URI conforms to all syntax
+ * and structural requirements defined by relevant standards.
*/
- Full ;
-
- /**
- * Method allowing to convert the legacy boolean to the matching policy
- */
- public static UriValidationPolicy of(boolean value) {
- return value ? Full : SchemeOnly ;
- }
+ Full;
}