NAME
    RDF::LinkedData - A simple Linked Data server implementation

VERSION
    Version 0.58

SYNOPSIS
    For just setting this up and get it to run, you would just use the
    "linked_data.psgi" script in this distribution. The usage of that is
    documented in Plack::App::RDF::LinkedData. If you want to try and use
    this directly, you'd do stuff like:

            my $ld = RDF::LinkedData->new(store => $config->{store},
                                     endpoint_config => $config->{endpoint},
                                     base_uri => $config->{base_uri}
                                    );
            $ld->namespaces($config->{namespaces}) if ($config->{namespaces});
            $ld->request($req);
            return $ld->response($uri)->finalize;

    See Plack::App::RDF::LinkedData for a complete example.

DESCRIPTION
    This module is used to create a minimal Linked Data server that can
    serve RDF data out of an RDF::Trine::Model. It will look up URIs in the
    model and do the right thing (known as the 303 dance) and mint URLs for
    that, as well as content negotiation. Thus, you can concentrate on URIs
    for your things, you need not be concerned about minting URLs for the
    pages to serve it.

METHODS
    "new ( store => $store, model => $model, base_uri => $base_uri,
    hypermedia => 1, namespaces_as_vocabularies => 1, request => $request,
    endpoint_config => $endpoint_config, void_config => $void_config )"
        Creates a new handler object based on named parameters, given a
        store config (recommended usage is to pass a hashref of the type
        that can be passed to RDF::Trine::Store->new_with_config, but a
        simple string can also be used) or model and a base URI. Optionally,
        you may pass a Plack::Request object (must be passed before you call
        "content") and an "endpoint_config" hashref if you want to have a
        SPARQL Endpoint running using the recommended module RDF::Endpoint.

        This module can also provide additional triples to turn the respons
        into a hypermedia type. If you don't want this, set the "hypermedia"
        argument to false. Currently this entails setting the SPARQL
        endpoint and vocabularies used using the VoID vocabulary
        <http://vocab.deri.ie/void>. The latter is very limited at present,
        all it'll do is use the namespaces if you have
        "namespaces_as_vocabularies" enabled, which it is by default.

    "BUILD"
        Called by Moose to initialize an object.

    "model"
        Returns the RDF::Trine::Model object.

    "base_uri"
        Returns or sets the base URI for this handler.

    "request ( [ $request ] )"
        Returns the Plack::Request object if it exists or sets it if a
        Plack::Request object is given as parameter.

    "current_etag"
        Returns the current Etag of the model suitable for use in a HTTP
        header. This is a read-only attribute.

    "last_etag", "has_last_etag"
        Returns or sets the last Etag of so that changes to the model can be
        detected.

    namespaces ( { skos => 'http://www.w3.org/2004/02/skos/core#', dct =>
    'http://purl.org/dc/terms/' } )
        Gets or sets the namespaces that some serializers use for
        pretty-printing.

    "response ( $uri )"
        Will look up what to do with the given URI object and populate the
        response object.

    "helper_properties ( )"
        Returns the RDF::Helper::Properties object if it exists or sets it
        if a RDF::Helper::Properties object is given as parameter.

    "type"
        Returns or sets the type of result to return, i.e. "page", in the
        case of a human-intended page or "data" for machine consumption, or
        an empty string if it is an actual resource URI that should be
        redirected.

    "my_node"
        A node for the requested URI. This node is typically used as the
        subject to find which statements to return as data. This expects to
        get a URI object containing the full URI of the node.

    "count ( $node)"
        Returns the number of statements that has the $node as subject, or
        all if $node is undef.

    "endpoint ( [ $endpoint ] )"
        Returns the RDF::Endpoint object if it exists or sets it if a
        RDF::Endpoint object is given as parameter. In most cases, it will
        be created for you if you pass a "endpoint_config" hashref to the
        constructor, so you would most likely not use this method.

    "void ( [ $voidg ] )"
        Returns the RDF::Generator::Void object if it exists or sets it if a
        RDF::Generator::Void object is given as parameter. Like "endpoint",
        it will be created for you if you pass a "void_config" hashref to
        the constructor, so you would most likely not use this method.

AUTHOR
    Kjetil Kjernsmo, "<kjetilk@cpan.org>"

BUGS
    Please report any bugs using github
    <https://github.com/kjetilk/RDF-LinkedData/issues>

SUPPORT
    You can find documentation for this module with the perldoc command.

        perldoc RDF::LinkedData

    The perlrdf mailing list is the right place to seek help and discuss
    this module:

    <http://lists.perlrdf.org/listinfo/dev>

TODO
    *   Use IO::Handle streams when they become available from the
        serializers.

    *   Figure out what needs to be done to use this code in other
        frameworks, such as Magpie.

    *   Make it read-write hypermedia.

    *   Use a environment variable for config on the command line?

    *   Make the result graph configurable.

ACKNOWLEDGEMENTS
    This module was started by Gregory Todd Williams "<gwilliams@cpan.org>"
    for RDF::LinkedData::Apache, but has been almost totally rewritten.

COPYRIGHT & LICENSE
    Copyright 2010 Gregory Todd Williams

    Copyright 2010 ABC Startsiden AS

    Copyright 2010, 2011, 2012, 2013 Kjetil Kjernsmo

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

