The APIS project intents to semantically annotate the Austrian Bibliography Lexicon (ÖBL). To achieve this goal we develop(ed) this web-app. It is based on a 5 entities (person, place, institution, event, work) data model. All 5 entities are connected to each other. Entities, as well as relations between them, can be typed with vocabularies similar to the Simple Knowledge Organization System (SKOS_).
While a default APIS installation uses the 5 entities data model described above, this data model can be rather easily adapted to whatever fits best to the project using it. Frontend and RestAPI automatically adapt to changes in the data model.
In addition to this configurable import of data via RDF, there is also an configurable serialization of data. The generic RestAPI
of APIS provides data either in the internal JSON format, TEI or RDF (serialized with CIDOC CRM
_).
APIS comes with a built in system of autocompletes that allows researchers to import meta-data of entities with just a single click. Out of the box APIS supports Stanbol as a backend for the autocompletes, but the system is rather easy to adapt to any Restfull API. APIS also supports the parsing of RDFs describing entities into an entity. The parsing is configured in a settings file.
APIS has a mnodular structure and its core functionalities (provided by this library) can be extended with further modules. Currently there are:
For a demo of the application please refer to apisdev_.
The installation process is described in the apis-core docs_.
All code unless otherwise noted is licensed under the terms of the MIT License (MIT). Please refer to the file LICENSE in the root directory of this repository.
All documentation and images unless otherwise noted are licensed under the terms of Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/
.. _APIS: https://www.oeaw.ac.at/acdh/projects/apis/
.. _apisdev: https://apis.acdh-dev.oeaw.ac.at
.. _ÖBL: http://www.biographien.ac.at
.. _SKOS: https://en.wikipedia.org/wiki/Simple_Knowledge_Organization_System
.. _Stanbol: https://stanbol.apache.org/
.. _RDFs: https://en.wikipedia.org/wiki/Resource_Description_Framework
.. _docs: https://acdh-oeaw.github.io/apis-core/
.. _apis-highlighter: https://github.com/acdh-oeaw/apis_highlighter
.. apis-bibsonomy: https://github.com/acdh-oeaw/apis-bibsonomy
.. CIDOC CRM
: http://www.cidoc-crm.org/
things which needs to be added to the project's settings and urls files
INSTALLED_APPS
...
'apis_core.apis_entities',
'apis_core.apis_metainfo',
'apis_core.apis_relations',
'apis_core.apis_vocabularies',
'apis_core.apis_labels',
...
'OPTIONS': {
'context_processors': [
...
'webpage.webpage_content_processors.is_dev_version',
'apis_core.context_processors.custom_context_processors.add_entities',
...
],
},
todo!
configure the default columns for entitiy list views
'table_fields': [
'name', 'lat', 'lng'
],
configure which columns users can add to the default list view
'additional_cols': [
'lat', 'lng', 'part_of'
],
Filters for list views for apis relations are generated by apis_core.apis_relations.rel_filters.get_filters
and can be configured via specific settings parameters in the project's settings file. You can provide a list APIS_RELATIONS_FILTER_EXCLUDE
with (sub)strings of field names which should be excluded from the filter.
The list below provides a reasonable default:
APIS_RELATIONS_FILTER_EXCLUDE = [
'uri',
'tempentityclass',
'user', '__id',
'source',
'label',
'temp_entity',
'collection__',
'_ptr',
'baseclass',
'id',
'written',
'relation_type__description',
'relation_type__parent_class',
'relation_type__status',
'relation_type__vocab_name',
'relation_type__name_reverse',
'__text',
]
Additionally you can exclude fields on class level:
APIS_RELATIONS = {
'PersonPlace': {
'exclude': ['name']
}
}
In case you set this parameter to False
then apis_core.apis_metainfo.TempEntityClass.get_prev_url()
and apis_core.apis_metainfo.TempEntityClass.get_next_url()
methods return False
. Set this param to deactivate the prev/next browsing function in the entitie's detail view. Default (if not set) is True
This parameter is used to construct URIs for Apis Entities in case no external URIs (like geonames or gnd) are provided, defaults to http://apis.info
e.g. APIS_BASE_URI = 'https://myprocect/objects/'
will create a URI like https://myprocect/objects/1234
If theese settings are missing or set to False
not logged in users will be redirected to log-in page
APIS_LIST_VIEWS_ALLOWED = True
APIS_DETAILKJL_VIEWS_ALLOWED = True
Change the template name in the project's settings file by adding the following variable
APIS_LIST_VIEW_TEMPLATE = "browsing/generic_list.html"
APIS_DELETE_VIEW_TEMPLATE = "webpage/confirm_delete.html"
In case you store TEI encoded XML in you TEXT objects, you can display those with https://github.com/TEIC/CETEIcean. Therefore you'll need to list the values of Text.kind.name
in a settings parameter.
Let's say that all TEI texts are stored in Text fields with kind "xml/tei transcription":
APIS_TEI_TEXTS = ['xml/tei transcription']
You'll also need to set define the locations for the CETEICEAN specific static files via dedicated paramters:
APIS_CETEICEAN_CSS = "http://teic.github.io/CETEIcean/css/CETEIcean.css"
APIS_CETEICEAN_JS = "http://teic.github.io/CETEIcean/js/CETEI.js"
In case you want to dipslay images served via IIIF protocoll add the following params to your settings files
APIS_IIIF_WORK_KIND = 'IIIF'
APIS_IIIF_ENT_IIIF_REL = "has iiif image"
APIS_IIIF_SERVER = "https://iiif.acdh.oeaw.ac.at/"
# APIS_OPENSEADRAGON_CSS = "https://teic.github.io/CETEIcean/css/CETEIcean.css"
APIS_OSD_JS = "https://cdnjs.cloudflare.com/ajax/libs/openseadragon/2.4.0/openseadragon.min.js"
APIS_OSD_IMG_PREFIX = "https://cdnjs.cloudflare.com/ajax/libs/openseadragon/2.4.0/images/"
python manage.py import_rel_vocabs {path-to-excel-file}
Excel-File needs to match following conventions:
sheet name needs to be the class name of the Vocab class, e.g. PersonWorkRelation
sheets need column-header ebene_1
, ebene_2
, ...
field values: name|name_reverse; if no name_reverse value is provided, name_reverse is the same as name
all vocabs in one row are linked with as parent_classes, column one does not have a parent class, column 2 (ebene_2
) takes as parent value from class ebene_1