# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Graph store -- for SPARQL/Update

@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:    <http://www.w3.org/2001/XMLSchema#> .
@prefix ja:     <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix :       <#> .

## Graphstore - one default graph, two named graphs, all empty.

<> rdf:type         ja:GraphStore ;
    ja:defaultGraph
        [ rdf:type ja:MemoryModel ] ;
    ja:namedGraph [ ja:graphName <http://example/graph1> ;
                    ja:graph    :data1 ] ;
    ja:namedGraph [ ja:graphName <http://example/graph2> ;
                    ja:graph    :data2 ] ;
    . 

# Empty
:data1 rdf:type ja:MemoryModel ;
    .

# Empty
:data2 rdf:type ja:MemoryModel ;
    .
