Git Product home page Git Product logo

autocomplete_endpoint's Introduction

Autocomplete Endpoint

Introduction

A Drupal 8/9 module that provides an HTTP endpoint for exposing vocabularies for consumption by Drupal autocomplete form elements. Initially intended to be used with Linked Data Lookup Field, which "Provides an autocomplete field widget that pulls suggested matches and URLs from authoritative sources." The Autocomplete Endpoint module enables Drupal to be an authoritative source for Linked Data vocabularies.

Here, "vocabularies" are not necessarily Drupal vocabularies (although they can be, but they can also be groups of nodes, as explained below). "Vocabularies" are any collection of terms intended for reuse by Linked Data consumers. This module enables vocabularies to be maintained in a "provider" Drupal instance; these vocabularies can then be used by any number of "consumer" Drupal instances. The result is that all consumers of a vocabulary share Linked Data that can be used to query, traverse, and aggregate content across all members of the network.

Use cases

Some use cases for this ability are:

  • A university library runs three different Islandora instances (an institutional repository, a research data repository, and a repository of digitized images/books/manuscripts), and has a local vocabulary of department names that applies to items in all three repositories.
  • A group of libraries running Islandora are collaborating on creating distributed collections on a specific theme, and they want subject specialists from their partner insitutions to assist with creating Islandora objects. With this module, they can all use the same set of locally managed name entities.
  • A group of allied community organizations all use Drupal (not Islandora) as their CMS, and each runs local training events. Using this module, all members of this group can use the same set of keywords to describe their events, enabling querying/grouping of those events across all members.

In each case, the "provider" Drupal instance (the one running this module) maintains the shared vocabulary on behalf of the "consumers", which run the Linked Data Lookup Field module. The provider can itself run the Linked Data Lookup Field module and use the shared vocabulary, making it both the provider and a consumer.

Note that even though a vocabulary endpoint configuration exposes Drupal vocabulary terms and their URIs, the Linked Data Lookup field type in the consuming Drupal is not a taxonomy reference field, it is a structured field comprised of two text subfields, one for the label and the other for the URI. In other words, the source Drupal manages the Linked Data vocabulary as a standard Drupal vocabulary (with a URI field added) but the consuming Drupal stores the exposed Linked Data as pairs of labels and URIs.

Vocabularies exposed in this way are not limited to use by other Drupal instances. The data that this module exposes is consistent with the data exposed by the Library of Congress and other providers of Linked Data vocabularies.

Requirements

There are no hard requirements for installing this module other than Drupal 8, but data it exposes was initially intended to be consumed by Linked Data Lookup Field.

This module is Drupal 9 ready.

Installation

  1. Clone this repo into your Islandora's drupal/web/modules/contrib directory.
  2. Enable the module either under the "Admin > Extend" menu or by running drush en -y autocomplete_endpoint.

Configuration

Providing URIs for things

Before you create autocomplete endpoints, you will need to add a special field to the vocabulary or content type that you want to expose as linked data. This field is not really that special, but it must be present. You will need to identify this field when you create your endpoints as described below.

This field will hold the Linked Data URI for each vocabulary term or node. When you create it, choose "Text (plain)". It doesn't matter what you name it.

Creating the autocomplete endpoints

Enpoints are configured at /admin/autocomplete_endpoint. Once they exist, they can be used as described in the "Usage" section below.

The configuration form asks for the "machine name" of various things. This is obtainable in the following ways:

  • Vocabulary ID: when you are viewing the list of terms in a vocabulary, e.g., /admin/structure/taxonomy/manage/genre/overview, the vocabulary's machine name is the string that comes before "overview", in this example "genre".
  • Node content type: when you are viewing the list of fields in a content type, e.g., /admin/structure/types/manage/islandora_object/fields, the content type's machine name is the string that comes before "fields", in this example "islandora_object".
  • URI field: for both vocabularies and content types, when you are viewing the "Manage Fields" tab, the machine name of the field you have configured to store Linked Data URIs.

Usage

On the Drupal instance exposing the data (the "provider")

Once you have configured an endpoint, it is ready for consumers to use. You will need to provide to those sites' admins a base URL. This URL contains the "machine name" of the autocomplete endpoint configuration, which is displayed in the list of endpoints. The base URL will look like:

[your Drupal's hostname]/autocomplete_endpoint/myendpointsmachinename?q=

where myendpointsmachinename is the machine name of the autocomplete endpoint. Note that the q URL parameter is empty.

On the Drupal instance running Linked Data Lookup Field (the "consumer")

To add a new endpoint field to a content type that consumes a shared Linked data vocabulary, do the following:

  • Ask the administrator of the provider Drupal instance what URL to to use in the "Base URL" field as described below.
  • Go to Admin > Structure > Linked Data Lookup Endpoint > Add Linked Data Lookup Endpoint.
  • Label: up to you.
  • Endpoint type: URL Argument Type
  • Base URL, as described in the previous section
    • Reminder: you won't be able to guess at this value, you will need to get the exact URL to use from the administrator of the provider Drupal instance.
  • Result record JSON path: [*]
  • Label JSON key: label
  • URL JSON key: uri

Your endpoint is now configured as a field that can be added to a content type. To add it:

  1. Go to Admin > Structure > Content types > [your content type] > Manage fields > Add field
  2. Choose "Linked Data Lookup Field" as the field type
  3. Choose the new endpoint you created following the instructions above.

Current maintainer

Mark Jordan

License

GPLv2

autocomplete_endpoint's People

Contributors

alxp avatar mjordan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.