Giter VIP home page Giter VIP logo

icaruseu / mom-ca Goto Github PK

View Code? Open in Web Editor NEW
17.0 12.0 11.0 340.63 MB

Monasterium.net (http://www.monasterium.net/mom) - repository and collaborative archive

Home Page: https://github.com/icaruseu/mom-ca/wiki

License: GNU General Public License v3.0

XSLT 2.09% XQuery 4.10% JavaScript 51.56% Shell 0.01% HTML 39.58% CSS 0.66% Python 0.27% Java 1.69% PHP 0.01% Dockerfile 0.03%
digitalhumanities diplomatics xml

mom-ca's Introduction

Monasterium - Collaborative Archive

This repository contains the code for MOM-CA, the software that powers Monasterium.net. The readme file you are currently reading gives some basic information about how to run the software but for more information please consult the wiki.

Basics

MOM-CA is based on eXist-db, an XML database and application platform implemented in Java.

Running directly

Notes

  • An admin user with the password specified in the build properties will be created by the installation process
  • MOM-CA will rely on the sendmail command to send notifiaction emails. It has to be configured separately.
  • The database content will be stored next to mom.XRX in a folder called mom.XRX-data.
  • The system will be accessible at localhost:8181 (or using the configured port). To be reachable outside of the host system, a reverse proxy like nginx has to be configured.

Prerequisites

  • Linux server with Java > JDK 6, ant and git installed

Installation

  1. Clone the software with git clone https://github.com/icaruseu/mom-ca.git mom.XRX
  2. Adapt build.properties.xml to your needs (details).
  3. Build the software by using ant install in mom.XRX
  4. Start MOM-CA by using ant start. It will be reachable under localhost:8181 by default or with the port chosen by you in step #2.
  5. You can restore a backup by using ant restore-backup -Dbackup=[PATH_TO_BACKUP_FILE]
  6. In case you don't want to restore a backup you have to initialize the database and admin user account by using ant initialize-new-database.
  7. Stop MOM-CA by using ant stop.

Running with Docker

Notes

  • The database content is defined as a volume and is defined in the included docker-compose.yml as the data volume.
  • The ./my folder is mounted into the container to make direct changes to the source code easily possible. Changes still have to be compiled to be visible inside the database.
  • The included docker-compose.yml can be extended by using multiple configuration files.
  • An admin user with the password specified in the environment parameters will be created in the image
  • The system will be accessible at localhost:8181 (or using the configured port). To be reachable outside of the host system, a reverse proxy like nginx or traefik has to be configured.

Prerequisites

Build configuration

It is possible to set various parameters that MOM-CA will use when building a docker image. They are set in a .env file in the root code folder (see building instructions below). The possible parameters are:

Name Default Mandatory Description
BACKUP_TRIGGER 0 0 4 * * ? no The definition for the backup trigger cronjob.
CACHE_SIZE 256 no The eXist cache size.
COLLECTION_CACHE 256 no The eXist collection cache size.
HTTPS_PORT 8443 no The HTTPS port the internal eXist Jetty server listens to.
HTTP_PORT 8181 no The HTTP port the internal eXist Jetty server listens to.
INIT_MEMORY 256 no The initial memory available to the database.
LUCENE_BUFFER 256 no The eXist lucene buffer size.
MAIL_DOMAIN no The email sender domain
MAIL_FROM_ADDRESS no The 'From' email address
MAIL_PASSWORD no The email server account password
MAIL_USER no The email server user account name
MAX_MEMORY 2048 no The maximum memory available to the database.
PASSWORD yes The admin password to set during build.
REVISION no Enable the versioning system. Currently has no effect.
SERVER_NAME localhost no The name of the internal server.
SMTP_URL no The url of the smtp server to send mails with.
USE_SSL false no Whether or not BetterFORM/eXist understands SSL connections

Building the image

  1. Clone the software with git clone https://github.com/icaruseu/mom-ca.git mom.XRX
  2. Create a .env file in the mom.XRX folder and add the desired parameters (for a list of possible values see above).
  3. Build the docker image with docker-compose build

Using the image

  • A container using the image can be launched by using the docker-compose up -d command. If started for the first time, it will create a new data volume with an empty MOM-CA database, if starting an already existing container with data volume, the volume will not be changed by the process.
  • The logs of the container can be viewed by using docker logs -f momca
  • The container can be entered by using docker exec -it momca /bin/bash
  • Files can be copied into the container using docker cp [SRC_PATH] [CONTAINER:DEST_PATH] and from inside the container by using docker cp [CONTAINER:SRC_PATH] [DEST_PATH]. This can be used for backup purposes.
  • Ant targets defined in the MOM-CA code can be executed by using docker exec -it momca ant [target]
  • A backup can be restored by using docker exec -it momca ant restore-backup -Dbackup=[BACKUP_PATH_IN_CONTAINER]
  • The container can be stopped by using docker-compose down or, including all volumes, docker-compose down -v WARNING: the -v flag deletes the database content without further warnings

Upgrading the database to new source code

Whenever the MOM-CA source code is changed, either by pulling changes and building a new image or by changing the code in the local repository (it is mounted in the container by default), an additional step has to be taken to push the changes into the database and therefore making it visible to the application in the browser:

docker exec -it momca ant compile-xrx-project

DISCLAIMER: Due to the nature of MOM-CA this can be somewhat unreliable and sometimes has to be done multiple times (until it works) ¯\_(ツ)_/¯

Enable HTTPS

If so desired, the docker can be used in combination with a router like Traefik to enable HTTPS connection. To do this, the docker-compose.yml file has to be modified or a docker-compose.override.yml has to be created next to the main compose file. In addition to the specific setup needed to serve the content from the MOM-CA container (Traefik needs specific Labels to create a configuration for the container) valid key files need to be mounted at a specific location of the container:

  • [PATH_TO_CERTIFICATE.crt]:/opt/momca/ssl/certificate.crt:ro
  • [PATH_TO_PRIVATE_KEY.key]:/opt/momca/ssl/privatekey.key:ro

To enable the use of this files, the USE_SSL Environment parameter needs to be set to true.

Note: this certificates will be embedded into MOM-CA on each container start so if the certificate needs to be renewed the container needs to be restarted for the new certificate to be used.

The following shows a valid override file for MOM-CA using Traefik 2:

version: '3'

services:

  momca:
    volumes:
      - /ssl/momca.example.com/certificate.crt:/opt/momca/ssl/certificate.crt:ro
      - /ssl/momca.example.com/privatekey.key:/opt/momca/ssl/privatekey.key:ro
    networks:
      - traefik
    labels:
      - traefik.enable=true
      - traefik.http.routers.momca.entrypoints=http
      - traefik.http.routers.momca.rule=Host(`momca.example.com`)
      - traefik.http.middlewares.momca-https-redirect.redirectscheme.scheme=https
      - traefik.http.routers.momca.middlewares=momca-https-redirect
      - traefik.http.routers.momca-secure.entrypoints=https
      - traefik.http.routers.momca-secure.rule=Host(`momca.example.com`)
      - traefik.http.routers.momca-secure.tls=true
      - traefik.http.routers.momca-secure.tls.certresolver=http
      - traefik.http.routers.momca-secure.service=momca
      - traefik.http.services.momca.loadbalancer.server.port=8181
      - traefik.docker.network=traefik

networks:
  traefik:
    external: true

Email

For a live server it is advisable to configure an smtp server so that MOM-CA can send notification emails. This can be achieved by setting the appropriate .env parameters (see above).

mom-ca's People

Contributors

gvogeler avatar icarus-eu avatar jbigalke avatar jochengraf avatar larkvi avatar maburg avatar ntsch avatar stephanma avatar strec avatar yngwi avatar zim-acdh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mom-ca's Issues

move to Java 8

Java 7 didn't work because of an SQL extension added to the standard eXist installation
With Java 8 we have no experience.

Install without data

Basic build doesn't create mom-data and substructures (metadata.annotation, metadata.archive.public, metadata.charter.import, metadata.charter.import.util, metadata.charter.public, metadata.charter.saved, metadata.collection.public, metadata.fond.public, metadata.imagecollections, metadata.mycollection.public, metadata.portal.public, xrx.htdoc, xrx.i18n, xrx.user)

Ein Benutzerinterface für die Zuweisung der Klassifikation/Geographie zu Sammlungen

Collections can be displayed grouped/sorted by time added, by the creating user, by geography (http://dev.monasterium.net/mom/collections/by-country) or category (http://dev.monasterium.net/mom/collections/by-category). This information is stored in the cei-files in the metadata.collection.public and metadata.mycollection.public eXist-db collections. Currently there is no user interface to assign/modify this information.

display cei:lb

e.g. in cei:legend (in single charter view and pdf export)
Zum einen Beschreibungen von Siegeln o.Ä., etwa die Wiedergabe des Siegelrevers
von App. dipl. 8, das in unserem Repertorium folgendermaßen aussieht:

INNO - - CENTIUS


PP - - V

Hier kann man den Befehl cei:lb nutzen, der, wenn ich dies richtig verstanden
habe, ja zur Kennzeichnung von Zeilenumbrüchen im Original dient. Allerdings
werden die Umbrüche nicht überall korrekt wiedergegeben, sie verschwinden
beispielsweise beim PDF-Export.

e.g. in cei:abstract
Der andere Fall betrifft lange Regestentexte, Kommentarfelder etc. Hier wurden
für die Darstellung in Monasterium gegenüber unseren Ausgangsdaten sämtliche
Zeilenumbrüche entfernt. Gibt es hier irgendwelche Möglichkeiten (bzw. sind
solche für die Zukunft angedacht) die entsprechenden Felder sinnvoll zu
untergliedern (betrifft etwa App. dipl. 51)? Sollt hier ebenfalls cei:lb genutzt
werden? Merkwürdig ist auch, dass unsere Zeilenumbrüche anscheinend nicht
vollständig verschwunden sind; geht man bei einer überarbeiteten, aber noch
nicht veröffentlichten Urkunde unter "Mein Archiv" auf "Nur Änderungen
anzeigen", werden dort die Zeilenumbrüche so angezeigt, wie sie von uns
vorgenommen worden sind.

Browsers from Spain get an XRX-Error

/db/XRX.live/mom/app/xrx/main.xql exerr:ERROR Error while evaluating expression: {let $x___ := "" let $whome:htdoc-entry := htdoc:get('tag:www.monasterium.net,2011:/mom/htdoc/home') let $whome:htdoc-title := htdoc:title($whome:htdoc-entry)/text() let $whome:htdoc-atomid := $whome:htdoc-entry/atom:id/text() let $whome:statistics := mom:statistics() return ( <title>{ if($xrx:mainwidget/xrx:title/xrx:i18n) then i18n:translate($xrx:mainwidget/xrx:title/xrx:i18n) else() }{ if($xrx:htdoc//xrx:i18n) then i18n:translate($xrx:htdoc//xrx:i18n) else() } { string-join(subsequence($xrx:tokenized-uri, 1, count($xrx:tokenized-uri) - 1), '|') } - { conf:param("platform-browser-title") }</title> , { if(auth:matches( xrx:user/ xrx:roletranslator/xrx:role /xrx:rule)) then

Modify single charter data model for extensive citations?

e.g. quoteOriginaldatierung
Winnefeld: "Besteht evtl. die Möglichkeit, weitere Zitate, etwa den Originalwortlaut von Zeugenlisten als "Zitat" zu erfassen? Bisher haben wir solche Informationen in ein Kommentarfeld ausgelagert."
pro: extensive descriptions without transcription do this often
con: it is nothing more than a partial transcription, thus why not encode it in the cei:tenor (maybe with cei:gap[@resp="editor"] in between?

Inconsistent cei:date / cei:dateRange data

Checken:

  • //cei:issued/cei:date kommt mehrfach vor?
  • //cei:issued/cei:dateRange mehrfach?
  • sowohl //cei:date als auch //cei:dateRange,
  • fehlendes //cei: issued/cei:date/@value,
  • fehlendes //cei:issued/cei:dateRange/(@from|@to)

order witList

src/mom/app/charter/xsl/cei2html.xsl => xsl:template match="xhtml:insert-witList" needs a xsl:sort on cei:archIdentifier.
cei:witnessOrig resp. cei:witness[cei:traditioForm='orig.'] has to be the first in the list

Problem with Excel-import-files containing invalid characters in the image name

Some import xls files seem to include the LF character (and can include spaces too) in the following way:

image1.jpg[space]$$[LF]image2.jpg

This stems from the producing archive trying to be helpful and inserting a new line after an image name. We will probably have to deal with that kind of thing from time to time.

The import environment should probably either remove characters automatically or mark the file as invalid on import and give the user some feedback.

The following extract contains image names from an actual Excel file:

Goettingen_App_Dipl_2C_um1481_0001-1.JPG $$
Goettingen_App_Dipl_2C_um1481_0001-2.JPG $$
Goettingen_App_Dipl_2C_um1481_0001-3.JPG $$
Goettingen_App_Dipl_2C_um1481_001.JPG $$
Goettingen_App_Dipl_2C_um1481_002.JPG $$
Goettingen_App_Dipl_2C_um1481_003.JPG $$
Goettingen_App_Dipl_2C_um1481_004.JPG $$
Goettingen_App_Dipl_2C_um1481_005.JPG $$
Goettingen_App_Dipl_2C_um1481_006.JPG $$
Goettingen_App_Dipl_2C_um1481_007.JPG $$
Goettingen_App_Dipl_2C_um1481_008.JPG $$
Goettingen_App_Dipl_2C_um1481_009.JPG $$
Goettingen_App_Dipl_2C_um1481_010.JPG $$
Goettingen_App_Dipl_2C_um1481_011.JPG $$
Goettingen_App_Dipl_2C_um1481_012.JPG $$
Goettingen_App_Dipl_2C_um1481_013.JPG $$
Goettingen_App_Dipl_2C_um1481_014.JPG $$
Goettingen_App_Dipl_2C_um1481_015.JPG $$
Goettingen_App_Dipl_2C_um1481_016.JPG $$
Goettingen_App_Dipl_2C_um1481_017.JPG $$
Goettingen_App_Dipl_2C_um1481_018.JPG $$
Goettingen_App_Dipl_2C_um1481_019.JPG $$
Goettingen_App_Dipl_2C_um1481_020.JPG $$
Goettingen_App_Dipl_2C_um1481_021.JPG $$
Goettingen_App_Dipl_2C_um1481_022.JPG $$
Goettingen_App_Dipl_2C_um1481_023.JPG $$
Goettingen_App_Dipl_2C_um1481_024.JPG $$
Goettingen_App_Dipl_2C_um1481_025.JPG $$
Goettingen_App_Dipl_2C_um1481_026.JPG $$
Goettingen_App_Dipl_2C_um1481_027.JPG $$
Goettingen_App_Dipl_2C_um1481_028.JPG $$
Goettingen_App_Dipl_2C_um1481_029.JPG $$
Goettingen_App_Dipl_2C_um1481_030.JPG $$
Goettingen_App_Dipl_2C_um1481_031.JPG $$
Goettingen_App_Dipl_2C_um1481_032.JPG $$
Goettingen_App_Dipl_2C_um1481_033.JPG $$
Goettingen_App_Dipl_2C_um1481_034.JPG $$
Goettingen_App_Dipl_2C_um1481_035.JPG $$
Goettingen_App_Dipl_2C_um1481_036.JPG $$
Goettingen_App_Dipl_2C_um1481_037.JPG $$
Goettingen_App_Dipl_2C_um1481_038.JPG $$
Goettingen_App_Dipl_2C_um1481_039.JPG $$
Goettingen_App_Dipl_2C_um1481_040.JPG $$
Goettingen_App_Dipl_2C_um1481_041.JPG $$
Goettingen_App_Dipl_2C_um1481_042.JPG $$
Goettingen_App_Dipl_2C_um1481_043.JPG $$
Goettingen_App_Dipl_2C_um1481_044.JPG $$
Goettingen_App_Dipl_2C_um1481_045.JPG $$
Goettingen_App_Dipl_2C_um1481_046.JPG $$
Goettingen_App_Dipl_2C_um1481_047.JPG $$
Goettingen_App_Dipl_2C_um1481_048.JPG $$
Goettingen_App_Dipl_2C_um1481_049.JPG $$
Goettingen_App_Dipl_2C_um1481_050.JPG $$
Goettingen_App_Dipl_2C_um1481_051.JPG $$
Goettingen_App_Dipl_2C_um1481_052.JPG $$
Goettingen_App_Dipl_2C_um1481_053.JPG $$
Goettingen_App_Dipl_2C_um1481_054.JPG $$
Goettingen_App_Dipl_2C_um1481_055.JPG $$
Goettingen_App_Dipl_2C_um1481_056.JPG $$
Goettingen_App_Dipl_2C_um1481_057.JPG $$
Goettingen_App_Dipl_2C_um1481_058.JPG $$
Goettingen_App_Dipl_2C_um1481_059.JPG $$
Goettingen_App_Dipl_2C_um1481_060.JPG $$
Goettingen_App_Dipl_2C_um1481_061.JPG $$
Goettingen_App_Dipl_2C_um1481_062.JPG $$
Goettingen_App_Dipl_2C_um1481_063.JPG $$
Goettingen_App_Dipl_2C_um1481_064.JPG $$
Goettingen_App_Dipl_2C_um1481_065.JPG $$
Goettingen_App_Dipl_2C_um1481_066.JPG $$
Goettingen_App_Dipl_2C_um1481_067.JPG $$
Goettingen_App_Dipl_2C_um1481_068.JPG $$
Goettingen_App_Dipl_2C_um1481_069.JPG $$
Goettingen_App_Dipl_2C_um1481_070.JPG $$
Goettingen_App_Dipl_2C_um1481_071.JPG $$
Goettingen_App_Dipl_2C_um1481_072.JPG $$
Goettingen_App_Dipl_2C_um1481_073.JPG $$
Goettingen_App_Dipl_2C_um1481_074.JPG $$
Goettingen_App_Dipl_2C_um1481_075.JPG $$
Goettingen_App_Dipl_2C_um1481_076.JPG $$
Goettingen_App_Dipl_2C_um1481_077.JPG $$
Goettingen_App_Dipl_2C_um1481_078.JPG $$
Goettingen_App_Dipl_2C_um1481_079.JPG $$
Goettingen_App_Dipl_2C_um1481_080.JPG $$
Goettingen_App_Dipl_2C_um1481_081.JPG $$
Goettingen_App_Dipl_2C_um1481_082.JPG $$
Goettingen_App_Dipl_2C_um1481_083.JPG $$
Goettingen_App_Dipl_2C_um1481_084.JPG $$
Goettingen_App_Dipl_2C_um1481_085.JPG $$
Goettingen_App_Dipl_2C_um1481_086.JPG $$
Goettingen_App_Dipl_2C_um1481_087.JPG $$
Goettingen_App_Dipl_2C_um1481_088.JPG $$
Goettingen_App_Dipl_2C_um1481_089.JPG $$
Goettingen_App_Dipl_2C_um1481_090.JPG $$
Goettingen_App_Dipl_2C_um1481_091.JPG $$
Goettingen_App_Dipl_2C_um1481_092.JPG $$
Goettingen_App_Dipl_2C_um1481_093.JPG $$
Goettingen_App_Dipl_2C_um1481_094.JPG $$
Goettingen_App_Dipl_2C_um1481_095.JPG $$
Goettingen_App_Dipl_2C_um1481_096.JPG $$
Goettingen_App_Dipl_2C_um1481_097.JPG $$
Goettingen_App_Dipl_2C_um1481_098.JPG $$
Goettingen_App_Dipl_2C_um1481_099.JPG $$
Goettingen_App_Dipl_2C_um1481_100.JPG $$
Goettingen_App_Dipl_2C_um1481_101.JPG $$
Goettingen_App_Dipl_2C_um1481_102.JPG $$
Goettingen_App_Dipl_2C_um1481_103.JPG $$
Goettingen_App_Dipl_2C_um1481_104.JPG $$
Goettingen_App_Dipl_2C_um1481_105.JPG $$
Goettingen_App_Dipl_2C_um1481_106.JPG $$
Goettingen_App_Dipl_2C_um1481_107.JPG $$
Goettingen_App_Dipl_2C_um1481_108.JPG $$
Goettingen_App_Dipl_2C_um1481_109.JPG $$
Goettingen_App_Dipl_2C_um1481_110.JPG $$
Goettingen_App_Dipl_2C_um1481_111.JPG $$
Goettingen_App_Dipl_2C_um1481_112.JPG $$
Goettingen_App_Dipl_2C_um1481_113.JPG $$
Goettingen_App_Dipl_2C_um1481_114.JPG $$
Goettingen_App_Dipl_2C_um1481_115.JPG $$
Goettingen_App_Dipl_2C_um1481_116.JPG $$
Goettingen_App_Dipl_2C_um1481_117.JPG $$
Goettingen_App_Dipl_2C_um1481_118.JPG $$
Goettingen_App_Dipl_2C_um1481_119.JPG $$
Goettingen_App_Dipl_2C_um1481_120.JPG $$
Goettingen_App_Dipl_2C_um1481_121.JPG $$
Goettingen_App_Dipl_2C_um1481_122.JPG $$
Goettingen_App_Dipl_2C_um1481_123.JPG $$
Goettingen_App_Dipl_2C_um1481_124.JPG $$
Goettingen_App_Dipl_2C_um1481_125.JPG $$
Goettingen_App_Dipl_2C_um1481_126.JPG $$
Goettingen_App_Dipl_2C_um1481_127.JPG $$
Goettingen_App_Dipl_2C_um1481_128.JPG $$
Goettingen_App_Dipl_2C_um1481_129.JPG $$
Goettingen_App_Dipl_2C_um1481_130.JPG $$
Goettingen_App_Dipl_2C_um1481_131.JPG $$
Goettingen_App_Dipl_2C_um1481_132.JPG $$
Goettingen_App_Dipl_2C_um1481_133.JPG $$
Goettingen_App_Dipl_2C_um1481_134.JPG $$
Goettingen_App_Dipl_2C_um1481_135.JPG $$
Goettingen_App_Dipl_2C_um1481_136.JPG $$
Goettingen_App_Dipl_2C_um1481_137.JPG $$
Goettingen_App_Dipl_2C_um1481_138.JPG $$
Goettingen_App_Dipl_2C_um1481_139.JPG $$
Goettingen_App_Dipl_2C_um1481_140.JPG $$
Goettingen_App_Dipl_2C_um1481_141.JPG $$
Goettingen_App_Dipl_2C_um1481_142.JPG $$
Goettingen_App_Dipl_2C_um1481_143.JPG $$
Goettingen_App_Dipl_2C_um1481_144.JPG $$
Goettingen_App_Dipl_2C_um1481_145.JPG $$
Goettingen_App_Dipl_2C_um1481_146.JPG $$
Goettingen_App_Dipl_2C_um1481_147.JPG $$
Goettingen_App_Dipl_2C_um1481_148.JPG $$
Goettingen_App_Dipl_2C_um1481_149.JPG $$
Goettingen_App_Dipl_2C_um1481_150.JPG $$
Goettingen_App_Dipl_2C_um1481_151.JPG $$
Goettingen_App_Dipl_2C_um1481_152.JPG $$
Goettingen_App_Dipl_2C_um1481_153.JPG $$
Goettingen_App_Dipl_2C_um1481_154.JPG $$
Goettingen_App_Dipl_2C_um1481_155.JPG $$
Goettingen_App_Dipl_2C_um1481_156.JPG $$
Goettingen_App_Dipl_2C_um1481_157.JPG $$
Goettingen_App_Dipl_2C_um1481_158.JPG $$
Goettingen_App_Dipl_2C_um1481_159.JPG $$
Goettingen_App_Dipl_2C_um1481_160.JPG $$
Goettingen_App_Dipl_2C_um1481_161.JPG $$
Goettingen_App_Dipl_2C_um1481_162.JPG $$
Goettingen_App_Dipl_2C_um1481_163.JPG $$
Goettingen_App_Dipl_2C_um1481_164.JPG $$
Goettingen_App_Dipl_2C_um1481_165.JPG $$
Goettingen_App_Dipl_2C_um1481_166.JPG $$
Goettingen_App_Dipl_2C_um1481_167.JPG $$
Goettingen_App_Dipl_2C_um1481_168.JPG $$
Goettingen_App_Dipl_2C_um1481_169.JPG $$
Goettingen_App_Dipl_2C_um1481_170.JPG $$
Goettingen_App_Dipl_2C_um1481_171.JPG $$
Goettingen_App_Dipl_2C_um1481_172.JPG $$
Goettingen_App_Dipl_2C_um1481_173.JPG $$
Goettingen_App_Dipl_2C_um1481_174.JPG $$
Goettingen_App_Dipl_2C_um1481_175.JPG $$
Goettingen_App_Dipl_2C_um1481_176.JPG $$
Goettingen_App_Dipl_2C_um1481_177.JPG $$
Goettingen_App_Dipl_2C_um1481_178.JPG $$
Goettingen_App_Dipl_2C_um1481_179.JPG $$
Goettingen_App_Dipl_2C_um1481_180.JPG $$
Goettingen_App_Dipl_2C_um1481_181.JPG $$
Goettingen_App_Dipl_2C_um1481_182.JPG $$
Goettingen_App_Dipl_2C_um1481_183.JPG $$
Goettingen_App_Dipl_2C_um1481_184.JPG $$
Goettingen_App_Dipl_2C_um1481_185.JPG $$
Goettingen_App_Dipl_2C_um1481_186.JPG $$
Goettingen_App_Dipl_2C_um1481_187.JPG $$
Goettingen_App_Dipl_2C_um1481_188.JPG $$
Goettingen_App_Dipl_2C_um1481_189.JPG $$
Goettingen_App_Dipl_2C_um1481_190.JPG $$
Goettingen_App_Dipl_2C_um1481_191.JPG $$
Goettingen_App_Dipl_2C_um1481_192.JPG $$
Goettingen_App_Dipl_2C_um1481_193.JPG $$
Goettingen_App_Dipl_2C_um1481_194.JPG $$
Goettingen_App_Dipl_2C_um1481_195.JPG $$
Goettingen_App_Dipl_2C_um1481_196.JPG

introduce a <head> - element to structure cei:diplomaticAnalysis?

Wish list Winnefeld:

  • "Mehrere Kommentare: Bei Eingabe mehrerer Kommentare sind diese nicht deutlich genug von einander abgegrenzt ist vielleicht sogar eine individuelle Benennung von Kommentarfeldern, oder die Vergabe von Attributen möglich? Z.B. "Zur Datierung" o. Ä."
    Or shall we allow multiple cei:diplomaticAnalysis?

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.