[ 
https://issues.apache.org/jira/browse/COMMONSRDF-47?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15675060#comment-15675060
 ] 

ASF GitHub Bot commented on COMMONSRDF-47:
------------------------------------------

Github user ansell commented on a diff in the pull request:

    https://github.com/apache/incubator-commonsrdf/pull/27#discussion_r88565661
  
    --- 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();
    +
    +    /**
    +     * The <a 
href="https://tools.ietf.org/html/rfc2046";>IANA-registered</a>
    +     * file extension.
    +     * <p>
    +     * The file extension includes the leading period, e.g. 
<code>.jsonld</code>
    +     */
    +    public String fileExtension();
    +
    +    /**
    +     * Indicate if this RDF syntax supports
    +     * <a href="https://www.w3.org/TR/rdf11-concepts/#section-dataset";>RDF
    +     * Datasets</a>.
    +     */
    +    public boolean supportsDataset();
    +
    +
    +    /**
    +     * Return the RDFSyntax with the specified media type.
    +     * <p>
    +     * The <code>mediaType</code> is compared in lower case, therefore it 
might
    +     * not be equal to the {@link RDFSyntax#mediaType} of the returned
    +     * RDFSyntax.
    +     * <p>
    +     * For convenience matching of media types used in a
    +     * <code>Content-Type</code> header, if the <code>mediaType</code> 
contains
    +     * the characters <code>;</code>, <code>,</code> or white space, only 
the
    +     * part of the string to the left of those characters are considered.
    +     * 
    +     * @param mediaType
    +     *            The media type to match
    +     * @return If {@link Optional#isPresent()}, the {@link RDFSyntax} 
which has
    +     *         a matching {@link RDFSyntax#mediaType}, otherwise
    +     *         {@link Optional#empty()} indicating that no matching syntax 
was
    +     *         found.
    +     */
    +    public static Optional<RDFSyntax> byMediaType(String mediaType) {
    +        final String type = 
mediaType.toLowerCase(Locale.ENGLISH).split("\\s*[;,]", 2)[0];
    +        return Arrays.stream(OfficialRDFSyntax.values()).filter(t -> 
t.mediaType().equals(type))
    --- End diff --
    
    If OfficialRDFSyntax was not an enum, then you could redefine the .values() 
method to return Set<RDFSyntax> and remove the .map call below that would then 
be performing an unnecessary cast.


> 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.4#6332)

Reply via email to