[ 
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)

Reply via email to