[
https://issues.apache.org/jira/browse/COMMONSRDF-47?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15858818#comment-15858818
]
ASF GitHub Bot commented on COMMONSRDF-47:
------------------------------------------
Github user stain commented on a diff in the pull request:
https://github.com/apache/commons-rdf/pull/27#discussion_r100211712
--- Diff: api/src/main/java/org/apache/commons/rdf/api/RDFSyntax.java ---
@@ -22,6 +22,124 @@
import java.util.Optional;
/**
+ * An RDF syntax, e.g. as used for parsing and writing RDF.
+ * <p>
+ * An RDF syntax is uniquely identified by its {@link #mediaType()}, and
has a
+ * suggested {@link #fileExtension()}.
+ * <p>
+ * Some of the RDF syntaxes may {@link #supportsDataset()}, meaning they
can
+ * represent {@link Quad}s.
+ * <p>
+ * An enumeration of the official RDF 1.1 syntaxes is available in
+ * {@link OfficialRDFSyntax} - for convenience they are also accessible
+ * as constants here, e.g. <code>RDFSyntax.JSONLD</code>.
+ *
+ */
+public interface RDFSyntax {
+
+ public static OfficialRDFSyntax JSONLD = OfficialRDFSyntax.JSONLD;
+ public static OfficialRDFSyntax TURTLE = OfficialRDFSyntax.TURTLE;
+ public static OfficialRDFSyntax NQUADS = OfficialRDFSyntax.NQUADS;
+ public static OfficialRDFSyntax NTRIPLES = OfficialRDFSyntax.NTRIPLES;
+ public static OfficialRDFSyntax RDFA_HTML =
OfficialRDFSyntax.RDFA_HTML;
+ public static OfficialRDFSyntax RDFA_XHTML =
OfficialRDFSyntax.RDFA_XHTML;
+ public static OfficialRDFSyntax RDFXML = OfficialRDFSyntax.RDFXML;
+ public static OfficialRDFSyntax TRIG = OfficialRDFSyntax.TRIG;
+
+ /**
+ * A short name of the RDF Syntax.
+ * <p>
+ * The name typically corresponds to the {@link Enum#name()} of for
+ * {@link OfficialRDFSyntax}, e.g. <code>JSONLD</code>.
+ *
+ * @return Short name for RDF syntax
+ */
+ public String name();
+
+ /**
+ * The title of the RDF Syntax.
+ * <p>
+ * This is generally the title of the corresponding standard,
+ * e.g. <em>RDF 1.1 Turtle</em>.
+ *
+ * @return Title of RDF Syntax
+ */
+ public String title();
+
+ /**
+ * The <a href="https://tools.ietf.org/html/rfc2046">IANA media
type</a> for
+ * the RDF syntax.
+ * <p>
+ * The media type can be used as part of <code>Content-Type</code> and
+ * <code>Accept</code> for <em>content negotiation</em> in the
+ * <a href="https://tools.ietf.org/html/rfc7231#section-3.1.1.1">HTTP
+ * protocol</a>.
+ */
+ public String mediaType();
--- End diff --
So my suggestion was that `mediaType()` has "The IANA media type" and
similar for `fileExtension()`. Arbitrary "other" media types and extensions
would have to be in a different method - perhaps the plural `mediaTypes()` and
`fileExtensions()`?
There is nothing stopping a parser from supporting other media types and
file extensions, but I'm not sure why they also need to be present in the
`RDFSyntax` interface, which main purpose is to hard-code a syntax for reading
(and maybe more so writing).
The previously proposed
[RDFParser](https://github.com/apache/commons-rdf/blob/master/api/src/main/java/org/apache/commons/rdf/experimental/RDFParser.java)
interface - which I hope we can discuss in a separate pull request / Jira
Issue - supports both `contentType(String contentType)` and
`contentType(RDFSyntax rdfSyntax)`.
It also has for `source(IRI)`:
> * The {@link #contentType(RDFSyntax)} or {@link #contentType(String)}
MAY
> * be set before calling {@link #parse()}, in which case that type MAY
be
> * used for content negotiation (e.g. <code>Accept</code> header in
HTTP),
> * and SHOULD be used for selecting the RDFSyntax.
while for `source(Path)` (a file) it changes to SHOULD (as file extensions
are fragile)
> * The {@link #contentType(RDFSyntax)} or {@link #contentType(String)}
> * SHOULD be set before calling {@link #parse()}.
This hints that a parser is able to do file extension or file magic, but is
not required to. Both RDF4J and Jena implementations have different mechanisms
for this, e.g.
[RDF4JParser](https://github.com/apache/commons-rdf/blob/master/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java#L140)
falls back to `Rio.getParserFormatForFileName()` based on path filename if no
content type is specified - which would use RDF4J's extended list of file
extensions and formats.
Obviously this would be easy to implement consistently for our hard-coded
w3c-standardized file extensions (and we could document that), but much harder
for arbitrary "other" extensions.
> RDFSyntax should be interface, not enum
> ---------------------------------------
>
> Key: COMMONSRDF-47
> URL: https://issues.apache.org/jira/browse/COMMONSRDF-47
> Project: Apache Commons RDF
> Issue Type: Bug
> Components: api
> Affects Versions: 0.2.0
> Reporter: Stian Soiland-Reyes
> Assignee: Stian Soiland-Reyes
>
> [~p_ansell] raises in [pull request
> 25|https://github.com/apache/incubator-commonsrdf/pull/25#discussion_r85231845]
> {quote}
> Using enum for RDFSyntax is a bad idea unless it overrides an interface and
> the interface is used in method signatures instead of the enum. There are
> many other RDFSyntaxes, and enum (without implementing an interface) is only
> suited to cases where the full set are known a priori.
> {quote}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)