# Test vocabulary for the JSON-LD test suite.
# This vocabulary defines classes an properties which extend
# the test-manifest vocabulary at <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest>.

@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dc11:   <http://purl.org/dc/elements/1.1/> .
@prefix mf:     <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .
@prefix xsd:    <http://www.w3.org/2001/XMLSchema#> .
@prefix :       <https://w3c.github.io/json-ld-api/tests/vocab#> .

: rdfs:comment     "Manifest vocabulary for JSON-LD test cases" ;
  dc11:creator       "Gregg Kellogg" ;
  dc11:publisher     "W3C Linked JSON Community Group" ;
  dc11:title         "Test case manifest vocabulary extensions" ;
  dc11:description   "Test case manifest vocabulary extensions" ;
  dc11:date          "2013-09-23" ;
  dc11:identifier    : .

## ---- Test Case Classes ---

:Test a rdfs:Class ;
  rdfs:label "Superclass of all JSON-LD tests" ;
  rdfs:comment """
    All JSON-LD tests have an input file referenced using
    `mf:action` (aliased as "input" in test manifest).
    Positive and Negative Evaluation Tests also have a result file
    referenced using `mf:result` (aliased as "expect" and "expectErrorCode" for
    respectively Positive and Negative Evaluation Tests in test manifest).
    Other tests may take different inputs and options as defined for each test class.
    Tests should be run with the processingMode option set to "json-ld-1.1",
    unless specified explicitly as a test option.
  """ .

:PositiveEvaluationTest a rdfs:Class ;
  rdfs:label "Positive Evaluation Test" ;
  rdfs:subClassOf :Test ;
  rdfs:comment """
    A Positive Evaluation test is successful when the result of processing
    the input file specified as `mf:action` (aliased as "input" in test manifest)
    exactly matches the output file specified as
    `mf:result` (aliased as "expect" in test manifest) using the comparison defined in
    another class. The specifics of invoking test, including the interpretation of options
    (`:option`) and other input files are specified through another class.
  """ .

:NegativeEvaluationTest a rdfs:Class ;
  rdfs:label "Negative Evaluation Test" ;
  rdfs:subClassOf :Test ;
  rdfs:comment """
    A Negative Evaluation test is successful when the result of processing
    the input file specified as `mf:action` (aliased as "input" in test manifest)
    results in the error identified by the literal value of
    `mf:result` (aliased as "expectErrorCode" in test manifest).
    The specifics of invoking test, including
    the interpretation of options (`:option`) and other input files are
    specified through another class.
    See the [README](https://w3c.github.io/json-ld-api/tests/) for more details on running tests.
  """ .

:PositiveSyntaxTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "Positive Syntax Test" ;
  rdfs:comment """
    A type of test specifically for syntax testing.
    Syntax tests are not required to have an associated result, only an action.
  """ .

:NegativeSyntaxTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "Negative Syntax Test" ;
  rdfs:comment """
    A type of test specifically for syntax testing.
    Syntax tests are not required to have an associated result, only an action.
    Negative syntax tests are tests of which the result should be a parser error.
  """ .

:CompactTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "Compact Evaluation Test" ;
  rdfs:comment """
    A `CompactTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
    `PositiveSyntaxTest` or `NegativeSyntaxTest`.
  """ .

:ExpandTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "Expand Evaluation Test" ;
  rdfs:comment """
    A `ExpandTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
    `PositiveSyntaxTest` or `NegativeSyntaxTest`.
  """ .

:FlattenTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "Flatten Evaluation Test" ;
  rdfs:comment """
    A `FlattenTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
    `PositiveSyntaxTest` or `NegativeSyntaxTest`.
  """ .

:FrameTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "Frame Evaluation Test" ;
  rdfs:comment """
    A `FrameTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
    `PositiveSyntaxTest` or `NegativeSyntaxTest`.
  """ .

:FromRDFTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "From RDF Evaluation Test" ;
  rdfs:comment """
    A `FromRDFTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
    `PositiveSyntaxTest` or `NegativeSyntaxTest`.
  """ .

:HtmlTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "HTML Evaluation Test" ;
  rdfs:comment """
    An `HtmlTest` modifies either a `PositiveEvaluationTest` or `NegativeEvaluationTest`
    indicating that the source is of type text/html, which requires optional
    _HTML script extraction_ support.
  """ .

:HttpTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "HTTP Evaluation Test" ;
  rdfs:comment """
    An `HttpTest` modifies either a `PositiveEvaluationTest` or `NegativeEvaluationTest`.
  """ .

:ToRDFTest a rdfs:Class ;
  rdfs:subClassOf :Test ;
  rdfs:label "To RDF Evaluation Test" ;
  rdfs:comment """
    A `ToRDFTest` modifies either a `PositiveEvaluationTest`, `NegativeEvaluationTest`,
    `PositiveSyntaxTest` or `NegativeSyntaxTest`.
  """ .

:Option a rdfs:Class ;
  rdfs:label "Processor Options" ;
  rdfs:comment "Options passed to the test runner to affect invocation of the appropriate API method." .

## ---- Property declarations for each test ----

:input a rdf:Property ;
  rdfs:label "input";
  rdfs:comment "Secondary input file" ;
  rdfs:domain	 :Test ;
  rdfs:range   rdfs:Resource .

:context a rdf:Property ;
  rdfs:label "context";
  rdfs:comment "A context that is used for transforming the input document." ;
  rdfs:domain	 :Test ;
  rdfs:range   rdfs:Resource .

:frame a rdf:Property ;
  rdfs:label "input";
  rdfs:comment "A frame that is used for transforming the input document." ;
  rdfs:domain	 :Test ;
  rdfs:range   rdfs:Resource .

:option a rdf:Property ;
  rdfs:label "option";
  rdfs:comment "Options affecting processing" ;
  rdfs:domain	 :Test ;
  rdfs:range   :Option .

:base a rdf:Property ;
  rdfs:label "base";
  rdfs:comment """
    The base IRI to use when expanding or compacting the document.
    If set, this overrides the input document's IRI.
  """ ;
  rdfs:domain	 :Option ;
  rdfs:range   rdfs:Resource .

:compactArrays a rdf:Property ;
  rdfs:label "compact arrays";
  rdfs:comment """
    If set to `true`, the JSON-LD processor replaces arrays with just one element
    with that element during compaction.
    If set to false, all arrays will remain arrays even if they have just one element.
  """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:compactToRelative a rdf:Property ;
  rdfs:label "compact to relative";
  rdfs:comment """
    If set to `false`, the JSON-LD processor will not attempt to compact using document-relative IRIs.
  """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:expandContext a rdf:Property ;
  rdfs:label "expand context";
  rdfs:comment "A context that is used to initialize the active context when expanding a document." ;
  rdfs:domain	 :Option ;
  rdfs:range   rdfs:Resource .

:processingMode a rdf:Property ;
  rdfs:label "processing mode";
  rdfs:comment """
    If set to "json-ld-1.1", the JSON-LD processor must produce exactly the same results as
    the algorithms defined in this specification.
    If set to another value, the JSON-LD processor is allowed to extend or modify
    the algorithms defined in this specification to enable application-specific optimizations.
    The definition of such optimizations is beyond the scope of this specification and thus not defined.
    Consequently, different implementations may implement different optimizations.
    Developers must not define modes beginning with json-ld as they are reserved for future versions of this specification.
  """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:string .

:produceGeneralizedRdf a rdf:Property ;
  rdfs:label "produce generalized RDF";
  rdfs:comment "Unless the produce generalized RDF flag is set to true, RDF triples containing a blank node predicate are excluded from output." ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:useNativeTypes a rdf:Property ;
  rdfs:label "use native types";
  rdfs:comment """
    If the _use native types_ flag is set to `true`, RDF literals with a datatype IRI that
    equal `xsd:integer` or `xsd:double` are converted to a JSON numbers and RDF literals
    with a datatype IRI that equals `xsd:boolean` are converted to `true` or `false` based
    on their lexical form.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:useJCS a rdf:Property ;
  rdfs:label "use JCS";
  rdfs:comment """
    Requires the use of JSON Canonicalization Scheme when generating RDF literals from JSON literal values.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:useRdfType a rdf:Property ;
  rdfs:label "use RDF types";
  rdfs:comment """
    If the _use rdf type_ flag is set to `true`, statements with an `rdf:type` predicate
    will not use `@type`, but will be transformed as a normal property.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:contentType a rdf:Property ;
  rdfs:label "content type";
  rdfs:comment """
    The HTTP Content-Type used for the input file, in case it is a non-registered type.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:string .

:extractAllScripts a rdf:Property ;
  rdfs:label "extract all scripts";
  rdfs:comment """
    Whether to extract all script elements from HTML, or just the first encountered.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:redirectTo a rdf:Property ;
  rdfs:label "redirect to";
  rdfs:comment """
    The location of a URL for redirection. A request made of the input file must be redirected
    to the designated URL.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:string .

:httpAccept a rdf:Property ;
  rdfs:label "HTTP Accept";
  rdfs:comment """
    An HTTP Accept header.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:string .

:httpLink a rdf:Property ;
  rdfs:label "HTTP link";
  rdfs:comment """
    An HTTP Link header to be added to the result of requesting the input file.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:string .

:httpStatus a rdf:Property ;
  rdfs:label "HTTP status";
  rdfs:comment """
    The HTTP status code that must be returned when the input file is requested. This
    is typically used along with the `redirectTo` property.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:integer .

:normative a rdf:Property ;
  rdfs:label "normative";
  rdfs:comment """
    Indicates that this is or is not a test of a normative requirement.
    Tests without this option are treated as being normative.
    """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:boolean .

:processorFeature a rdf:Property ;
  rdfs:label "processor feature";
  rdfs:comment """
    A particular processor feature that may be supported by some implementations.
  """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:string .

:specVersion a rdf:Property ;
  rdfs:label "spec version";
  rdfs:comment """
    Indicates the JSON-LD version to which the test applies, rather than the
    specific processing mode. Values are "json-ld-1.0", and "json-ld-1.1". If not set, the
    test is presumed to be valid for all versions of JSON-LD. In cases where
    results differ between spec versions for the same test, the test will have
    both a "1.0" and "1.1" version, for example.
  """ ;
  rdfs:domain	 :Option ;
  rdfs:range   xsd:string .

# Test requirements (mf:requires)
:I18nDatatype a mf:Requirement ;
  rdfs:label "I18nDatatype" ;
  rdfs:comment "Optional test to serialize text direction using `i18n-datatype`" .

:CompoundLiteral a mf:Requirement ;
  rdfs:label "CompoundLiteral" ;
  rdfs:comment "Optional test to serialize text direction using `compound-literal`" .

:GeneralizedRdf a mf:Requirement ;
  rdfs:label "GeneralizedRdf" ;
  rdfs:comment "Test generates Generalized RDF" .
