diff --git a/src/main/java/fr/inria/corese/core/next/api/base/model/AbstractIRI.java b/src/main/java/fr/inria/corese/core/next/api/base/model/AbstractIRI.java index be3fe895a..ba4e58153 100644 --- a/src/main/java/fr/inria/corese/core/next/api/base/model/AbstractIRI.java +++ b/src/main/java/fr/inria/corese/core/next/api/base/model/AbstractIRI.java @@ -73,7 +73,7 @@ public int compareTo(IRI o) { public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) + if (! (o instanceof IRI)) return false; AbstractIRI that = (AbstractIRI) o; return this.stringValue().equals(that.stringValue()); diff --git a/src/main/java/fr/inria/corese/core/next/api/io/serialization/RDFSerializer.java b/src/main/java/fr/inria/corese/core/next/api/io/serialization/RDFSerializer.java index 929acfa58..1e1501e4f 100644 --- a/src/main/java/fr/inria/corese/core/next/api/io/serialization/RDFSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/api/io/serialization/RDFSerializer.java @@ -29,4 +29,18 @@ public interface RDFSerializer { * process */ void write(final Writer writer) throws SerializationException; + + /** + * Returns the format name for error messages and logging. + * + * @return the format name (e.g., "TriG", "Turtle"). + */ + default String getFormatName() { + return getRDFFormat().getName(); + }; + + /** + * Gets the RDF format that this serializer generates. + */ + RDFFormat getRDFFormat(); } \ No newline at end of file diff --git a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/FOAF.java b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/FOAF.java new file mode 100644 index 000000000..c45fcf186 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/FOAF.java @@ -0,0 +1,37 @@ +package fr.inria.corese.core.next.impl.common.vocabulary; + +import fr.inria.corese.core.next.api.IRI; +import fr.inria.corese.core.next.impl.common.BasicIRI; + +public enum FOAF implements Vocabulary { + ; + + private final IRI iri; + + FOAF(String localName) { + this.iri = new BasicIRI(getNamespace(), localName); + } + + @Override + public IRI getIRI() { + return this.iri; + } + + @Override + public String getNamespace() { + return getVocabularyNamespace(); // Referencing the directly defined static NS + } + + @Override + public String getPreferredPrefix() { + return getVocabularyPreferredPrefix(); + } + + public static String getVocabularyNamespace() { + return "http://xmlns.com/foaf/0.1/"; + } + + public static String getVocabularyPreferredPrefix() { + return "foaf"; + } +} diff --git a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/OWL.java b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/OWL.java index 7ea0283ca..88360f476 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/OWL.java +++ b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/OWL.java @@ -51,8 +51,6 @@ public enum OWL implements Vocabulary { private final IRI iri; - public static final String NS = "http://www.w3.org/2002/07/owl#"; - OWL(String localName) { this.iri = new BasicIRI(getNamespace(), localName); } @@ -64,11 +62,19 @@ public IRI getIRI() { @Override public String getNamespace() { - return NS; // Referencing the directly defined static NS + return getVocabularyNamespace(); // Referencing the directly defined static NS } @Override public String getPreferredPrefix() { + return getVocabularyPreferredPrefix(); + } + + public static String getVocabularyNamespace() { + return "http://www.w3.org/2002/07/owl#"; + } + + public static String getVocabularyPreferredPrefix() { return "owl"; } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDF.java b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDF.java index eaf569ddd..123b9e156 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDF.java +++ b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDF.java @@ -52,11 +52,19 @@ public IRI getIRI() { @Override public String getNamespace() { - return "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; + return getVocabularyNamespace(); } @Override public String getPreferredPrefix() { + return getVocabularyPreferredPrefix(); + } + + public static String getVocabularyNamespace() { + return "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; + } + + public static String getVocabularyPreferredPrefix() { return "rdf"; } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDFS.java b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDFS.java index 06e9545cd..00872986c 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDFS.java +++ b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/RDFS.java @@ -87,7 +87,7 @@ public enum RDFS implements Vocabulary { @Override public String getNamespace() { - return "http://www.w3.org/2000/01/rdf-schema#"; + return getVocabularyNamespace(); } @Override @@ -97,6 +97,14 @@ public IRI getIRI() { @Override public String getPreferredPrefix() { + return getVocabularyPreferredPrefix(); + } + + public static String getVocabularyNamespace() { + return "http://www.w3.org/2000/01/rdf-schema#"; + } + + public static String getVocabularyPreferredPrefix() { return "rdfs"; } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/Vocabulary.java b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/Vocabulary.java index 5d862c57b..b64200467 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/Vocabulary.java +++ b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/Vocabulary.java @@ -21,4 +21,12 @@ public interface Vocabulary { * @return the preferred prefix of this vocabulary */ String getPreferredPrefix(); + + static String getVocabularyNamespace() { + throw new RuntimeException("Unimplemented function"); + } + + static String getVocabularyPreferredPrefix() { + throw new RuntimeException("Unimplemented function"); + } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/XSD.java b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/XSD.java index da2477ba4..a9765cab7 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/XSD.java +++ b/src/main/java/fr/inria/corese/core/next/impl/common/vocabulary/XSD.java @@ -208,11 +208,19 @@ public IRI getIRI() { @Override public String getNamespace() { - return "http://www.w3.org/2001/XMLSchema#"; + return getVocabularyNamespace(); } @Override public String getPreferredPrefix() { + return getVocabularyPreferredPrefix(); + } + + public static String getVocabularyNamespace() { + return "http://www.w3.org/2001/XMLSchema#"; + } + + public static String getVocabularyPreferredPrefix() { return "xsd"; } diff --git a/src/main/java/fr/inria/corese/core/next/impl/exception/SerializationException.java b/src/main/java/fr/inria/corese/core/next/impl/exception/SerializationException.java index d5ba83d8e..28bf2180d 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/exception/SerializationException.java +++ b/src/main/java/fr/inria/corese/core/next/impl/exception/SerializationException.java @@ -14,6 +14,8 @@ public class SerializationException extends CoreseException { private final int lineNumber; private final int columnNumber; + public static final String DEFAULT_FORMAT = "unknown"; + public SerializationException(String message, String formatName) { this(message, formatName, -1, -1, null); } @@ -27,7 +29,7 @@ public SerializationException(String message, String formatName) { * the {@link #getMessage()} method). * @param formatName the name of the RDF format being processed when the error * occurred. - * Use "unknown" if the format is not applicable or cannot be + * Use DEFAULT_FORMAT if the format is not applicable or cannot be * determined. * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method). @@ -71,7 +73,7 @@ public SerializationException(String message, String formatName, int lineNumber, */ private static String buildMessage(String base, String format, int line, int col) { StringBuilder sb = new StringBuilder(base); - if (!"unknown".equals(format)) { + if (!DEFAULT_FORMAT.equals(format)) { sb.append(" [Format: ").append(format).append("]"); } if (line > 0) { diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/common/IOConstants.java b/src/main/java/fr/inria/corese/core/next/impl/io/common/IOConstants.java new file mode 100644 index 000000000..2e97653fc --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/impl/io/common/IOConstants.java @@ -0,0 +1,70 @@ +package fr.inria.corese.core.next.impl.io.common; + +import fr.inria.corese.core.util.Property; + +/** + * Shared constants between serializers and parsers + */ +public class IOConstants { + + protected IOConstants() { + + } + + // Generic characters + + public static final String POINT = "."; + + public static final String SEMICOLON = ";"; + + public static final String COMMA = ","; + + public static final String COLON = ":"; + + public static final String SPACE = " "; + + public static final String TAB = "\t"; + + public static final String LINE_FEED = "\n"; + + public static final String HASH = "#"; + + public static final String CARRIAGE_RETURN = "\r"; + + public static final String SLASH = "/"; + + public static final String QUOTE = "\""; + + public static final String AT = "@"; + + public static final String LT = "<"; // Less than + + public static final String GT = ">"; // Greater than + + // RDF-specific characters + + /** + * The blank node prefix. + */ + public static final String BLANK_NODE_PREFIX = "_:"; + + public static final String IRI_START = "<"; + + public static final String IRI_END = ">"; + + public static final String RDF_TYPE_SHORTCUT = "a"; + + /** + * Returns the configured default base URI for IRI resolution. + * The value is configurable via {@code Property.Value.DEFAULT_BASE_URI}. + * + * @return the default base URI from configuration, or null if not set + */ + public static String getDefaultBaseURI() { + String configuredValue = Property.getStringValue(Property.Value.DEFAULT_BASE_URI); + if (configuredValue == null || configuredValue.isEmpty()) { + return "http://example.org/"; + } + return configuredValue; + } +} diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/option/JSONLDProcessorOptions.java b/src/main/java/fr/inria/corese/core/next/impl/io/common/JSONLDOptions.java similarity index 95% rename from src/main/java/fr/inria/corese/core/next/impl/io/option/JSONLDProcessorOptions.java rename to src/main/java/fr/inria/corese/core/next/impl/io/common/JSONLDOptions.java index c8f4a640b..bf7f88443 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/option/JSONLDProcessorOptions.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/common/JSONLDOptions.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.impl.io.option; +package fr.inria.corese.core.next.impl.io.common; import java.net.URI; import java.time.Duration; @@ -18,7 +18,7 @@ * @see JsonLdOptions */ -public class JSONLDProcessorOptions extends AbstractIOOptions +public class JSONLDOptions extends AbstractIOOptions implements BaseIRIOptions { private final Builder builder; @@ -28,7 +28,7 @@ public class JSONLDProcessorOptions extends AbstractIOOptions * * @param builder the builder containing the options for this processor */ - protected JSONLDProcessorOptions(Builder builder) { + protected JSONLDOptions(Builder builder) { this.builder = builder; } @@ -141,18 +141,18 @@ public String getBaseIRI() { } /** - * Builder for creating instances of JSONLDProcessorOptions. + * Builder for creating instances of JSONLDOptions. * This nested static class provides a fluent API for configuring the * various options before building the final - * {@code JSONLDProcessorOptions} object. + * {@code JSONLDOptions} object. */ - public static class Builder extends AbstractIOOptions.Builder { + public static class Builder extends AbstractIOOptions.Builder { private final JsonLdOptions options = new JsonLdOptions(); @Override - public JSONLDProcessorOptions build() { - return new JSONLDProcessorOptions(this); + public JSONLDOptions build() { + return new JSONLDOptions(this); } /** diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/parser/common/AbstractTurtleTriGListener.java b/src/main/java/fr/inria/corese/core/next/impl/io/parser/common/AbstractTurtleTriGListener.java index b6fa44004..1faea3780 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/parser/common/AbstractTurtleTriGListener.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/parser/common/AbstractTurtleTriGListener.java @@ -97,7 +97,7 @@ public String resolveIRI(String raw) { try { raw = raw.trim(); - if (raw.equals(ParserConstants.A)) { + if (raw.equals(ParserConstants.RDF_TYPE_SHORTCUT)) { return RDF.type.getIRI().stringValue(); } @@ -234,7 +234,7 @@ public String buildURI(String scheme, String authority, String path, String quer result.append(ParserConstants.QUERY_MARK).append(query); } if (fragment != null) { - result.append(ParserConstants.FRAGMENT).append(fragment); + result.append(ParserConstants.HASH).append(fragment); } return normalizeURI(result.toString()); } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParser.java b/src/main/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParser.java index 9048a9d7d..b6d085762 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParser.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParser.java @@ -24,7 +24,7 @@ import fr.inria.corese.core.next.impl.common.literal.XSD; import fr.inria.corese.core.next.impl.common.util.IRIUtils; import fr.inria.corese.core.next.impl.exception.ParsingErrorException; -import fr.inria.corese.core.next.impl.io.option.JSONLDProcessorOptions; +import fr.inria.corese.core.next.impl.io.common.JSONLDOptions; /** * Parser for JSON-LD RDF files. This parser is based on the Titanium JSON-LD library. @@ -43,7 +43,7 @@ public class JSONLDParser extends AbstractRDFParser { * @param factory the value factory used to create RDF values */ public JSONLDParser(Model model, ValueFactory factory) { - this(model, factory, new JSONLDProcessorOptions.Builder().build()); + this(model, factory, new JSONLDOptions.Builder().build()); } /** @@ -96,8 +96,8 @@ public void parse(Reader reader, String baseURI) { private void parseJSONLDDocument(Document document, String baseURI) { try { JsonLdOptions options = new JsonLdOptions(); - if(this.getConfig() instanceof JSONLDProcessorOptions) { - options = ((JSONLDProcessorOptions) this.getConfig()).getJsonLdOptions(); + if(this.getConfig() instanceof JSONLDOptions) { + options = ((JSONLDOptions) this.getConfig()).getJsonLdOptions(); } if(baseURI != null && !baseURI.isEmpty()) { options.setBase(URI.create(baseURI)); @@ -148,7 +148,7 @@ public RdfQuadConsumer quad(String subject, String predicate, String object, Str } else if(IRIUtils.isStandardIRI(object)) { objValue = getValueFactory().createIRI(object); } else { - throw new RdfConsumerException("Invalid object: " + object); + throw new ParsingErrorException("Invalid object: " + object); } // Graph diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLUtils.java b/src/main/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLUtils.java index 07b1f1fc2..7ac142784 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLUtils.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLUtils.java @@ -4,6 +4,7 @@ import fr.inria.corese.core.next.impl.common.literal.XSD; import fr.inria.corese.core.next.impl.common.vocabulary.RDF; import fr.inria.corese.core.next.impl.exception.IncorrectFormatException; +import fr.inria.corese.core.next.impl.exception.ParsingErrorException; import fr.inria.corese.core.next.impl.io.parser.util.ParserConstants; import org.xml.sax.*; import java.util.List; @@ -104,7 +105,7 @@ public static String resolveAgainstBase(String iri, String baseURI) { try { return new java.net.URI(baseURI).resolve(iri).toString(); } catch (Exception e) { - throw new IncorrectFormatException("Failed to resolve IRI: " + iri + " against base: " + baseURI, e); + throw new ParsingErrorException("Failed to resolve IRI: " + iri + " against base: " + baseURI, e); } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGListerner.java b/src/main/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGListerner.java index 83dcfc7d0..505c9f311 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGListerner.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGListerner.java @@ -444,7 +444,7 @@ private Resource extractLabelOrSubject(TriGParser.LabelOrSubjectContext ctx) { */ private IRI extractVerb(TriGParser.VerbContext ctx) { String verbText = ctx.getText(); - if (verbText.equals(ParserConstants.A)) { + if (verbText.equals(ParserConstants.RDF_TYPE_SHORTCUT)) { return delegate.createIRI(RDF.type.getIRI().stringValue()); } return delegate.createIRI(delegate.resolveIRI(verbText)); diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/parser/util/ParserConstants.java b/src/main/java/fr/inria/corese/core/next/impl/io/parser/util/ParserConstants.java index 172369287..a60a53de8 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/parser/util/ParserConstants.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/parser/util/ParserConstants.java @@ -1,5 +1,6 @@ package fr.inria.corese.core.next.impl.io.parser.util; +import fr.inria.corese.core.next.impl.io.common.IOConstants; import fr.inria.corese.core.util.Property; /** @@ -7,15 +8,13 @@ * used in the TriG parser. Centralizing these values helps in * maintaining the code and improves readability. */ -public final class ParserConstants { +public final class ParserConstants extends IOConstants { public static final String BASE = "@base"; public static final String PREFIX = "@prefix"; - public static final String POINT = "."; - public static final String DOUBLE_DOT = ".."; public static final String SPARQL_BASE = "BASE"; @@ -24,61 +23,33 @@ public final class ParserConstants { public static final String GRAPH = "GRAPH"; - public static final String A = "a"; - public static final String EMPTY_STRING = ""; public static final String E = "e"; // --- Delimiters and Punctuation --- - public static final String COLON = ":"; - - public static final String SEMICOLON = ";"; - - public static final String COMMA = ","; - public static final String DOT = "."; public static final String EMPTY_SQUARE_BRACKET = "[]"; // --- IRI and Literal Delimiters --- - public static final String IRI_START = "<"; - - public static final String IRI_END = ">"; - - public static final String QUOTE = "\""; - public static final String APOSTROPHE = "'"; public static final String TRIPLE_QUOTE = "\"\"\""; public static final String TRIPLE_APOSTROPHE = "'''"; - public static final String SLASH = "/"; - public static final String DOUBLE_SLASH = "//"; - - public static final String AT = "@"; - /** - * The blank node prefix. - */ - public static final String BLANK_NODE_PREFIX = "_:"; - public static final String FILE_PROTOCOL_SIMPLE = "file:/"; public static final String FILE_PROTOCOL_TRIPLE_SLASH = "file:///"; public static final String FILE_PROTOCOL = "file://"; public static final String PNAME_NS_PATTERN = "^[A-Za-z_][A-Za-z0-9_-]*$"; public static final String MINUS = "-"; - public static final String SPACE = " "; - public static final String TAB = "\t"; - public static final String LINE_FEED = "\n"; - public static final String CARRIAGE_RETURN = "\r"; - public static final String FRAGMENT = "#"; public static final String QUERY_MARK = "?"; public static final String PLUS = "+"; @@ -86,17 +57,4 @@ public final class ParserConstants { private ParserConstants() { throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); } - /** - * Returns the configured default base URI for IRI resolution. - * The value is configurable via {@code Property.Value.DEFAULT_BASE_URI}. - * - * @return the default base URI from configuration, or null if not set - */ - public static String getDefaultBaseURI() { - String configuredValue = Property.getStringValue(Property.Value.DEFAULT_BASE_URI); - if (configuredValue == null || configuredValue.isEmpty()) { - return "http://example.org/"; - } - return configuredValue; - } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/DefaultSerializerFactory.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/SerializerFactory.java similarity index 86% rename from src/main/java/fr/inria/corese/core/next/impl/io/serialization/DefaultSerializerFactory.java rename to src/main/java/fr/inria/corese/core/next/impl/io/serialization/SerializerFactory.java index 4c3cc94e2..ee8086166 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/DefaultSerializerFactory.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/SerializerFactory.java @@ -5,22 +5,21 @@ import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.IOOptions; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; +import fr.inria.corese.core.next.impl.io.common.JSONLDOptions; import fr.inria.corese.core.next.impl.io.serialization.canonical.RDFC10Canonicalizer; -import fr.inria.corese.core.next.impl.io.serialization.canonical.RDFC10Options; +import fr.inria.corese.core.next.impl.io.serialization.canonical.RDFC10SerializerOptions; import fr.inria.corese.core.next.impl.io.serialization.canonical.RDFC10Serializer; import fr.inria.corese.core.next.impl.io.serialization.nquads.NQuadsSerializerOptions; import fr.inria.corese.core.next.impl.io.serialization.nquads.NQuadsSerializer; import fr.inria.corese.core.next.impl.io.serialization.ntriples.NTriplesSerializerOptions; import fr.inria.corese.core.next.impl.io.serialization.ntriples.NTriplesSerializer; -import fr.inria.corese.core.next.impl.io.serialization.rdfxml.XMLSerializerOption; -import fr.inria.corese.core.next.impl.io.serialization.rdfxml.XMLSerializer; +import fr.inria.corese.core.next.impl.io.serialization.rdfxml.RDFXMLSerializerOption; +import fr.inria.corese.core.next.impl.io.serialization.rdfxml.RDFXMLSerializer; import fr.inria.corese.core.next.impl.io.serialization.trig.TriGSerializerOptions; import fr.inria.corese.core.next.impl.io.serialization.trig.TriGSerializer; import fr.inria.corese.core.next.impl.io.serialization.turtle.TurtleSerializerOptions; import fr.inria.corese.core.next.impl.io.serialization.turtle.TurtleSerializer; import fr.inria.corese.core.next.impl.io.serialization.jsonld.JSONLDSerializer; -import fr.inria.corese.core.next.impl.io.option.JSONLDProcessorOptions; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +31,7 @@ import java.util.function.BiFunction; /** - * Default implementation of {@link SerializerFactory}. + * Default implementation of {@link fr.inria.corese.core.next.api.io.serialization.SerializerFactory}. * This factory is responsible for creating instances of {@link RDFSerializer} * based on the requested {@link RDFFormat}. It uses a registry pattern * to map each format to its corresponding serializer constructor, @@ -45,15 +44,15 @@ * to default configurations if an incompatible type is provided. *

*/ -public class DefaultSerializerFactory implements SerializerFactory { +public class SerializerFactory implements fr.inria.corese.core.next.api.io.serialization.SerializerFactory { - private static final Logger logger = LoggerFactory.getLogger(DefaultSerializerFactory.class); + private static final Logger logger = LoggerFactory.getLogger(SerializerFactory.class); private final Map> registry; private final ValueFactory coreseValueFactory; /** - * Constructs a {@code DefaultSerializerFactory} and populates its registry + * Constructs a {@code SerializerFactory} and populates its registry * with constructors for all known {@link RDFFormat} implementations. * Each constructor attempts to cast the generic {@link IOOptions} to * the @@ -61,7 +60,7 @@ public class DefaultSerializerFactory implements SerializerFactory { * possible, * it falls back to the format's default configuration. */ - public DefaultSerializerFactory() { + public SerializerFactory() { this.coreseValueFactory = new CoreseAdaptedValueFactory(); Map> tempRegistry = new HashMap<>(); @@ -108,28 +107,28 @@ public DefaultSerializerFactory() { }); tempRegistry.put(RDFFormat.RDFXML, (model, genericConfig) -> { - if (genericConfig instanceof XMLSerializerOption specificConfig) { - return new XMLSerializer(model, specificConfig); + if (genericConfig instanceof RDFXMLSerializerOption specificConfig) { + return new RDFXMLSerializer(model, specificConfig); } else { logger.warn("Provided config for RDFXML is not RDFXmlConfig (was {}). Using default RDFXmlConfig.", genericConfig.getClass().getSimpleName()); - return new XMLSerializer(model, XMLSerializerOption.defaultConfig()); + return new RDFXMLSerializer(model, RDFXMLSerializerOption.defaultConfig()); } }); tempRegistry.put(RDFFormat.JSONLD, (model, genericConfig) -> { - if (genericConfig instanceof JSONLDProcessorOptions specificConfig) { + if (genericConfig instanceof JSONLDOptions specificConfig) { return new JSONLDSerializer(model, specificConfig); } else { logger.warn( "Provided config for JSONLD is not TitaniumJSONLDProcessorOption (was {}). Using default TitaniumJSONLDProcessorOption.", genericConfig.getClass().getSimpleName()); - return new JSONLDSerializer(model, new JSONLDProcessorOptions.Builder().build()); + return new JSONLDSerializer(model, new JSONLDOptions.Builder().build()); } }); tempRegistry.put(RDFFormat.RDFC_1_0, (model, genericConfig) -> { - if (genericConfig instanceof RDFC10Options specificConfig) { + if (genericConfig instanceof RDFC10SerializerOptions specificConfig) { RDFC10Canonicalizer canonicalizer = new RDFC10Canonicalizer( specificConfig.getHashAlgorithm(), specificConfig.getPermutationLimit(), @@ -139,7 +138,7 @@ public DefaultSerializerFactory() { } else { logger.warn("Provided config for RDFC_1_0 is not CanonicalOption (was {}). Using default CanonicalOption.", genericConfig != null ? genericConfig.getClass().getSimpleName() : "null"); - RDFC10Options defaultConfig = RDFC10Options.defaultConfig(); + RDFC10SerializerOptions defaultConfig = RDFC10SerializerOptions.defaultConfig(); RDFC10Canonicalizer canonicalizer = new RDFC10Canonicalizer( defaultConfig.getHashAlgorithm(), defaultConfig.getPermutationLimit(), @@ -151,13 +150,13 @@ public DefaultSerializerFactory() { tempRegistry.put(RDFFormat.JSONLD, (model, genericConfig) -> { - if (genericConfig instanceof JSONLDProcessorOptions specificConfig) { + if (genericConfig instanceof JSONLDOptions specificConfig) { return new JSONLDSerializer(model, specificConfig); } else { logger.warn( "Provided config for JSONLD is not TitaniumJSONLDProcessorOption (was {}). Using default TitaniumJSONLDProcessorOption.", genericConfig.getClass().getSimpleName()); - return new JSONLDSerializer(model, new JSONLDProcessorOptions.Builder().build()); + return new JSONLDSerializer(model, new JSONLDOptions.Builder().build()); } }); diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractGraphSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractGraphSerializer.java index 12a72c708..a7801bd36 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractGraphSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractGraphSerializer.java @@ -20,6 +20,8 @@ import java.util.TreeMap; import java.util.stream.Collectors; +import fr.inria.corese.core.next.impl.common.vocabulary.*; +import fr.inria.corese.core.next.impl.exception.ParsingErrorException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,7 +32,6 @@ import fr.inria.corese.core.next.api.Statement; import fr.inria.corese.core.next.api.Value; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.impl.common.literal.RDF; import fr.inria.corese.core.next.impl.exception.SerializationException; import fr.inria.corese.core.next.impl.io.serialization.option.AbstractSerializerOption; import fr.inria.corese.core.next.impl.io.serialization.option.AbstractTFamilyOption; @@ -89,12 +90,12 @@ protected AbstractGraphSerializer(Model model, AbstractSerializerOption option) * This should be called before accessing any methods specific to AbstractTFamilyConfig. * * @return The config cast to AbstractTFamilyConfig. - * @throws IllegalStateException if the config is not an instance of AbstractTFamilyConfig. + * @throws SerializationException if the config is not an instance of AbstractTFamilyConfig. */ private AbstractTFamilyOption getTFamilyOption() { if (!(option instanceof AbstractTFamilyOption)) { - throw new IllegalStateException("Current serializer configuration is not an instance of AbstractTFamilyOption. " + - "Features like prefixes, compact syntax, and pretty-printing are only available for T-Family formats."); + throw new SerializationException("Current serializer configuration is not an instance of AbstractTFamilyOption. " + + "Features like prefixes, compact syntax, and pretty-printing are only available for T-Family formats.", this.getFormatName()); } return (AbstractTFamilyOption) option; } @@ -134,13 +135,6 @@ public void write(Writer writer) throws SerializationException { } } - /** - * Returns the format name for error messages and logging. - * - * @return the format name (e.g., "TriG", "Turtle"). - */ - protected abstract String getFormatName(); - /** * Abstract method for the main statement writing, * to be implemented by subclasses to handle format-specific details. @@ -287,7 +281,7 @@ protected void writeStatement(Writer writer, Statement stmt) throws IOException */ protected void writePredicate(Writer writer, Value predicate) throws IOException { AbstractTFamilyOption tFamilyConfig = getTFamilyOption(); - if (tFamilyConfig.useRdfTypeShortcut() && predicate.stringValue().equals(SerializationConstants.RDF_TYPE)) { + if (tFamilyConfig.useRdfTypeShortcut() && predicate.equals(RDF.type.getIRI())) { writer.write(SerializationConstants.RDF_TYPE_SHORTCUT); } else { writeValue(writer, predicate); @@ -315,7 +309,7 @@ protected void writeValue(Writer writer, Value value) throws IOException { Resource bNode = (Resource) value; if (currentlyWritingBlankNodes.contains(bNode)) { - writer.write(SerializationConstants.BNODE_PREFIX + bNode.stringValue()); + writer.write(SerializationConstants.BLANK_NODE_PREFIX + bNode.stringValue()); return; } @@ -343,13 +337,12 @@ protected void writeValue(Writer writer, Value value) throws IOException { } if (!handled) { - writer.write(SerializationConstants.BNODE_PREFIX + bNode.stringValue()); + writer.write(SerializationConstants.BLANK_NODE_PREFIX + bNode.stringValue()); } currentlyWritingBlankNodes.remove(bNode); } else { - throw new IllegalArgumentException("Unsupported value type for " + getFormatName() + - " serialization: " + value.getClass().getName()); + throw new SerializationException("Unsupported value type serialization: " + value.getClass().getName(), this.getFormatName()); } } @@ -405,9 +398,9 @@ protected void writeLiteral(Writer writer, Literal literal) throws IOException { literal.getLanguage().ifPresent(lang -> { try { - writer.write(SerializationConstants.AT_SIGN + lang); + writer.write(SerializationConstants.AT + lang); } catch (IOException e) { - throw new UncheckedIOException("Error writing language tag to stream", e); + throw new SerializationException("Error writing language tag to stream", this.getFormatName(), e); } }); @@ -446,7 +439,7 @@ protected boolean shouldWriteDatatype(Literal literal) { } return option.getLiteralDatatypePolicy() == LiteralDatatypePolicyEnum.ALWAYS_TYPED || - (!datatype.stringValue().equals(SerializationConstants.XSD_STRING) && + (!datatype.equals(XSD.xsdString.getIRI()) && option.getLiteralDatatypePolicy() == LiteralDatatypePolicyEnum.MINIMAL); } @@ -468,8 +461,8 @@ protected void writeInlineBlankNode(Writer writer, List properties) t boolean firstProperty = true; for (Statement stmt : properties) { - if (stmt.getPredicate().stringValue().equals(SerializationConstants.RDF_FIRST) || - stmt.getPredicate().stringValue().equals(SerializationConstants.RDF_REST)) { + if (stmt.getPredicate().equals(RDF.first.getIRI()) || + stmt.getPredicate().equals(RDF.rest.getIRI())) { continue; } @@ -598,12 +591,12 @@ protected boolean writeRDFList(Writer writer, Resource listHead) throws IOExcept } Optional first = statements.stream() - .filter(stmt -> stmt.getPredicate().stringValue().equals(SerializationConstants.RDF_FIRST)) + .filter(stmt -> stmt.getPredicate().equals(RDF.first.getIRI())) .map(Statement::getObject) .findFirst(); Optional rest = statements.stream() - .filter(stmt -> stmt.getPredicate().stringValue().equals(SerializationConstants.RDF_REST)) + .filter(stmt -> stmt.getPredicate().equals(RDF.rest.getIRI())) .map(Statement::getObject) .findFirst(); @@ -614,7 +607,7 @@ protected boolean writeRDFList(Writer writer, Resource listHead) throws IOExcept items.add(first.get()); - if (rest.get().stringValue().equals(SerializationConstants.RDF_NIL)) { + if (rest.get().equals(RDF.nil.getIRI())) { current = null; } else if (rest.get().isBNode()) { current = (Resource) rest.get(); @@ -679,8 +672,8 @@ protected Set precomputeInlineBlankNodesAndLists() { .toList(); boolean isPartOfList = properties.stream().anyMatch(s -> - s.getPredicate().stringValue().equals(SerializationConstants.RDF_FIRST) || - s.getPredicate().stringValue().equals(SerializationConstants.RDF_REST) + s.getPredicate().equals(RDF.first.getIRI()) || + s.getPredicate().equals(RDF.rest.getIRI()) ); boolean usedAsTopLevelSubject = model.stream() @@ -720,12 +713,12 @@ private Set detectListNodes(Resource head) { } Optional first = props.stream() - .filter(s -> s.getPredicate().stringValue().equals(SerializationConstants.RDF_FIRST)) + .filter(s -> s.getPredicate().equals(RDF.first.getIRI())) .map(Statement::getObject) .findFirst(); Optional rest = props.stream() - .filter(s -> s.getPredicate().stringValue().equals(SerializationConstants.RDF_REST)) + .filter(s -> s.getPredicate().equals(RDF.rest.getIRI())) .map(Statement::getObject) .findFirst(); @@ -733,7 +726,7 @@ private Set detectListNodes(Resource head) { return Collections.emptySet(); } - if (rest.get().stringValue().equals(SerializationConstants.RDF_NIL)) { + if (rest.get().equals(RDF.nil.getIRI())) { current = null; } else if (rest.get().isBNode()) { current = (Resource) rest.get(); @@ -753,14 +746,14 @@ private Set detectListNodes(Resource head) { protected boolean isRDFListHead(Resource bNode) { boolean hasFirstAndRest = model.stream() .filter(stmt -> stmt.getSubject().equals(bNode)) - .anyMatch(stmt -> stmt.getPredicate().stringValue().equals(SerializationConstants.RDF_FIRST)) + .anyMatch(stmt -> stmt.getPredicate().equals(RDF.first.getIRI())) && model.stream() .filter(stmt -> stmt.getSubject().equals(bNode)) - .anyMatch(stmt -> stmt.getPredicate().stringValue().equals(SerializationConstants.RDF_REST)); + .anyMatch(stmt -> stmt.getPredicate().equals(RDF.rest.getIRI())); boolean isObjectOfRest = model.stream() - .filter(stmt -> stmt.getPredicate().stringValue().equals(SerializationConstants.RDF_REST)) + .filter(stmt -> stmt.getPredicate().equals(RDF.rest.getIRI())) .anyMatch(stmt -> stmt.getObject().equals(bNode)); return hasFirstAndRest && !isObjectOfRest; @@ -854,11 +847,11 @@ protected String getPrefixedName(String iriString) { * @return A suggested prefix, or null if suggestion is not possible. */ protected String getSuggestedPrefix(String namespace) { - if (namespace.equals(SerializationConstants.RDF_NS)) return "rdf"; - if (namespace.equals(SerializationConstants.RDFS_NS)) return "rdfs"; - if (namespace.equals(SerializationConstants.XSD_NS)) return "xsd"; - if (namespace.equals(SerializationConstants.OWL_NS)) return "owl"; - if (namespace.equals(SerializationConstants.FOAF_NS)) return "foaf"; + if (namespace.equals(RDF.getVocabularyNamespace())) return RDF.getVocabularyPreferredPrefix(); + if (namespace.equals(RDFS.getVocabularyNamespace())) return RDFS.getVocabularyPreferredPrefix(); + if (namespace.equals(XSD.getVocabularyNamespace())) return XSD.getVocabularyPreferredPrefix(); + if (namespace.equals(OWL.getVocabularyNamespace())) return OWL.getVocabularyPreferredPrefix(); + if (namespace.equals(FOAF.getVocabularyNamespace())) return FOAF.getVocabularyPreferredPrefix(); String base = namespace; if (base.endsWith(SerializationConstants.HASH) || base.endsWith(SerializationConstants.SLASH)) { @@ -923,12 +916,12 @@ protected String getSuggestedPrefix(String namespace) { * Called only if strictMode is enabled. * * @param value The {@link Value} to validate. - * @throws IllegalArgumentException if the value is null or invalid according to strict rules. + * @throws SerializationException if the value is null or invalid according to strict rules. */ protected void validateValue(Value value) { if (value == null) { logger.warn("Null value encountered where a non-null value was expected for {} serialization. This will lead to an IllegalArgumentException if strict mode is enabled.", getFormatName()); - throw new IllegalArgumentException("Value cannot be null in {} format when strictMode is enabled." + getFormatName()); + throw new SerializationException("Value cannot be null in {} format when strictMode is enabled.", getFormatName()); } if (option.isStrictMode() && value.isLiteral()) { @@ -942,21 +935,21 @@ protected void validateValue(Value value) { * Called only if strictMode is enabled. * * @param literal The {@link Literal} to validate. - * @throws IllegalArgumentException if the literal is invalid (e.g., language tag with wrong datatype, + * @throws SerializationException if the literal is invalid (e.g., language tag with wrong datatype, * or rdf:langString literal without language tag). */ protected void validateLiteral(Literal literal) { IRI datatype = literal.getDatatype(); if (literal.getLanguage().isPresent()) { - if (datatype == null || !datatype.stringValue().equals(RDF.LANGSTRING.getIRI().stringValue())) { - throw new IllegalArgumentException( - "A literal with a language tag must use the rdf:langString datatype. Found: " + (datatype != null ? datatype.stringValue() : "null")); + if (datatype == null || !datatype.equals(RDF.langString.getIRI())) { + throw new SerializationException( + "A literal with a language tag must use the rdf:langString datatype. Found: " + (datatype != null ? datatype.stringValue() : "null"), this.getFormatName()); } } else { - if (datatype != null && datatype.stringValue().equals(RDF.LANGSTRING.getIRI().stringValue())) { - throw new IllegalArgumentException( - "An rdf:langString literal must have a language tag."); + if (datatype != null && datatype.equals(RDF.langString.getIRI())) { + throw new SerializationException( + "An rdf:langString literal must have a language tag.", this.getFormatName()); } } } @@ -968,7 +961,7 @@ protected void validateLiteral(Literal literal) { * Called only if strictMode and validateURIs are enabled. * * @param iri The {@link IRI} to validate. - * @throws IllegalArgumentException if the IRI contains invalid characters. + * @throws SerializationException if the IRI contains invalid characters. */ protected void validateIRI(IRI iri) { String iriString = iri.stringValue(); @@ -977,7 +970,7 @@ protected void validateIRI(IRI iri) { iriString.contains(SerializationConstants.QUOTE) || iriString.contains(SerializationConstants.LT) || iriString.contains(SerializationConstants.GT)) { - throw new IllegalArgumentException("IRI contains illegal characters (space, quotes, angle brackets) for the unescaped form of " + getFormatName() + ": " + iriString); + throw new SerializationException("IRI contains illegal characters (space, quotes, angle brackets) for the unescaped form : " + iriString, this.getFormatName()); } } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractLineBasedSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractLineBasedSerializer.java index f0af2a595..48081413f 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractLineBasedSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/base/AbstractLineBasedSerializer.java @@ -8,6 +8,7 @@ import java.util.Objects; import java.util.Set; +import fr.inria.corese.core.next.impl.common.literal.XSD; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,11 +77,6 @@ public void write(Writer writer) throws SerializationException { } } - /** - * Returns the name of the format for error messages. - */ - protected abstract String getFormatName(); - /** * Handles writing the context part of a statement. * This is where N-Triples and N-Quads differ. @@ -132,7 +128,7 @@ private void writeStatement(Writer writer, Statement stmt) throws IOException { * @param writer the {@link Writer} to which the value will be written. * @param value the {@link Value} to write. * @throws IOException if an I/O error occurs. - * @throws IllegalArgumentException if the provided value is null or an unsupported type. + * @throws SerializationException if the provided value is null or an unsupported type. */ protected void writeValue(Writer writer, Value value) throws IOException { validateValue(value); @@ -145,10 +141,10 @@ protected void writeValue(Writer writer, Value value) throws IOException { } else if (value.isBNode()) { writeBlankNode(writer, (Resource) value); } else { - throw new IllegalArgumentException("Unsupported resource type for " + getFormatName() + " serialization: " + value.getClass().getName()); + throw new SerializationException("Unsupported resource type for serialization: " + value.getClass().getName(), this.getFormatName()); } } else { - throw new IllegalArgumentException("Unsupported value type for " + getFormatName() + " serialization: " + value.getClass().getName()); + throw new SerializationException("Unsupported value type for serialization: " + value.getClass().getName(), this.getFormatName()); } } @@ -167,16 +163,16 @@ protected void writeLiteral(Writer writer, Literal literal) throws IOException { literal.getLanguage().ifPresent(lang -> { try { - writer.write(SerializationConstants.AT_SIGN + lang); + writer.write(SerializationConstants.AT + lang); } catch (IOException e) { - throw new UncheckedIOException("Error writing language tag to stream", e); + throw new SerializationException("Error writing language tag to stream", this.getFormatName(), e); } }); IRI datatype = literal.getDatatype(); if (!literal.getLanguage().isPresent() && datatype != null && (config.getLiteralDatatypePolicy() == LiteralDatatypePolicyEnum.ALWAYS_TYPED || - (config.getLiteralDatatypePolicy() == LiteralDatatypePolicyEnum.MINIMAL && !datatype.stringValue().equals(SerializationConstants.XSD_STRING)))) { + (config.getLiteralDatatypePolicy() == LiteralDatatypePolicyEnum.MINIMAL && !datatype.equals(XSD.STRING.getIRI())))) { writer.write(SerializationConstants.DATATYPE_SEPARATOR); writeIRI(writer, datatype); } @@ -190,7 +186,6 @@ protected void writeLiteral(Writer writer, Literal literal) throws IOException { * @param writer the {@link Writer} to which the IRI will be written. * @param iri the {@link IRI} to write. * @throws IOException if an I/O error occurs. - * @throws IllegalArgumentException if the IRI is invalid (e.g., contains spaces) and strict mode/URI validation is enabled. */ protected void writeIRI(Writer writer, IRI iri) throws IOException { if (config.isStrictMode() && config.validateURIs()) { @@ -210,7 +205,7 @@ protected void writeIRI(Writer writer, IRI iri) throws IOException { * @throws IOException if an I/O error occurs. */ protected void writeBlankNode(Writer writer, Resource blankNode) throws IOException { - writer.write(SerializationConstants.BNODE_PREFIX); + writer.write(SerializationConstants.BLANK_NODE_PREFIX); writer.write(blankNode.stringValue()); } @@ -230,7 +225,7 @@ protected String escapeIRI(String iri) { iri.contains(SerializationConstants.LT) || iri.contains(SerializationConstants.GT)) { - throw new IllegalArgumentException("Invalid IRI for " + getFormatName() + " (contains illegal characters inside '<>'): " + iri); + throw new SerializationException("Invalid IRI (contains illegal characters inside '<>'): " + iri, this.getFormatName()); } return config.escapeUnicode() ? escapeUnicodeString(iri) : iri; @@ -325,7 +320,7 @@ protected String escapeUnicodeString(String value) { protected void validateValue(Value value) { if (value == null) { logger.warn("Encountered a null value where a non-null value was expected for " + getFormatName() + " serialization. This will result in an IllegalArgumentException if strict mode is enabled."); - throw new IllegalArgumentException("Value cannot be null in " + getFormatName() + " format when strictMode is enabled."); + throw new SerializationException("Value cannot be null in " + getFormatName() + " format when strictMode is enabled.", this.getFormatName()); } if (value.isLiteral()) { @@ -341,7 +336,7 @@ protected void validateValue(Value value) { * Only called if strictMode is enabled. * * @param literal The {@link Literal} to validate. - * @throws IllegalArgumentException if the literal is invalid (e.g., language tag with wrong datatype, + * @throws SerializationException if the literal is invalid (e.g., language tag with wrong datatype, * or rdf:langString literal missing a language tag). */ protected void validateLiteral(Literal literal) { @@ -349,13 +344,13 @@ protected void validateLiteral(Literal literal) { if (literal.getLanguage().isPresent()) { if (datatype == null || !datatype.stringValue().equals(RDF.LANGSTRING.getIRI().stringValue())) { - throw new IllegalArgumentException( - "Literal with language tag must use rdf:langString datatype. Found: " + (datatype != null ? datatype.stringValue() : "null")); + throw new SerializationException( + "Literal with language tag must use rdf:langString datatype. Found: " + (datatype != null ? datatype.stringValue() : "null"), this.getFormatName()); } } else { if (datatype != null && datatype.stringValue().equals(RDF.LANGSTRING.getIRI().stringValue())) { - throw new IllegalArgumentException( - "rdf:langString literal must have a language tag."); + throw new SerializationException( + "rdf:langString literal must have a language tag.", this.getFormatName()); } } } @@ -367,7 +362,7 @@ protected void validateLiteral(Literal literal) { * Only called if strictMode and validateURIs are enabled. * * @param iri The {@link IRI} to validate. - * @throws IllegalArgumentException if the IRI contains invalid characters. + * @throws SerializationException if the IRI contains invalid characters. */ protected void validateIRI(IRI iri) { String iriString = iri.stringValue(); @@ -375,7 +370,7 @@ protected void validateIRI(IRI iri) { iriString.contains(SerializationConstants.QUOTE) || iriString.contains(SerializationConstants.LT) || iriString.contains(SerializationConstants.GT)) { - throw new IllegalArgumentException("IRI contains illegal characters (space, quote, angle brackets) for " + getFormatName() + " unescaped form: " + iriString); + throw new SerializationException("IRI contains illegal characters (space, quote, angle brackets) unescaped form: " + iriString, this.getFormatName()); } } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Canonicalizer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Canonicalizer.java index 9187697c0..c78d70144 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Canonicalizer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Canonicalizer.java @@ -20,7 +20,7 @@ */ public class RDFC10Canonicalizer { - private final RDFC10Options.HashAlgorithm hashAlgorithm; + private final RDFC10SerializerOptions.HashAlgorithm hashAlgorithm; private final int maxCallsHashNDegreeQuads; private final StatementUtils statementUtils; private int callsHashNDegreeQuads = 0; @@ -34,7 +34,7 @@ public class RDFC10Canonicalizer { * @param valueFactory The factory for creating RDF values, used by StatementUtils for * blank node replacement and serialization. */ - public RDFC10Canonicalizer(RDFC10Options.HashAlgorithm hashAlgorithm, int maxCalls, ValueFactory valueFactory) { + public RDFC10Canonicalizer(RDFC10SerializerOptions.HashAlgorithm hashAlgorithm, int maxCalls, ValueFactory valueFactory) { this.hashAlgorithm = Objects.requireNonNull(hashAlgorithm, "Hash algorithm cannot be null"); this.maxCallsHashNDegreeQuads = maxCalls; this.statementUtils = new StatementUtils(valueFactory); @@ -390,7 +390,7 @@ private List replaceBlankNodesAndSort(List statements, Map */ private String hash(String data) { try { - String algorithm = hashAlgorithm == RDFC10Options.HashAlgorithm.SHA_384 ? + String algorithm = hashAlgorithm == RDFC10SerializerOptions.HashAlgorithm.SHA_384 ? SerializationConstants.SHA_384 : SerializationConstants.SHA_256; MessageDigest digest = MessageDigest.getInstance(algorithm); byte[] hash = digest.digest(data.getBytes(StandardCharsets.UTF_8)); diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Serializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Serializer.java index 6ec01ad27..87c19afd5 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Serializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Serializer.java @@ -35,14 +35,14 @@ public class RDFC10Serializer extends AbstractLineBasedSerializer { * @param config The configuration options for the canonicalization process. * @param canonicalizer The canonicalizer component to use. */ - public RDFC10Serializer(Model model, RDFC10Options config, RDFC10Canonicalizer canonicalizer) { + public RDFC10Serializer(Model model, RDFC10SerializerOptions config, RDFC10Canonicalizer canonicalizer) { super(model, config); this.canonicalizer = Objects.requireNonNull(canonicalizer); } @Override - public String getFormatName() { - return RDFFormat.RDFC_1_0.getName(); + public RDFFormat getRDFFormat() { + return RDFFormat.RDFC_1_0; } /** diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Options.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerOptions.java similarity index 86% rename from src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Options.java rename to src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerOptions.java index 19395fec0..afc6ef596 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10Options.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerOptions.java @@ -11,7 +11,7 @@ * Use the {@link Builder} class to create instances of {@code CanonicalOption}. * A predefined default configuration is available via {@link #defaultConfig()}. */ -public class RDFC10Options extends AbstractSerializerOption { +public class RDFC10SerializerOptions extends AbstractSerializerOption { /** * Enumeration for the supported hashing algorithms. @@ -32,7 +32,7 @@ public enum HashAlgorithm { * * @param builder The builder instance containing the desired configuration values. */ - protected RDFC10Options(Builder builder) { + protected RDFC10SerializerOptions(Builder builder) { super(builder); this.hashAlgorithm = builder.hashAlgorithm; this.depthFactor = builder.depthFactor; @@ -70,7 +70,7 @@ public int getPermutationLimit() { } /** - * Public Builder for {@link RDFC10Options}. + * Public Builder for {@link RDFC10SerializerOptions}. * Provides a fluent API for constructing {@code CanonicalOption} instances with default values * specific to the Canonical RDF format. */ @@ -88,13 +88,13 @@ public Builder() { } /** - * Builds a new {@link RDFC10Options} instance with the configured values. + * Builds a new {@link RDFC10SerializerOptions} instance with the configured values. * * @return A new instance of {@code CanonicalOption}. */ @Override - public RDFC10Options build() { - return new RDFC10Options(this); + public RDFC10SerializerOptions build() { + return new RDFC10SerializerOptions(this); } } @@ -103,7 +103,7 @@ public RDFC10Options build() { * * @return A new {@code CanonicalOption} with default settings. */ - public static RDFC10Options defaultConfig() { + public static RDFC10SerializerOptions defaultConfig() { return new Builder().build(); } @@ -113,7 +113,7 @@ public static RDFC10Options defaultConfig() { * * @return A new {@code Builder} instance. */ - public static RDFC10Options.Builder builder() { - return new RDFC10Options.Builder(); + public static RDFC10SerializerOptions.Builder builder() { + return new RDFC10SerializerOptions.Builder(); } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializer.java index 9e637ac1d..ef4b03477 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializer.java @@ -5,10 +5,11 @@ import com.apicatalog.jsonld.api.FromRdfApi; import com.apicatalog.jsonld.document.RdfDocument; import fr.inria.corese.core.next.api.Model; +import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; import fr.inria.corese.core.next.api.io.IOOptions; import fr.inria.corese.core.next.impl.exception.SerializationException; -import fr.inria.corese.core.next.impl.io.option.JSONLDProcessorOptions; +import fr.inria.corese.core.next.impl.io.common.JSONLDOptions; import java.io.IOException; import java.io.Writer; @@ -38,7 +39,7 @@ public JSONLDSerializer(Model model, IOOptions config) { * @param model */ public JSONLDSerializer(Model model) { - this(model, new JSONLDProcessorOptions.Builder().build()); + this(model, new JSONLDOptions.Builder().build()); } @Override @@ -47,7 +48,7 @@ public void write(Writer writer) throws SerializationException { try { FromRdfApi fromRdfApi = JsonLd.fromRdf(RdfDocument.of(adapter)); - if(this.config instanceof JSONLDProcessorOptions options) { + if(this.config instanceof JSONLDOptions options) { fromRdfApi.options(options.getJsonLdOptions()); } @@ -57,4 +58,9 @@ public void write(Writer writer) throws SerializationException { throw new SerializationException("Error during serialization", "JSONLD", e); } } + + @Override + public RDFFormat getRDFFormat() { + return RDFFormat.JSONLD; + } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/TitaniumRDFDatasetSerializationAdapter.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/TitaniumRDFDatasetSerializationAdapter.java index 15eced66d..085446c98 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/TitaniumRDFDatasetSerializationAdapter.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/TitaniumRDFDatasetSerializationAdapter.java @@ -1,7 +1,5 @@ package fr.inria.corese.core.next.impl.io.serialization.jsonld; -import static fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants.DEFAULT_GRAPH_IRI; - import java.math.BigDecimal; import java.math.BigInteger; import java.time.Duration; @@ -38,6 +36,7 @@ import fr.inria.corese.core.next.impl.common.vocabulary.RDF; import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.exception.SerializationException; +import fr.inria.corese.core.next.impl.io.common.IOConstants; import fr.inria.corese.core.next.impl.io.parser.util.ParserConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,7 +108,7 @@ public Optional getGraph(RdfResource graphName) { @Override public boolean contains(RdfTriple triple) { Resource graphResource = null; - if (graphName != null && !graphName.getValue().equals(DEFAULT_GRAPH_IRI)) { + if (graphName != null && !graphName.getValue().equals(IOConstants.getDefaultBaseURI())) { graphResource = toResource(graphName); } return model.contains(toResource(triple.getSubject()), toIRI(triple.getPredicate()), toValue(triple.getObject()), graphResource); @@ -119,7 +118,7 @@ public boolean contains(RdfTriple triple) { public List toList() { List result = new ArrayList<>(); Resource graphResource = null; - if (graphName != null && !graphName.getValue().equals(DEFAULT_GRAPH_IRI)) { + if (graphName != null && !graphName.getValue().equals(IOConstants.getDefaultBaseURI())) { graphResource = toResource(graphName); } model.getStatements(null, null, null, graphResource).forEach(statement -> result.add(toRdfNQuad(statement))); diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializer.java index 2995af81c..5de866837 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializer.java @@ -50,13 +50,13 @@ public NQuadsSerializer(Model model, NQuadsSerializerOptions config) { } /** - * Returns the format name for error messages and logging. + * Retrieves the RDF format supported by this serializer, which is N-Quads. * - * @return "N-Quads" + * @return {@link RDFFormat#NQUADS}. */ @Override - protected String getFormatName() { - return RDFFormat.NQUADS.getName(); + public RDFFormat getRDFFormat() { + return RDFFormat.NQUADS; } /** diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializer.java index 41024dd61..d4b1370e7 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializer.java @@ -48,15 +48,14 @@ public NTriplesSerializer(Model model, NTriplesSerializerOptions config) { super(model, config); Objects.requireNonNull(config, "NTriplesConfig cannot be null"); } - /** - * Returns the format name for error messages and logging. + * Retrieves the RDF format supported by this serializer, which is N-TRIPLES. * - * @return "N-Triples" + * @return {@link RDFFormat#NTRIPLES}. */ @Override - protected String getFormatName() { - return RDFFormat.NTRIPLES.getName(); + public RDFFormat getRDFFormat() { + return RDFFormat.NTRIPLES; } /** diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializer.java similarity index 94% rename from src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializer.java rename to src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializer.java index 6e1097eb9..5e794fa24 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializer.java @@ -15,6 +15,8 @@ import java.util.Set; import java.util.stream.Collectors; +import fr.inria.corese.core.next.api.base.io.RDFFormat; +import fr.inria.corese.core.next.impl.common.vocabulary.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,12 +48,12 @@ *

Advanced features such as handling XML schemata, specific RDF/XML graph structures (e.g., rdf:Bag, rdf:Seq, rdf:Alt), * and full blank node syntax optimization are simplified in this version.

*/ -public class XMLSerializer implements RDFSerializer { +public class RDFXMLSerializer implements RDFSerializer { - private static final Logger logger = LoggerFactory.getLogger(XMLSerializer.class); + private static final Logger logger = LoggerFactory.getLogger(RDFXMLSerializer.class); private final Model model; - private final XMLSerializerOption config; + private final RDFXMLSerializerOption config; private final Map iriToPrefixMapping; private final Map prefixToIriMapping; private final Map blankNodeIds; @@ -60,23 +62,23 @@ public class XMLSerializer implements RDFSerializer { /** * Constructs a new {@code XmlSerializer} instance with the specified model and default configuration. - * The default configuration is obtained from {@link XMLSerializerOption#defaultConfig()}. + * The default configuration is obtained from {@link RDFXMLSerializerOption#defaultConfig()}. * * @param model the {@link Model} to serialize. Must not be null. * @throws NullPointerException if the provided model is null. */ - public XMLSerializer(Model model) { - this(model, XMLSerializerOption.defaultConfig()); + public RDFXMLSerializer(Model model) { + this(model, RDFXMLSerializerOption.defaultConfig()); } /** * Constructs a new {@code XmlSerializer} instance with the specified model and custom configuration. * * @param model the {@link Model} to serialize. Must not be null. - * @param config the {@link XMLSerializerOption} to use for serialization. Must not be null. + * @param config the {@link RDFXMLSerializerOption} to use for serialization. Must not be null. * @throws NullPointerException if the provided model or configuration is null. */ - public XMLSerializer(Model model, XMLSerializerOption config) { + public RDFXMLSerializer(Model model, RDFXMLSerializerOption config) { this.model = Objects.requireNonNull(model, "Model cannot be null"); this.config = Objects.requireNonNull(config, "Configuration cannot be null"); this.iriToPrefixMapping = new HashMap<>(); @@ -117,6 +119,11 @@ public void write(Writer writer) throws SerializationException { } } + @Override + public RDFFormat getRDFFormat() { + return RDFFormat.RDFXML; + } + /** * Writes the XML declaration at the beginning of the document. * @@ -169,8 +176,8 @@ private void writeRdfRootElement(Writer writer) throws IOException { * @throws IOException if an I/O error occurs. */ private void writeNamespaceAttributes(Writer writer) throws IOException { - if (!iriToPrefixMapping.containsKey(SerializationConstants.RDF_NS)) { - addPrefixMapping(SerializationConstants.RDF_NS, "rdf"); + if (!iriToPrefixMapping.containsKey(RDF.getVocabularyNamespace())) { + addPrefixMapping(RDF.getVocabularyNamespace(), RDF.getVocabularyPreferredPrefix()); } List prefixes = new ArrayList<>(prefixToIriMapping.keySet()); @@ -437,7 +444,7 @@ private boolean shouldWriteDatatype(Literal literal) { } return config.getLiteralDatatypePolicy() == LiteralDatatypePolicyEnum.ALWAYS_TYPED || - (!datatype.stringValue().equals(SerializationConstants.XSD_STRING) && + (!datatype.equals(XSD.xsdString.getIRI()) && config.getLiteralDatatypePolicy() == LiteralDatatypePolicyEnum.MINIMAL); } @@ -474,11 +481,11 @@ private String getNamespace(String iriString) { */ private String getSuggestedPrefix(String namespace) { - if (namespace.equals(SerializationConstants.RDF_NS)) return "rdf"; - if (namespace.equals(SerializationConstants.RDFS_NS)) return "rdfs"; - if (namespace.equals(SerializationConstants.XSD_NS)) return "xsd"; - if (namespace.equals(SerializationConstants.OWL_NS)) return "owl"; - if (namespace.equals(SerializationConstants.FOAF_NS)) return "foaf"; + if (namespace.equals(RDF.getVocabularyNamespace())) return RDF.getVocabularyPreferredPrefix(); + if (namespace.equals(RDFS.getVocabularyNamespace())) return RDFS.getVocabularyPreferredPrefix(); + if (namespace.equals(XSD.getVocabularyNamespace())) return XSD.getVocabularyPreferredPrefix(); + if (namespace.equals(OWL.getVocabularyNamespace())) return OWL.getVocabularyPreferredPrefix(); + if (namespace.equals(FOAF.getVocabularyNamespace())) return FOAF.getVocabularyPreferredPrefix(); String base = namespace; diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializerOption.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializerOption.java similarity index 92% rename from src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializerOption.java rename to src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializerOption.java index 119d7702f..bf35b0372 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializerOption.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializerOption.java @@ -1,5 +1,9 @@ package fr.inria.corese.core.next.impl.io.serialization.rdfxml; +import fr.inria.corese.core.next.impl.common.vocabulary.OWL; +import fr.inria.corese.core.next.impl.common.vocabulary.RDF; +import fr.inria.corese.core.next.impl.common.vocabulary.RDFS; +import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.io.serialization.option.AbstractSerializerOption; import fr.inria.corese.core.next.impl.io.serialization.option.LiteralDatatypePolicyEnum; import fr.inria.corese.core.next.impl.io.serialization.option.PrefixOrderingEnum; @@ -18,7 +22,7 @@ *

Use the {@link Builder} class to create instances of {@code XmlConfig}. * A predefined default configuration is available via {@link #defaultConfig()}.

*/ -public class XMLSerializerOption extends AbstractSerializerOption { +public class RDFXMLSerializerOption extends AbstractSerializerOption { /** * Whether prefix declarations (e.g., `xmlns:prefix="uri"`) should be used for compact IRIs. @@ -78,7 +82,7 @@ public class XMLSerializerOption extends AbstractSerializerOption { * * @param builder The builder instance containing the desired configuration values. */ - protected XMLSerializerOption(Builder builder) { + protected RDFXMLSerializerOption(Builder builder) { super(builder); this.usePrefixes = builder.usePrefixes; @@ -186,7 +190,7 @@ public boolean useMultilineLiterals() { /** - * Public Builder for {@link XMLSerializerOption}. + * Public Builder for {@link RDFXMLSerializerOption}. * Provides a fluent API for constructing {@code XmlConfig} instances with default values * specific to the RDF/XML format. */ @@ -213,10 +217,10 @@ public Builder() { stableBlankNodeIds(true); // Good for reproducible RDF/XML outputs escapeUnicode(false); // Usually direct UTF-8 for RDF/XML, not unicode escapes - addCustomPrefix("rdf", SerializationConstants.RDF_NS); - addCustomPrefix("rdfs", SerializationConstants.RDFS_NS); - addCustomPrefix("xsd", SerializationConstants.XSD_NS); - addCustomPrefix("owl", SerializationConstants.OWL_NS); + addCustomPrefix(RDF.getVocabularyPreferredPrefix(), RDF.getVocabularyNamespace()); + addCustomPrefix(RDFS.getVocabularyPreferredPrefix(), RDFS.getVocabularyNamespace()); + addCustomPrefix(XSD.getVocabularyPreferredPrefix(), XSD.getVocabularyNamespace()); + addCustomPrefix(OWL.getVocabularyPreferredPrefix(), OWL.getVocabularyNamespace()); } @@ -350,13 +354,13 @@ public Builder useMultilineLiterals(boolean useMultilineLiterals) { } /** - * Builds and returns a new {@link XMLSerializerOption} instance with the current builder settings. + * Builds and returns a new {@link RDFXMLSerializerOption} instance with the current builder settings. * * @return A new {@code XmlConfig} instance. */ @Override - public XMLSerializerOption build() { - return new XMLSerializerOption(this); + public RDFXMLSerializerOption build() { + return new RDFXMLSerializerOption(this); } } @@ -367,7 +371,7 @@ public XMLSerializerOption build() { * * @return A {@code XmlConfig} instance with default settings. */ - public static XMLSerializerOption defaultConfig() { + public static RDFXMLSerializerOption defaultConfig() { return new Builder().build(); } } \ No newline at end of file diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializer.java index 9378dc8e8..7177757b6 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializer.java @@ -14,6 +14,7 @@ import fr.inria.corese.core.next.api.Model; import fr.inria.corese.core.next.api.Resource; import fr.inria.corese.core.next.api.Statement; +import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.impl.io.serialization.base.AbstractGraphSerializer; import fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants; @@ -65,16 +66,6 @@ public TriGSerializer(Model model, TriGSerializerOptions config) { Objects.requireNonNull(config, "TriGConfig cannot be null"); } - /** - * Returns the format name for error messages and logging. - * - * @return "TriG" - */ - @Override - protected String getFormatName() { - return "TriG"; - } - /** * Helper method to safely cast the generic config to TriGConfig. * This should be called before accessing any methods specific to TriGConfig. @@ -292,4 +283,13 @@ protected String escapeMultilineLiteralString(String value) { SerializationConstants.BACK_SLASH + SerializationConstants.QUOTE + SerializationConstants.BACK_SLASH + SerializationConstants.QUOTE); } + /** + * Retrieves the RDF format supported by this serializer, which is Trig. + * + * @return {@link RDFFormat#TRIG}. + */ + @Override + public RDFFormat getRDFFormat() { + return RDFFormat.TRIG; + } } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptions.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptions.java index 8ecd8b9aa..a1a63e06f 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptions.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptions.java @@ -1,5 +1,9 @@ package fr.inria.corese.core.next.impl.io.serialization.trig; +import fr.inria.corese.core.next.impl.common.vocabulary.OWL; +import fr.inria.corese.core.next.impl.common.vocabulary.RDF; +import fr.inria.corese.core.next.impl.common.vocabulary.RDFS; +import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.io.serialization.option.AbstractTFamilyOption; import fr.inria.corese.core.next.impl.io.serialization.option.BlankNodeStyleEnum; import fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants; @@ -41,10 +45,10 @@ public Builder() { useCollections(false); Map commonTriGPrefixes = new HashMap<>(); - commonTriGPrefixes.put("rdf", SerializationConstants.RDF_NS); - commonTriGPrefixes.put("rdfs", SerializationConstants.RDFS_NS); - commonTriGPrefixes.put("xsd", SerializationConstants.XSD_NS); - commonTriGPrefixes.put("owl", SerializationConstants.OWL_NS); + commonTriGPrefixes.put(RDF.getVocabularyPreferredPrefix(), RDF.getVocabularyNamespace()); + commonTriGPrefixes.put(RDFS.getVocabularyPreferredPrefix(), RDFS.getVocabularyNamespace()); + commonTriGPrefixes.put(XSD.getVocabularyPreferredPrefix(), XSD.getVocabularyNamespace()); + commonTriGPrefixes.put(OWL.getVocabularyPreferredPrefix(), OWL.getVocabularyNamespace()); addCustomPrefixes(commonTriGPrefixes); } diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializer.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializer.java index 963042bff..917c4f664 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializer.java @@ -4,6 +4,7 @@ import java.io.Writer; import java.util.Objects; +import fr.inria.corese.core.next.api.base.io.RDFFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,15 +61,14 @@ public TurtleSerializer(Model model, TurtleSerializerOptions config) { super(model, config); Objects.requireNonNull(config, "TurtleConfig cannot be null"); } - /** - * Returns the format name for error messages and logging. + * Retrieves the RDF format supported by this serializer, which is Turtle * - * @return "Turtle" + * @return {@link RDFFormat#TURTLE}. */ @Override - protected String getFormatName() { - return "Turtle"; + public RDFFormat getRDFFormat() { + return RDFFormat.TURTLE; } /** diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptions.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptions.java index cc9561b2e..80aecf81b 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptions.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptions.java @@ -1,5 +1,9 @@ package fr.inria.corese.core.next.impl.io.serialization.turtle; +import fr.inria.corese.core.next.impl.common.vocabulary.OWL; +import fr.inria.corese.core.next.impl.common.vocabulary.RDF; +import fr.inria.corese.core.next.impl.common.vocabulary.RDFS; +import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.io.serialization.option.AbstractTFamilyOption; import fr.inria.corese.core.next.impl.io.serialization.option.BlankNodeStyleEnum; import fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants; @@ -42,10 +46,10 @@ public Builder() { blankNodeStyle(BlankNodeStyleEnum.ANONYMOUS); Map commonTurtlePrefixes = new HashMap<>(); - commonTurtlePrefixes.put("rdf", SerializationConstants.RDF_NS); - commonTurtlePrefixes.put("rdfs", SerializationConstants.RDFS_NS); - commonTurtlePrefixes.put("xsd", SerializationConstants.XSD_NS); - commonTurtlePrefixes.put("owl", SerializationConstants.OWL_NS); + commonTurtlePrefixes.put(RDF.getVocabularyPreferredPrefix(), RDF.getVocabularyNamespace()); + commonTurtlePrefixes.put(RDFS.getVocabularyPreferredPrefix(), RDFS.getVocabularyNamespace()); + commonTurtlePrefixes.put(XSD.getVocabularyPreferredPrefix(), XSD.getVocabularyNamespace()); + commonTurtlePrefixes.put(OWL.getVocabularyPreferredPrefix(), OWL.getVocabularyNamespace()); addCustomPrefixes(commonTurtlePrefixes); diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/SerializationConstants.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/SerializationConstants.java index 6e4ae0098..9c4d08c6d 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/SerializationConstants.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/SerializationConstants.java @@ -1,10 +1,7 @@ package fr.inria.corese.core.next.impl.io.serialization.util; -import fr.inria.corese.core.next.impl.common.vocabulary.OWL; -import fr.inria.corese.core.next.impl.common.vocabulary.RDF; -import fr.inria.corese.core.next.impl.common.vocabulary.RDFS; -import fr.inria.corese.core.next.impl.common.vocabulary.XSD; +import fr.inria.corese.core.next.impl.io.common.IOConstants; /** * Provides common constants used throughout the RDF serialization process. @@ -12,63 +9,20 @@ * as well as various special characters and strings used in serialization formats * like Turtle, N-Triples, and N-Quads. */ -public final class SerializationConstants { +public final class SerializationConstants extends IOConstants { private SerializationConstants() { + super(); // Private constructor to prevent instantiation } - // --- Standard RDF/RDFS/XSD/OWL URIs --- - public static final String RDF_NS = RDF.HTML.getNamespace(); - public static final String RDF_TYPE = RDF.type.getIRI().stringValue(); - public static final String RDF_FIRST = RDF.first.getIRI().stringValue(); - public static final String RDF_REST = RDF.rest.getIRI().stringValue(); - public static final String RDF_NIL = RDF.nil.getIRI().stringValue(); - - - public static final String RDFS_NS = RDFS.Resource.getNamespace(); - - public static final String XSD_NS = XSD.xsdString.getNamespace(); - - public static final String OWL_NS = OWL.NS; - - public static final String XSD_STRING = XSD_NS + "string"; - public static final String XSD_INTEGER = XSD_NS + "integer"; - public static final String XSD_DECIMAL = XSD_NS + "decimal"; - public static final String XSD_DOUBLE = XSD_NS + "double"; - public static final String XSD_BOOLEAN = XSD_NS + "boolean"; - public static final String XSD_DATETIME = XSD_NS + "dateTime"; - - // Nouveau namespace FOAF - public static final String FOAF_NS = "http://xmlns.com/foaf/0.1/"; - - // --- Common Delimiters and Special Characters in Serialization --- - public static final String SPACE = " "; - public static final String TAB = "\t"; - public static final String LINE_FEED = "\n"; - public static final String CARRIAGE_RETURN = "\r"; public static final String NEWLINE = LINE_FEED; - - public static final String POINT = "."; - public static final String SEMICOLON = ";"; - public static final String COMMA = ","; - public static final String AT_SIGN = "@"; public static final String CARET = "^"; - public static final String LT = "<"; // Less than - public static final String GT = ">"; // Greater than - public static final String QUOTE = "\""; - public static final String COLON = ":"; public static final String BACK_SLASH = "\\"; - // Nouveaux délimiteurs - public static final String HASH = "#"; - public static final String SLASH = "/"; - // Turtle-specific - public static final String RDF_TYPE_SHORTCUT = "a"; - public static final String BNODE_PREFIX = "_:"; public static final String DATATYPE_SEPARATOR = "^^"; public static final String BLANK_NODE_START = "["; public static final String BLANK_NODE_END = "]"; @@ -105,8 +59,6 @@ private SerializationConstants() { public static final String QUOT_ENTITY = """; public static final String APOS_ENTITY = "'"; - public static final String DEFAULT_GRAPH_IRI = "http://ns.inria.fr/corese/default-graph"; - public static final String C14N = "c14n"; public static final String CANONICAL_BNODE_PLACEHOLDER = "<>"; @@ -114,7 +66,7 @@ private SerializationConstants() { public static final String CANONICAL_BNODE_PREFIX = "_:b"; - // Algorithmes de hachage + // Hash algorithm public static final String SHA_256 = "SHA-256"; public static final String SHA_384 = "SHA-384"; diff --git a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/StatementUtils.java b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/StatementUtils.java index 6d385f238..9e48ba392 100644 --- a/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/StatementUtils.java +++ b/src/main/java/fr/inria/corese/core/next/impl/io/serialization/util/StatementUtils.java @@ -107,7 +107,7 @@ public static String getBlankNodeId(Value value) { if (value == null) return null; if (isBlankNode(value)) { String str = value.stringValue(); - if (str.startsWith(SerializationConstants.BNODE_PREFIX)) { + if (str.startsWith(SerializationConstants.BLANK_NODE_PREFIX)) { return str.substring(2); } return str; @@ -155,7 +155,7 @@ public static String serializeForComparison(Value value) { * @return The serialized blank node string. */ private static String serializeBNode(BNode bnode) { - return SerializationConstants.BNODE_PREFIX + bnode.getID(); + return SerializationConstants.BLANK_NODE_PREFIX + bnode.getID(); } /** @@ -183,7 +183,7 @@ private static String serializeLiteral(Literal literal) { sb.append(SerializationConstants.DATATYPE_SEPARATOR).append(serializeForComparison(literal.getDatatype())); } } else if (literal.getLanguage() != null) { - sb.append(SerializationConstants.AT_SIGN).append(literal.getLanguage()); + sb.append(SerializationConstants.AT).append(literal.getLanguage()); } return sb.toString(); diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/option/JSONLDProcessorOptionsTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/option/JSONLDOptionsTest.java similarity index 74% rename from src/test/java/fr/inria/corese/core/next/impl/io/option/JSONLDProcessorOptionsTest.java rename to src/test/java/fr/inria/corese/core/next/impl/io/option/JSONLDOptionsTest.java index b2f382992..5288511b6 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/option/JSONLDProcessorOptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/option/JSONLDOptionsTest.java @@ -1,6 +1,7 @@ package fr.inria.corese.core.next.impl.io.option; import com.apicatalog.jsonld.JsonLdVersion; +import fr.inria.corese.core.next.impl.io.common.JSONLDOptions; import org.junit.jupiter.api.Test; import java.time.Duration; @@ -11,9 +12,9 @@ /** * Tests to check that values are properly set */ -class JSONLDProcessorOptionsTest { +class JSONLDOptionsTest { - private JSONLDProcessorOptions optionAllTrue = new JSONLDProcessorOptions.Builder().base("http://example.org/AllTrue") + private fr.inria.corese.core.next.impl.io.common.JSONLDOptions optionAllTrue = new fr.inria.corese.core.next.impl.io.common.JSONLDOptions.Builder().base("http://example.org/AllTrue") .extractAllScripts(true) .compactToRelative(true) .compactArrays(true) @@ -22,7 +23,7 @@ class JSONLDProcessorOptionsTest { .useNativeTypes(true) .build(); - private JSONLDProcessorOptions optionAllFalse = new JSONLDProcessorOptions.Builder().base("http://example.org/AllFalse") + private fr.inria.corese.core.next.impl.io.common.JSONLDOptions optionAllFalse = new fr.inria.corese.core.next.impl.io.common.JSONLDOptions.Builder().base("http://example.org/AllFalse") .extractAllScripts(false) .compactArrays(false) .compactToRelative(false) @@ -57,15 +58,15 @@ void isOrdered() { @Test void getProcessingMode() { - JSONLDProcessorOptions option10 = new JSONLDProcessorOptions.Builder().processingMode(JsonLdVersion.V1_0).build(); - JSONLDProcessorOptions option11 = new JSONLDProcessorOptions.Builder().processingMode(JsonLdVersion.V1_1).build(); + fr.inria.corese.core.next.impl.io.common.JSONLDOptions option10 = new fr.inria.corese.core.next.impl.io.common.JSONLDOptions.Builder().processingMode(JsonLdVersion.V1_0).build(); + fr.inria.corese.core.next.impl.io.common.JSONLDOptions option11 = new fr.inria.corese.core.next.impl.io.common.JSONLDOptions.Builder().processingMode(JsonLdVersion.V1_1).build(); assertEquals(JsonLdVersion.V1_0, option10.getProcessingMode()); assertEquals(JsonLdVersion.V1_1, option11.getProcessingMode()); } @Test void getTimeout() { - JSONLDProcessorOptions option10seconds = new JSONLDProcessorOptions.Builder().timeout(Duration.of(10, ChronoUnit.SECONDS)).build(); + fr.inria.corese.core.next.impl.io.common.JSONLDOptions option10seconds = new JSONLDOptions.Builder().timeout(Duration.of(10, ChronoUnit.SECONDS)).build(); assertNull(optionAllTrue.getTimeout()); assertEquals(Duration.of(10, ChronoUnit.SECONDS), option10seconds.getTimeout()); } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDCircularTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDCircularTest.java index 77beb89f7..c510f8514 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDCircularTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDCircularTest.java @@ -8,6 +8,7 @@ import java.io.StringWriter; import java.nio.charset.StandardCharsets; +import fr.inria.corese.core.next.impl.io.common.JSONLDOptions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -20,10 +21,8 @@ import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.parser.RDFParser; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; -import fr.inria.corese.core.next.impl.io.option.JSONLDProcessorOptions; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; import org.slf4j.Logger; @@ -46,9 +45,9 @@ class JSONLDCircularTest { private static final Logger logger = LoggerFactory.getLogger(JSONLDCircularTest.class); private ValueFactory valueFactory; - private SerializerFactory serializerFactory; + private fr.inria.corese.core.next.api.io.serialization.SerializerFactory serializerFactory; private ParserFactory parserFactory; - private JSONLDProcessorOptions defaultConfig; + private JSONLDOptions defaultConfig; // Test data constants private static final String EXAMPLE_NS = "http://example.org/"; @@ -70,9 +69,9 @@ class JSONLDCircularTest { @BeforeEach void setUp() { valueFactory = new CoreseAdaptedValueFactory(); - serializerFactory = new DefaultSerializerFactory(); + serializerFactory = new SerializerFactory(); parserFactory = new ParserFactory(); - defaultConfig = new JSONLDProcessorOptions.Builder() + defaultConfig = new JSONLDOptions.Builder() .build(); } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParserTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParserTest.java index 3662a2146..383ac42a1 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParserTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/parser/jsonld/JSONLDParserTest.java @@ -9,7 +9,7 @@ import java.io.Reader; import java.io.StringReader; -import fr.inria.corese.core.next.impl.io.option.JSONLDProcessorOptions; +import fr.inria.corese.core.next.impl.io.common.JSONLDOptions; import org.junit.jupiter.api.Test; import fr.inria.corese.core.next.api.BNode; @@ -47,7 +47,7 @@ void constructorNullModelAndValueFactoryThrowsTest() { @Test void constructorConfigNoThrowsTest() { - assertDoesNotThrow(() -> new JSONLDParser(new CoreseModel(), valueFactory, new JSONLDProcessorOptions.Builder().build())); + assertDoesNotThrow(() -> new JSONLDParser(new CoreseModel(), valueFactory, new JSONLDOptions.Builder().build())); } @Test diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/parser/nquads/NQuadsCircularTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/parser/nquads/NQuadsCircularTest.java index 0bf3cf90a..ad9327d46 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/parser/nquads/NQuadsCircularTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/parser/nquads/NQuadsCircularTest.java @@ -20,9 +20,8 @@ import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.parser.RDFParser; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.serialization.nquads.NQuadsSerializerOptions; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; @@ -42,7 +41,7 @@ class NQuadsCircularTest { private ValueFactory valueFactory; - private SerializerFactory serializerFactory; + private fr.inria.corese.core.next.api.io.serialization.SerializerFactory serializerFactory; private ParserFactory parserFactory; private NQuadsSerializerOptions defaultConfig; @@ -66,7 +65,7 @@ class NQuadsCircularTest { @BeforeEach void setUp() { valueFactory = new CoreseAdaptedValueFactory(); - serializerFactory = new DefaultSerializerFactory(); + serializerFactory = new SerializerFactory(); parserFactory = new ParserFactory(); defaultConfig = NQuadsSerializerOptions.defaultConfig(); } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/parser/ntriples/NTriplesCircularTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/parser/ntriples/NTriplesCircularTest.java index a31407834..c98fbb1b3 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/parser/ntriples/NTriplesCircularTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/parser/ntriples/NTriplesCircularTest.java @@ -20,9 +20,8 @@ import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.parser.RDFParser; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.serialization.ntriples.NTriplesSerializerOptions; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; @@ -39,7 +38,7 @@ class NTriplesCircularTest { private ValueFactory valueFactory; - private SerializerFactory serializerFactory; + private fr.inria.corese.core.next.api.io.serialization.SerializerFactory serializerFactory; private ParserFactory parserFactory; private NTriplesSerializerOptions defaultConfig; @@ -61,7 +60,7 @@ class NTriplesCircularTest { @BeforeEach void setUp() { valueFactory = new CoreseAdaptedValueFactory(); - serializerFactory = new DefaultSerializerFactory(); + serializerFactory = new SerializerFactory(); parserFactory = new ParserFactory(); defaultConfig = NTriplesSerializerOptions.defaultConfig(); } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLCircularTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLCircularTest.java index ef7c939cf..ddb393d1b 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLCircularTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/parser/rdfxml/RDFXMLCircularTest.java @@ -8,6 +8,7 @@ import java.io.StringWriter; import java.nio.charset.StandardCharsets; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -20,10 +21,8 @@ import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.parser.RDFParser; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; -import fr.inria.corese.core.next.impl.io.serialization.rdfxml.XMLSerializerOption; +import fr.inria.corese.core.next.impl.io.serialization.rdfxml.RDFXMLSerializerOption; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; @@ -49,9 +48,9 @@ class RDFXMLCircularTest { private ValueFactory valueFactory; - private SerializerFactory serializerFactory; + private fr.inria.corese.core.next.api.io.serialization.SerializerFactory serializerFactory; private ParserFactory parserFactory; - private XMLSerializerOption defaultConfig; + private RDFXMLSerializerOption defaultConfig; // Test data constants private static final String EXAMPLE_NS = "http://example.org/"; @@ -71,9 +70,9 @@ class RDFXMLCircularTest { @BeforeEach void setUp() { valueFactory = new CoreseAdaptedValueFactory(); - serializerFactory = new DefaultSerializerFactory(); + serializerFactory = new SerializerFactory(); parserFactory = new ParserFactory(); - defaultConfig = XMLSerializerOption.defaultConfig(); + defaultConfig = RDFXMLSerializerOption.defaultConfig(); } /** diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGCircularTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGCircularTest.java index e741576e3..9cdbbe15d 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGCircularTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/parser/trig/TriGCircularTest.java @@ -20,9 +20,8 @@ import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.parser.RDFParser; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.serialization.trig.TriGSerializerOptions; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; @@ -42,7 +41,7 @@ class TriGCircularTest { private ValueFactory valueFactory; - private SerializerFactory serializerFactory; + private fr.inria.corese.core.next.api.io.serialization.SerializerFactory serializerFactory; private ParserFactory parserFactory; private TriGSerializerOptions defaultConfig; @@ -66,7 +65,7 @@ class TriGCircularTest { @BeforeEach void setUp() { valueFactory = new CoreseAdaptedValueFactory(); - serializerFactory = new DefaultSerializerFactory(); + serializerFactory = new SerializerFactory(); parserFactory = new ParserFactory(); defaultConfig = TriGSerializerOptions.defaultConfig(); } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/parser/turtle/TurtleCircularTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/parser/turtle/TurtleCircularTest.java index ee71d36a7..86aa34e7c 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/parser/turtle/TurtleCircularTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/parser/turtle/TurtleCircularTest.java @@ -20,9 +20,8 @@ import fr.inria.corese.core.next.api.base.io.RDFFormat; import fr.inria.corese.core.next.api.io.parser.RDFParser; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.serialization.turtle.TurtleSerializerOptions; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; @@ -39,7 +38,7 @@ class TurtleCircularTest { private ValueFactory valueFactory; - private SerializerFactory serializerFactory; + private fr.inria.corese.core.next.api.io.serialization.SerializerFactory serializerFactory; private ParserFactory parserFactory; private TurtleSerializerOptions defaultConfig; @@ -61,7 +60,7 @@ class TurtleCircularTest { @BeforeEach void setUp() { valueFactory = new CoreseAdaptedValueFactory(); - serializerFactory = new DefaultSerializerFactory(); + serializerFactory = new SerializerFactory(); parserFactory = new ParserFactory(); defaultConfig = TurtleSerializerOptions.defaultConfig(); } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/DefaultSerializerFactoryTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/SerializerFactoryTest.java similarity index 94% rename from src/test/java/fr/inria/corese/core/next/impl/io/serialization/DefaultSerializerFactoryTest.java rename to src/test/java/fr/inria/corese/core/next/impl/io/serialization/SerializerFactoryTest.java index 014015738..673e5e3bb 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/DefaultSerializerFactoryTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/SerializerFactoryTest.java @@ -20,25 +20,25 @@ import fr.inria.corese.core.next.impl.io.serialization.canonical.RDFC10Serializer; import fr.inria.corese.core.next.impl.io.serialization.nquads.NQuadsSerializer; import fr.inria.corese.core.next.impl.io.serialization.ntriples.NTriplesSerializer; -import fr.inria.corese.core.next.impl.io.serialization.rdfxml.XMLSerializer; +import fr.inria.corese.core.next.impl.io.serialization.rdfxml.RDFXMLSerializer; import fr.inria.corese.core.next.impl.io.serialization.trig.TriGSerializer; import fr.inria.corese.core.next.impl.io.serialization.turtle.TurtleSerializer; /** - * Unit tests for the {@link DefaultSerializerFactory} class. + * Unit tests for the {@link SerializerFactory} class. * This class verifies that the factory correctly creates instances of * various {@link RDFSerializer} implementations based on the provided * {@link RDFFormat} and handles null inputs gracefully. */ -class DefaultSerializerFactoryTest { +class SerializerFactoryTest { - private DefaultSerializerFactory factory; + private SerializerFactory factory; private Model mockModel; private IOOptions mockConfig; @BeforeEach void setUp() { - factory = new DefaultSerializerFactory(); + factory = new SerializerFactory(); mockModel = mock(Model.class); mockConfig = mock(IOOptions.class); } @@ -98,11 +98,11 @@ void createSerializer_shouldReturnTriGSerializer_forTriGFormat() { @Test @DisplayName("createSerializer should return XmlSerializer for RDFXML format") void createSerializer_shouldReturnXmlSerializer_forRdfXmlFormat() { - try (MockedConstruction mockedConstruction = mockConstruction(XMLSerializer.class)) { + try (MockedConstruction mockedConstruction = mockConstruction(RDFXMLSerializer.class)) { RDFSerializer serializer = factory.createSerializer(RDFFormat.RDFXML, mockModel, mockConfig); assertNotNull(serializer); - assertTrue(serializer instanceof XMLSerializer); + assertTrue(serializer instanceof RDFXMLSerializer); assertEquals(1, mockedConstruction.constructed().size(), "XmlSerializer constructor should be called once"); } } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10OptionsTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerOptionsTest.java similarity index 88% rename from src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10OptionsTest.java rename to src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerOptionsTest.java index 7d829c1b3..59d8f9d03 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10OptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerOptionsTest.java @@ -6,16 +6,16 @@ import static org.junit.jupiter.api.Assertions.*; /** - * Unit tests for the {@link RDFC10Options} class. + * Unit tests for the {@link RDFC10SerializerOptions} class. * This class verifies the default configuration and the builder functionality * for the Canonical RDF serialization options. */ -class RDFC10OptionsTest { +class RDFC10SerializerOptionsTest { @Test @DisplayName("defaultConfig should return an instance with expected default values") void defaultConfig_shouldReturnExpectedValues() { - RDFC10Options config = RDFC10Options.defaultConfig(); + RDFC10SerializerOptions config = RDFC10SerializerOptions.defaultConfig(); assertNotNull(config, "Default config should not be null"); assertTrue(config.isStrictMode(), "Default strictMode should be true for canonicalization"); @@ -28,7 +28,7 @@ void defaultConfig_shouldReturnExpectedValues() { @Test @DisplayName("builder should allow setting custom options") void builder_shouldAllowCustomOptions() { - RDFC10Options customConfig = RDFC10Options.builder() + RDFC10SerializerOptions customConfig = RDFC10SerializerOptions.builder() .strictMode(false) .validateURIs(false) .escapeUnicode(false) @@ -47,7 +47,7 @@ void builder_shouldAllowCustomOptions() { @Test @DisplayName("builder should use default values for un-set options") void builder_shouldUseDefaultValues_forUnsetOptions() { - RDFC10Options config = RDFC10Options.builder() + RDFC10SerializerOptions config = RDFC10SerializerOptions.builder() .strictMode(false) .build(); diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerTest.java index a18bc0418..564ef29cf 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/canonical/RDFC10SerializerTest.java @@ -6,7 +6,7 @@ import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; import fr.inria.corese.core.next.impl.exception.SerializationException; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; import org.junit.jupiter.api.BeforeEach; @@ -82,12 +82,12 @@ class RDFC10SerializerTest { private RDFC10Serializer serializer; - private RDFC10Options defaultConfig; + private RDFC10SerializerOptions defaultConfig; @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); - defaultConfig = RDFC10Options.defaultConfig(); + defaultConfig = RDFC10SerializerOptions.defaultConfig(); setupBasicMocks(); @@ -341,11 +341,11 @@ private String serializeToRdfCanonical(String resourcePath) { fail("Failed to parse resource: " + resourcePath + " - " + e.getMessage()); } - DefaultSerializerFactory serializerFactory = new DefaultSerializerFactory(); + SerializerFactory serializerFactory = new SerializerFactory(); RDFSerializer serializer = serializerFactory.createSerializer( RDFFormat.RDFC_1_0, model, - RDFC10Options.defaultConfig() + RDFC10SerializerOptions.defaultConfig() ); StringWriter writer = new StringWriter(); diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializerTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializerTest.java index c1f93d429..0a758c136 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/jsonld/JSONLDSerializerTest.java @@ -3,7 +3,7 @@ import com.apicatalog.jsonld.json.JsonLdComparison; import fr.inria.corese.core.next.api.*; import fr.inria.corese.core.next.api.io.serialization.RDFSerializer; -import fr.inria.corese.core.next.impl.io.option.JSONLDProcessorOptions; +import fr.inria.corese.core.next.impl.io.common.JSONLDOptions; import fr.inria.corese.core.next.impl.temp.CoreseAdaptedValueFactory; import fr.inria.corese.core.next.impl.temp.CoreseModel; import jakarta.json.Json; @@ -50,7 +50,7 @@ public void smallModelTest() { // IRI IRI LangLiteral this.model.add(iriNode, iriPred, langLiteral); - RDFSerializer serializer = new JSONLDSerializer(this.model, (new JSONLDProcessorOptions.Builder()).ordered(true).build()); + RDFSerializer serializer = new JSONLDSerializer(this.model, (new JSONLDOptions.Builder()).ordered(true).build()); StringWriter writer = new StringWriter(); diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializerTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializerTest.java index 008afb910..1aae46771 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/nquads/NQuadsSerializerTest.java @@ -165,7 +165,7 @@ void writeShouldThrowOnNullSubjectValue() { StringWriter writer = new StringWriter(); SerializationException thrown = assertThrows(SerializationException.class, () -> nQuadsSerializer.write(writer)); - assertEquals("Invalid N-Quads data: Value cannot be null in N-Quads format when strictMode is enabled. [Format: N-Quads]", thrown.getMessage()); + assertEquals("Value cannot be null in N-Quads format when strictMode is enabled. [Format: N-Quads]", thrown.getMessage()); } @Test @@ -180,7 +180,7 @@ void writeShouldThrowOnNullPredicateValue() { StringWriter writer = new StringWriter(); SerializationException thrown = assertThrows(SerializationException.class, () -> nQuadsSerializer.write(writer)); - assertEquals("Invalid N-Quads data: Value cannot be null in N-Quads format when strictMode is enabled. [Format: N-Quads]", thrown.getMessage()); + assertEquals("Value cannot be null in N-Quads format when strictMode is enabled. [Format: N-Quads]", thrown.getMessage()); } @Test @@ -194,7 +194,7 @@ void writeShouldThrowOnNullObjectValue() { StringWriter writer = new StringWriter(); SerializationException thrown = assertThrows(SerializationException.class, () -> nQuadsSerializer.write(writer)); - assertEquals("Invalid N-Quads data: Value cannot be null in N-Quads format when strictMode is enabled. [Format: N-Quads]", thrown.getMessage()); + assertEquals("Value cannot be null in N-Quads format when strictMode is enabled. [Format: N-Quads]", thrown.getMessage()); } @Test diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializerTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializerTest.java index f199fe54b..68a0c3ca3 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/ntriples/NTriplesSerializerTest.java @@ -169,7 +169,7 @@ void writeShouldThrowOnNullSubjectValue() { StringWriter writer = new StringWriter(); SerializationException thrown = assertThrows(SerializationException.class, () -> nTriplesSerializer.write(writer)); - assertEquals("Invalid N-Triples data: Value cannot be null in N-Triples format when strictMode is enabled. [Format: N-Triples]", thrown.getMessage()); + assertEquals("Value cannot be null in N-Triples format when strictMode is enabled. [Format: N-Triples]", thrown.getMessage()); } @Test @@ -184,7 +184,7 @@ void writeShouldThrowOnNullPredicateValue() { StringWriter writer = new StringWriter(); SerializationException thrown = assertThrows(SerializationException.class, () -> nTriplesSerializer.write(writer)); - assertEquals("Invalid N-Triples data: Value cannot be null in N-Triples format when strictMode is enabled. [Format: N-Triples]", thrown.getMessage()); + assertEquals("Value cannot be null in N-Triples format when strictMode is enabled. [Format: N-Triples]", thrown.getMessage()); } @Test @@ -198,7 +198,7 @@ void writeShouldThrowOnNullObjectValue() { StringWriter writer = new StringWriter(); SerializationException thrown = assertThrows(SerializationException.class, () -> nTriplesSerializer.write(writer)); - assertEquals("Invalid N-Triples data: Value cannot be null in N-Triples format when strictMode is enabled. [Format: N-Triples]", thrown.getMessage()); + assertEquals("Value cannot be null in N-Triples format when strictMode is enabled. [Format: N-Triples]", thrown.getMessage()); } diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializerTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializerTest.java similarity index 88% rename from src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializerTest.java rename to src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializerTest.java index b4ee7dd15..ef79f532f 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XMLSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/RDFXMLSerializerTest.java @@ -2,10 +2,10 @@ import fr.inria.corese.core.next.api.Model; import fr.inria.corese.core.next.api.Statement; +import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.io.serialization.TestStatementFactory; import fr.inria.corese.core.next.impl.io.serialization.option.LiteralDatatypePolicyEnum; import fr.inria.corese.core.next.impl.io.serialization.option.PrefixOrderingEnum; -import fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants; import fr.inria.corese.core.next.impl.exception.SerializationException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -23,11 +23,11 @@ /** * Unit tests for the XmlSerializer class. */ -class XMLSerializerTest { +class RDFXMLSerializerTest { @Mock private Model mockModel; - XMLSerializerOption mockConfig; + RDFXMLSerializerOption mockConfig; private TestStatementFactory factory; private StringWriter writer; @@ -38,7 +38,7 @@ void setUp() { writer = new StringWriter(); factory = new TestStatementFactory(); - mockConfig = XMLSerializerOption.defaultConfig(); + mockConfig = RDFXMLSerializerOption.defaultConfig(); } @@ -53,7 +53,7 @@ void shouldSerializeSimpleIriTriple() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .autoDeclarePrefixes(true) .usePrefixes(true) .addCustomPrefix("foaf", "http://xmlns.com/foaf/0.1/") @@ -61,7 +61,7 @@ void shouldSerializeSimpleIriTriple() throws SerializationException { .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); @@ -88,13 +88,13 @@ void shouldHandleBlankNodeSubject() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .stableBlankNodeIds(true) .addCustomPrefix("foaf", "http://xmlns.com/foaf/0.1/") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -121,13 +121,13 @@ void shouldHandleBlankNodeObject() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .stableBlankNodeIds(true) .addCustomPrefix("dc", "http://purl.org/dc/elements/1.1/") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); @@ -149,18 +149,18 @@ void shouldSerializeLiteralWithStringDatatypeMinimalPolicy() throws Serializatio Statement stmt = factory.createStatement( factory.createIRI("http://example.org/person"), factory.createIRI("http://xmlns.com/foaf/0.1/name"), - factory.createLiteral("John Doe", factory.createIRI(SerializationConstants.XSD_STRING), null) + factory.createLiteral("John Doe", XSD.xsdString.getIRI(), null) ); when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .literalDatatypePolicy(LiteralDatatypePolicyEnum.MINIMAL) .addCustomPrefix("foaf", "http://xmlns.com/foaf/0.1/") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -180,19 +180,19 @@ void shouldSerializeLiteralWithCustomDatatypeMinimalPolicy() throws Serializatio Statement stmt = factory.createStatement( factory.createIRI("http://example.org/data"), factory.createIRI("http://example.org/vocabulary/value"), - factory.createLiteral("123", factory.createIRI(SerializationConstants.XSD_INTEGER), null) + factory.createLiteral("123", fr.inria.corese.core.next.impl.common.vocabulary.XSD.xsdInteger.getIRI(), null) ); when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .literalDatatypePolicy(LiteralDatatypePolicyEnum.MINIMAL) .addCustomPrefix("ex", "http://example.org/vocabulary/") .addCustomPrefix("xsd", "http://www.w3.org/2001/XMLSchema#") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -217,12 +217,12 @@ void shouldSerializeLiteralWithLanguage() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .addCustomPrefix("dc", "http://purl.org/dc/elements/1.1/") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -254,14 +254,14 @@ void shouldRespectPrefixOrderingDefault() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt1, stmt2)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .addCustomPrefix("exorg", "http://ex.org/") .addCustomPrefix("excom", "http://ex.com/") .prefixOrdering(PrefixOrderingEnum.USAGE_ORDER) .sortSubjects(false) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String actual = writer.toString(); @@ -296,13 +296,13 @@ void shouldSortSubjectsAlphabetically() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt1, stmt2)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .sortSubjects(true) .addCustomPrefix("ex", "http://ex.org/") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -332,11 +332,11 @@ void shouldEscapeXmlAttributeValues() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -362,14 +362,14 @@ void shouldEscapeXmlContentValues() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .literalDatatypePolicy(LiteralDatatypePolicyEnum.ALWAYS_TYPED) .addCustomPrefix("ex", "http://example.org/") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -396,13 +396,13 @@ void shouldNotAutoDeclarePrefixesIfDisabled() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .autoDeclarePrefixes(false) .usePrefixes(true) .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -428,13 +428,13 @@ void shouldNotUsePrefixesIfDisabled() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .usePrefixes(false) .autoDeclarePrefixes(true) .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ @@ -466,14 +466,14 @@ void shouldNotGenerateStableBlankNodeIds() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.of(stmt1, stmt2)); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .stableBlankNodeIds(false) .sortSubjects(true) .addCustomPrefix("ex", "http://example.org/") .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); @@ -497,11 +497,11 @@ void shouldNotGenerateStableBlankNodeIds() throws SerializationException { void shouldHandleEmptyModel() throws SerializationException { when(mockModel.stream()).thenReturn(Stream.empty()); - XMLSerializerOption testConfig = new XMLSerializerOption.Builder() + RDFXMLSerializerOption testConfig = new RDFXMLSerializerOption.Builder() .prefixOrdering(PrefixOrderingEnum.ALPHABETICAL) .build(); - XMLSerializer serializer = new XMLSerializer(mockModel, testConfig); + RDFXMLSerializer serializer = new RDFXMLSerializer(mockModel, testConfig); serializer.write(writer); String expected = """ diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XmlConfigTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XmlConfigTest.java index 5a80780c4..fa4d4932a 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XmlConfigTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/rdfxml/XmlConfigTest.java @@ -1,5 +1,9 @@ package fr.inria.corese.core.next.impl.io.serialization.rdfxml; +import fr.inria.corese.core.next.impl.common.vocabulary.OWL; +import fr.inria.corese.core.next.impl.common.vocabulary.RDF; +import fr.inria.corese.core.next.impl.common.vocabulary.RDFS; +import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.io.serialization.option.LiteralDatatypePolicyEnum; import fr.inria.corese.core.next.impl.io.serialization.option.PrefixOrderingEnum; import fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants; @@ -12,7 +16,7 @@ import static org.junit.jupiter.api.Assertions.*; /** - * Unit tests for the {@link XMLSerializerOption} class. + * Unit tests for the {@link RDFXMLSerializerOption} class. * These tests verify the default configuration settings and the functionality * of the builder pattern for customizing RDF/XML serialization options. */ @@ -21,7 +25,7 @@ class XmlConfigTest { @Test @DisplayName("defaultConfig() should return a config with expected RDF/XML defaults") void defaultConfig_shouldReturnExpectedDefaults() { - XMLSerializerOption config = XMLSerializerOption.defaultConfig(); + RDFXMLSerializerOption config = RDFXMLSerializerOption.defaultConfig(); assertNotNull(config, "Default config should not be null"); @@ -30,10 +34,10 @@ void defaultConfig_shouldReturnExpectedDefaults() { assertEquals(PrefixOrderingEnum.ALPHABETICAL, config.getPrefixOrdering(), "Default prefixOrdering should be ALPHABETICAL for XML"); Map expectedPrefixes = new HashMap<>(); - expectedPrefixes.put("rdf", SerializationConstants.RDF_NS); - expectedPrefixes.put("rdfs", SerializationConstants.RDFS_NS); - expectedPrefixes.put("xsd", SerializationConstants.XSD_NS); - expectedPrefixes.put("owl", SerializationConstants.OWL_NS); + expectedPrefixes.put(RDF.getVocabularyPreferredPrefix(), RDF.getVocabularyNamespace()); + expectedPrefixes.put(RDFS.getVocabularyPreferredPrefix(), RDFS.getVocabularyNamespace()); + expectedPrefixes.put(XSD.getVocabularyPreferredPrefix(), XSD.getVocabularyNamespace()); + expectedPrefixes.put(OWL.getVocabularyPreferredPrefix(), OWL.getVocabularyNamespace()); assertEquals(expectedPrefixes.size(), config.getCustomPrefixes().size(), "Default custom prefixes size mismatch"); assertTrue(config.getCustomPrefixes().entrySet().containsAll(expectedPrefixes.entrySet()), "Default custom prefixes should contain common RDF prefixes"); @@ -54,7 +58,7 @@ void defaultConfig_shouldReturnExpectedDefaults() { @Test @DisplayName("Builder should allow overriding usePrefixes") void builder_shouldAllowOverridingUsePrefixes() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .usePrefixes(false) .build(); assertFalse(config.usePrefixes(), "usePrefixes should be overridden to false"); @@ -63,7 +67,7 @@ void builder_shouldAllowOverridingUsePrefixes() { @Test @DisplayName("Builder should allow overriding autoDeclarePrefixes") void builder_shouldAllowOverridingAutoDeclarePrefixes() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .autoDeclarePrefixes(false) .build(); assertFalse(config.autoDeclarePrefixes(), "autoDeclarePrefixes should be overridden to false"); @@ -72,7 +76,7 @@ void builder_shouldAllowOverridingAutoDeclarePrefixes() { @Test @DisplayName("Builder should allow overriding prefixOrdering") void builder_shouldAllowOverridingPrefixOrdering() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .prefixOrdering(PrefixOrderingEnum.USAGE_ORDER) .build(); assertEquals(PrefixOrderingEnum.USAGE_ORDER, config.getPrefixOrdering(), "prefixOrdering should be overridden to USAGE_ORDER"); @@ -83,7 +87,7 @@ void builder_shouldAllowOverridingPrefixOrdering() { void builder_shouldAllowAddingCustomPrefixes() { String customPrefix = "my"; String customNamespace = "http://my.example.org/"; - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .addCustomPrefix(customPrefix, customNamespace) .build(); @@ -96,7 +100,7 @@ void builder_shouldAllowAddingCustomPrefixes() { @Test @DisplayName("Builder should allow overriding prettyPrint") void builder_shouldAllowOverridingPrettyPrint() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .prettyPrint(false) .build(); assertFalse(config.prettyPrint(), "prettyPrint should be overridden to false"); @@ -106,7 +110,7 @@ void builder_shouldAllowOverridingPrettyPrint() { @DisplayName("Builder should allow overriding indent") void builder_shouldAllowOverridingIndent() { String customIndent = "\t"; - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .indent(customIndent) .build(); assertEquals(customIndent, config.getIndent(), "indent should be overridden to custom value"); @@ -116,7 +120,7 @@ void builder_shouldAllowOverridingIndent() { @DisplayName("Builder should allow overriding maxLineLength") void builder_shouldAllowOverridingMaxLineLength() { int customLength = 120; - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .maxLineLength(customLength) .build(); assertEquals(customLength, config.getMaxLineLength(), "maxLineLength should be overridden to custom value"); @@ -125,7 +129,7 @@ void builder_shouldAllowOverridingMaxLineLength() { @Test @DisplayName("Builder should allow overriding sortSubjects") void builder_shouldAllowOverridingSortSubjects() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .sortSubjects(true) .build(); assertTrue(config.sortSubjects(), "sortSubjects should be overridden to true"); @@ -134,7 +138,7 @@ void builder_shouldAllowOverridingSortSubjects() { @Test @DisplayName("Builder should allow overriding sortPredicates") void builder_shouldAllowOverridingSortPredicates() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .sortPredicates(true) .build(); assertTrue(config.sortPredicates(), "sortPredicates should be overridden to true"); @@ -143,7 +147,7 @@ void builder_shouldAllowOverridingSortPredicates() { @Test @DisplayName("Builder should allow overriding useMultilineLiterals") void builder_shouldAllowOverridingUseMultilineLiterals() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .useMultilineLiterals(false) .build(); assertFalse(config.useMultilineLiterals(), "useMultilineLiterals should be overridden to false"); @@ -152,7 +156,7 @@ void builder_shouldAllowOverridingUseMultilineLiterals() { @Test @DisplayName("Builder should allow overriding strictMode") void builder_shouldAllowOverridingStrictMode() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .strictMode(false) .build(); assertFalse(config.isStrictMode(), "strictMode should be overridden to false"); @@ -161,7 +165,7 @@ void builder_shouldAllowOverridingStrictMode() { @Test @DisplayName("Builder should allow overriding escapeUnicode") void builder_shouldAllowOverridingEscapeUnicode() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .escapeUnicode(true) .build(); assertTrue(config.escapeUnicode(), "escapeUnicode should be overridden to true"); @@ -170,7 +174,7 @@ void builder_shouldAllowOverridingEscapeUnicode() { @Test @DisplayName("Builder should allow overriding literalDatatypePolicy") void builder_shouldAllowOverridingLiteralDatatypePolicy() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .literalDatatypePolicy(LiteralDatatypePolicyEnum.MINIMAL) .build(); assertEquals(LiteralDatatypePolicyEnum.MINIMAL, config.getLiteralDatatypePolicy(), "literalDatatypePolicy should be overridden to MINIMAL"); @@ -180,7 +184,7 @@ void builder_shouldAllowOverridingLiteralDatatypePolicy() { @DisplayName("Builder should allow setting baseIRI") void builder_shouldAllowSettingBaseIRI() { String testBaseIRI = "http://example.org/base/"; - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .baseIRI(testBaseIRI) .build(); assertEquals(testBaseIRI, config.getBaseIRI(), "baseIRI should be set correctly"); @@ -190,7 +194,7 @@ void builder_shouldAllowSettingBaseIRI() { @DisplayName("Builder should allow overriding lineEnding") void builder_shouldAllowOverridingLineEnding() { String customLineEnding = "\r\n"; - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .lineEnding(customLineEnding) .build(); assertEquals(customLineEnding, config.getLineEnding(), "lineEnding should be overridden to custom value"); @@ -199,7 +203,7 @@ void builder_shouldAllowOverridingLineEnding() { @Test @DisplayName("Builder should allow overriding validateURIs") void builder_shouldAllowOverridingValidateURIs() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .validateURIs(true) .build(); assertTrue(config.validateURIs(), "validateURIs should be overridden to true"); @@ -208,7 +212,7 @@ void builder_shouldAllowOverridingValidateURIs() { @Test @DisplayName("Builder should allow overriding stableBlankNodeIds") void builder_shouldAllowOverridingStableBlankNodeIds() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .stableBlankNodeIds(false) .build(); assertFalse(config.stableBlankNodeIds(), "stableBlankNodeIds should be overridden to false"); @@ -217,7 +221,7 @@ void builder_shouldAllowOverridingStableBlankNodeIds() { @Test @DisplayName("Builder should allow overriding includeContext") void builder_shouldAllowOverridingIncludeContext() { - XMLSerializerOption config = new XMLSerializerOption.Builder() + RDFXMLSerializerOption config = new RDFXMLSerializerOption.Builder() .includeContext(true) .build(); assertTrue(config.includeContext(), "includeContext should be overridden to true"); diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptionsTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptionsTest.java index 03855e848..7a9c58499 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerOptionsTest.java @@ -1,5 +1,9 @@ package fr.inria.corese.core.next.impl.io.serialization.trig; +import fr.inria.corese.core.next.impl.common.vocabulary.OWL; +import fr.inria.corese.core.next.impl.common.vocabulary.RDF; +import fr.inria.corese.core.next.impl.common.vocabulary.RDFS; +import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.io.serialization.option.BlankNodeStyleEnum; import fr.inria.corese.core.next.impl.io.serialization.option.LiteralDatatypePolicyEnum; import fr.inria.corese.core.next.impl.io.serialization.option.PrefixOrderingEnum; @@ -31,10 +35,10 @@ void defaultConfig_shouldReturnExpectedDefaults() { assertFalse(config.useCollections(), "Default useCollections should be false for TriG"); Map expectedPrefixes = new HashMap<>(); - expectedPrefixes.put("rdf", SerializationConstants.RDF_NS); - expectedPrefixes.put("rdfs", SerializationConstants.RDFS_NS); - expectedPrefixes.put("xsd", SerializationConstants.XSD_NS); - expectedPrefixes.put("owl", SerializationConstants.OWL_NS); + expectedPrefixes.put(RDF.getVocabularyPreferredPrefix(), RDF.getVocabularyNamespace()); + expectedPrefixes.put(RDFS.getVocabularyPreferredPrefix(), RDFS.getVocabularyNamespace()); + expectedPrefixes.put(XSD.getVocabularyPreferredPrefix(), XSD.getVocabularyNamespace()); + expectedPrefixes.put(OWL.getVocabularyPreferredPrefix(), OWL.getVocabularyNamespace()); assertEquals(expectedPrefixes.size(), config.getCustomPrefixes().size(), "Default custom prefixes size mismatch"); assertTrue(config.getCustomPrefixes().entrySet().containsAll(expectedPrefixes.entrySet()), "Default custom prefixes should contain common RDF prefixes"); diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerTest.java index ba0c206c1..bf9b41582 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/trig/TriGSerializerTest.java @@ -4,6 +4,7 @@ import fr.inria.corese.core.next.api.Model; import fr.inria.corese.core.next.api.Statement; import fr.inria.corese.core.next.impl.common.literal.RDF; +import fr.inria.corese.core.next.impl.common.literal.XSD; import fr.inria.corese.core.next.impl.io.serialization.TestStatementFactory; import fr.inria.corese.core.next.impl.io.serialization.option.LiteralDatatypePolicyEnum; import fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants; @@ -95,7 +96,7 @@ void testRdfTypeShortcut() throws SerializationException, IOException { Statement mockStatement = factory.createStatement( factory.createIRI("http://example.org/ns/person1"), - factory.createIRI(SerializationConstants.RDF_TYPE), + fr.inria.corese.core.next.impl.common.vocabulary.RDF.type.getIRI(), factory.createIRI("http://xmlns.com/foaf/0.1/Person"), null ); @@ -189,7 +190,7 @@ void testLiteralWithLanguageTag() throws SerializationException, IOException { */ @Test void testLiteralWithExplicitXsdStringType() throws SerializationException, IOException { - IRI mockDatatype = factory.createIRI(SerializationConstants.XSD_STRING); + IRI mockDatatype = XSD.STRING.getIRI(); Statement mockStatement = factory.createStatement( factory.createIRI("http://example.org/data/book2"), factory.createIRI("http://purl.org/dc/elements/1.1/creator"), @@ -348,7 +349,7 @@ void testStrictModeInvalidLiteral() throws SerializationException { assertEquals("TriG", thrown.getFormatName()); - assertEquals("Invalid data for format TriG: An rdf:langString literal must have a language tag. [Format: TriG]", thrown.getMessage()); + assertEquals("An rdf:langString literal must have a language tag. [Format: TriG]", thrown.getMessage()); } /** @@ -384,7 +385,7 @@ void testStrictModeInvalidIRICharacters() throws SerializationException { assertEquals("TriG", thrown.getFormatName()); - assertEquals("Invalid data for format TriG: IRI contains illegal characters (space, quotes, angle brackets) for the unescaped form of TriG: http://example.org/invalid iri [Format: TriG]", thrown.getMessage()); + assertEquals("IRI contains illegal characters (space, quotes, angle brackets) for the unescaped form : http://example.org/invalid iri [Format: TriG]", thrown.getMessage()); } /** diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptionsTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptionsTest.java index ce554d6ba..06c4e5f0d 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerOptionsTest.java @@ -1,5 +1,9 @@ package fr.inria.corese.core.next.impl.io.serialization.turtle; +import fr.inria.corese.core.next.impl.common.vocabulary.OWL; +import fr.inria.corese.core.next.impl.common.vocabulary.RDF; +import fr.inria.corese.core.next.impl.common.vocabulary.RDFS; +import fr.inria.corese.core.next.impl.common.vocabulary.XSD; import fr.inria.corese.core.next.impl.io.serialization.option.BlankNodeStyleEnum; import fr.inria.corese.core.next.impl.io.serialization.option.LiteralDatatypePolicyEnum; import fr.inria.corese.core.next.impl.io.serialization.option.PrefixOrderingEnum; @@ -30,10 +34,10 @@ void defaultConfig_shouldReturnExpectedDefaults() { assertEquals(BlankNodeStyleEnum.ANONYMOUS, config.getBlankNodeStyle(), "Default blankNodeStyle should be ANONYMOUS for Turtle"); Map expectedPrefixes = new HashMap<>(); - expectedPrefixes.put("rdf", SerializationConstants.RDF_NS); - expectedPrefixes.put("rdfs", SerializationConstants.RDFS_NS); - expectedPrefixes.put("xsd", SerializationConstants.XSD_NS); - expectedPrefixes.put("owl", SerializationConstants.OWL_NS); + expectedPrefixes.put(RDF.getVocabularyPreferredPrefix(), RDF.getVocabularyNamespace()); + expectedPrefixes.put(RDFS.getVocabularyPreferredPrefix(), RDFS.getVocabularyNamespace()); + expectedPrefixes.put(XSD.getVocabularyPreferredPrefix(), XSD.getVocabularyNamespace()); + expectedPrefixes.put(OWL.getVocabularyPreferredPrefix(), OWL.getVocabularyNamespace()); assertEquals(expectedPrefixes.size(), config.getCustomPrefixes().size(), "Default custom prefixes size mismatch"); assertTrue(config.getCustomPrefixes().entrySet().containsAll(expectedPrefixes.entrySet()), "Default custom prefixes should contain common RDF prefixes"); diff --git a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerTest.java b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerTest.java index dd16ec354..ee495ed38 100644 --- a/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/impl/io/serialization/turtle/TurtleSerializerTest.java @@ -1,10 +1,10 @@ package fr.inria.corese.core.next.impl.io.serialization.turtle; import fr.inria.corese.core.next.api.*; -import fr.inria.corese.core.next.api.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.common.literal.RDF; +import fr.inria.corese.core.next.impl.common.literal.XSD; import fr.inria.corese.core.next.impl.io.parser.ParserFactory; -import fr.inria.corese.core.next.impl.io.serialization.DefaultSerializerFactory; +import fr.inria.corese.core.next.impl.io.serialization.SerializerFactory; import fr.inria.corese.core.next.impl.io.serialization.TestStatementFactory; import fr.inria.corese.core.next.impl.io.serialization.option.LiteralDatatypePolicyEnum; import fr.inria.corese.core.next.impl.io.serialization.util.SerializationConstants; @@ -98,7 +98,7 @@ void testRdfTypeShortcut() throws SerializationException, IOException { Statement mockStatement = factory.createStatement( factory.createIRI("http://example.org/ns/person1"), - factory.createIRI(SerializationConstants.RDF_TYPE), + fr.inria.corese.core.next.impl.common.vocabulary.RDF.type.getIRI(), factory.createIRI("http://xmlns.com/foaf/0.1/Person"), null ); @@ -200,7 +200,7 @@ void testLiteralWithLanguageTag() throws SerializationException, IOException { @DisplayName("Should serialize literal with xsd:string datatype (minimal policy)") void testLiteralWithExplicitXsdStringType() throws SerializationException, IOException { - IRI mockDatatype = factory.createIRI(SerializationConstants.XSD_STRING); + IRI mockDatatype = XSD.STRING.getIRI(); Statement mockStatement = factory.createStatement( factory.createIRI("http://example.org/data/book2"), factory.createIRI("http://purl.org/dc/elements/1.1/creator"), @@ -314,14 +314,14 @@ void testBlankNodeSerializarionWithoutId() { Logger logger = LoggerFactory.getLogger(TurtleSerializerTest.class); ValueFactory valueFactory; - SerializerFactory serializerFactory; + fr.inria.corese.core.next.api.io.serialization.SerializerFactory serializerFactory; ParserFactory parserFactory; TurtleSerializerOptions defaultConfig; String EXAMPLE_NS = "http://example.org/"; String PREDICATE_KNOWS = EXAMPLE_NS + "knows"; valueFactory = new CoreseAdaptedValueFactory(); - serializerFactory = new DefaultSerializerFactory(); + serializerFactory = new SerializerFactory(); parserFactory = new ParserFactory(); defaultConfig = TurtleSerializerOptions.defaultConfig(); @@ -489,7 +489,7 @@ void testStrictModeInvalidLiteral() throws SerializationException { assertEquals("Turtle", thrown.getFormatName()); - assertEquals("Invalid data for format Turtle: An rdf:langString literal must have a language tag. [Format: Turtle]", thrown.getMessage()); + assertEquals("An rdf:langString literal must have a language tag. [Format: Turtle]", thrown.getMessage()); } /** @@ -525,7 +525,7 @@ void testStrictModeInvalidIRICharacters() throws SerializationException { assertEquals("Turtle", thrown.getFormatName()); - assertEquals("Invalid data for format Turtle: IRI contains illegal characters (space, quotes, angle brackets) for the unescaped form of Turtle: http://example.org/invalid iri [Format: Turtle]", thrown.getMessage()); + assertEquals("IRI contains illegal characters (space, quotes, angle brackets) for the unescaped form : http://example.org/invalid iri [Format: Turtle]", thrown.getMessage()); } /**