From 9030ca867150f9f64d980cc64d950991bc498e43 Mon Sep 17 00:00:00 2001
From: "Daniel A. Werning" <33833393+dwerning@users.noreply.github.com>
Date: Mon, 12 Aug 2024 19:07:55 +0200
Subject: [PATCH] v2.1.5
---
.gitignore | 3 +
src/main/java/tla/web/model/Annotation.java | 9 +
src/main/java/tla/web/model/Comment.java | 9 +
src/main/java/tla/web/model/CorpusObject.java | 18 +-
src/main/java/tla/web/model/Sentence.java | 5 +
src/main/java/tla/web/model/Text.java | 12 +-
src/main/java/tla/web/model/ThsEntry.java | 3 -
.../java/tla/web/model/mappings/Util.java | 14 +-
.../java/tla/web/model/meta/BTSObject.java | 10 +-
.../tla/web/model/meta/ObjectDetails.java | 104 +-
.../java/tla/web/model/meta/TLAObject.java | 6 +
.../model/parts/extra/AttestedTimespan.java | 28 -
.../tla/web/model/ui/AttestationTimeline.java | 229 -
src/main/java/tla/web/mvc/IdController.java | 63 +
.../java/tla/web/mvc/ObjectController.java | 4 +-
.../java/tla/web/mvc/SearchController.java | 2 +-
src/main/java/tla/web/repo/TlaClient.java | 15 +
.../java/tla/web/service/ObjectService.java | 391 +-
src/main/resources/application.yml | 2 +
.../resources/i18n/messages_de.properties | 25 +-
.../resources/i18n/messages_en.properties | 27 +-
.../resources/pages/de/help/search-page.html | 2 +-
src/main/resources/pages/de/home.html | 2 +-
.../pages/de/info/tla-development.html | 44 +-
.../pages/de/lemmata-static/10030.html | 998 --
.../pages/de/lemmata-static/10050.html | 999 --
.../pages/de/lemmata-static/10110.html | 1085 --
.../pages/de/lemmata-static/28550.html | 9428 -----------------
.../pages/de/lemmata-static/400007.html | 1110 --
.../pages/de/lemmata-static/400055.html | 1119 --
.../pages/de/lemmata-static/79800.html | 1655 ---
.../pages/de/lemmata-static/81660.html | 1444 ---
.../pages/de/lemmata-static/850814.html | 943 --
.../pages/de/lemmata-static/d1839.html | 957 --
.../pages/de/lemmata-static/d2193.html | 962 --
.../resources/pages/en/help/search-page.html | 2 +-
src/main/resources/pages/en/home.html | 2 +-
.../pages/en/info/tla-development.html | 42 +-
.../pages/en/lemmata-static/10030.html | 999 --
.../pages/en/lemmata-static/10050.html | 999 --
.../pages/en/lemmata-static/10110.html | 1086 --
.../pages/en/lemmata-static/28550.html | 9425 ----------------
.../pages/en/lemmata-static/400007.html | 1110 --
.../pages/en/lemmata-static/400055.html | 1119 --
.../pages/en/lemmata-static/79800.html | 1655 ---
.../pages/en/lemmata-static/81660.html | 1444 ---
.../pages/en/lemmata-static/850814.html | 943 --
.../pages/en/lemmata-static/d1839.html | 957 --
.../pages/en/lemmata-static/d2193.html | 962 --
src/main/resources/static/css/tla-styles.css | 1509 ++-
src/main/resources/templates/error/404.html | 24 +-
.../resources/templates/fragments/common.html | 15 +-
.../templates/fragments/details.html | 72 +-
.../templates/fragments/search/forms.html | 95 +-
.../templates/fragments/search/results.html | 79 +-
.../templates/fragments/widgets/timeline.html | 39 -
.../resources/templates/lemma/details.html | 28 +-
.../resources/templates/object/details.html | 5 +-
src/main/resources/templates/search.html | 27 +-
.../resources/templates/sentence/details.html | 11 +-
.../resources/templates/text/details.html | 17 +-
.../templates/text/sentences/search.html | 4 +-
src/main/resources/templates/ths/details.html | 2 +-
.../resources/templates/token/details.html | 5 +-
64 files changed, 2182 insertions(+), 42222 deletions(-)
delete mode 100644 src/main/java/tla/web/model/parts/extra/AttestedTimespan.java
delete mode 100644 src/main/java/tla/web/model/ui/AttestationTimeline.java
create mode 100644 src/main/java/tla/web/mvc/IdController.java
delete mode 100644 src/main/resources/pages/de/lemmata-static/10030.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/10050.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/10110.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/28550.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/400007.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/400055.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/79800.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/81660.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/850814.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/d1839.html
delete mode 100644 src/main/resources/pages/de/lemmata-static/d2193.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/10030.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/10050.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/10110.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/28550.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/400007.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/400055.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/79800.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/81660.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/850814.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/d1839.html
delete mode 100644 src/main/resources/pages/en/lemmata-static/d2193.html
delete mode 100644 src/main/resources/templates/fragments/widgets/timeline.html
diff --git a/.gitignore b/.gitignore
index bfc54910..391871f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,9 @@ src/main/java/tla/error
src/main/resources/static/vendor/
src/main/resources/static/font/
+# ignore TLA css
+src/main/resources/static/css/tla-styles.css
+
# ignore new JSesh Glyphs
src/main/resources/static/jsesh
diff --git a/src/main/java/tla/web/model/Annotation.java b/src/main/java/tla/web/model/Annotation.java
index 97621460..91682111 100644
--- a/src/main/java/tla/web/model/Annotation.java
+++ b/src/main/java/tla/web/model/Annotation.java
@@ -15,6 +15,7 @@
import tla.domain.model.meta.TLADTO;
import tla.web.model.mappings.Util;
import tla.web.model.meta.BTSObject;
+import tla.web.model.meta.TLAObject;
@Getter
@Setter
@@ -74,5 +75,13 @@ private Collection extractBody() {
}
return Collections.emptyList();
}
+
+ @Override
+ public int compareObjects(T b) {
+ if(this.getId() != null && b.getId() != null) {
+ return this.getId().compareTo(b.getId());
+ }
+ return 0;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/tla/web/model/Comment.java b/src/main/java/tla/web/model/Comment.java
index 0b228367..e61da996 100644
--- a/src/main/java/tla/web/model/Comment.java
+++ b/src/main/java/tla/web/model/Comment.java
@@ -15,6 +15,7 @@
import tla.domain.model.meta.TLADTO;
import tla.web.model.mappings.Util;
import tla.web.model.meta.BTSObject;
+import tla.web.model.meta.TLAObject;
@Getter
@Setter
@@ -38,5 +39,13 @@ public String getBody() {
//return this.body;
return Util.escapeMarkup(this.body);
}
+
+ @Override
+ public int compareObjects(T b) {
+ if(this.getId() != null && b.getId() != null) {
+ return this.getId().compareTo(b.getId());
+ }
+ return 0;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/tla/web/model/CorpusObject.java b/src/main/java/tla/web/model/CorpusObject.java
index 4b0ac0ac..e70cb053 100644
--- a/src/main/java/tla/web/model/CorpusObject.java
+++ b/src/main/java/tla/web/model/CorpusObject.java
@@ -524,20 +524,31 @@ public List getContextComment() {
return this.contextComment;
}
- // Object type
+ // Object Description_Of_Object type
public static final String PASSPORT_PROP_OBJ_TYPE = "object.description_of_object.type";
-
@Setter(AccessLevel.NONE)
private ObjectReference objType;
-
public ObjectReference getObjType() {
if (this.objType == null) {
this.objType = extractThsEntry(this.getPassport(), PASSPORT_PROP_OBJ_TYPE);
}
return this.objType;
}
+
+ // Object Description_Of_Object description
+ public static final String PASSPORT_PROP_OBJ_DESCRIPTION = "object.description_of_object.description";
+ //Maybe new Datatype description_of_object
+ @Setter(AccessLevel.NONE)
+ private List objectDescription;
+ public List getObjectDescription(){
+ if(this.objectDescription == null) {
+ this.objectDescription = extractMultilineText(this.getPassport(), PASSPORT_PROP_OBJ_DESCRIPTION);
+ }
+ return this.objectDescription;
+ }
+
// Object component
public static final String PASSPORT_PROP_OBJ_COMPONENT = "object.description_of_object.component";
@@ -614,4 +625,5 @@ private static List extractDimensions(CorpusObject corpusobj) {
return dimensions;
}
+
}
\ No newline at end of file
diff --git a/src/main/java/tla/web/model/Sentence.java b/src/main/java/tla/web/model/Sentence.java
index ccd4dff2..6b7b58a0 100644
--- a/src/main/java/tla/web/model/Sentence.java
+++ b/src/main/java/tla/web/model/Sentence.java
@@ -50,6 +50,11 @@ public class Sentence extends TLAObject implements Hierarchic {
@Singular
private SortedMap> translations;
+
+ @Override
+ public int compareObjects(T b) {
+ return 0;
+ }
/**
* Determine whether any of a sentence's tokens have any hieroglyph encodings.
diff --git a/src/main/java/tla/web/model/Text.java b/src/main/java/tla/web/model/Text.java
index 9b96497f..2e4023f1 100644
--- a/src/main/java/tla/web/model/Text.java
+++ b/src/main/java/tla/web/model/Text.java
@@ -47,7 +47,8 @@ public class Text extends CorpusObject {
public static final String PASSPORT_PROP_HIEROGLYPHIC_ENCODING = "definition.main_group.hieroglyphic_encoding";
public static final String PASSPORT_PROP_HIEROGLYPHS_SEQUENTIAL = "definition.main_group.hieroglyphs_sequential";
public static final String PASSPORT_PROP_TRANSLATIONS = "definition.main_group.translations";
-
+ public static final String PASSPORT_PROP_LINE_COUNT = "definition.main_group.line_count";
+
//TODO prüfen ob doppelt, da bereits in CorpusObject.java
public static final String PASSPORT_PROP_ORIGPLACE ="find_spot.find_spot.place.place";
public static final String PASSPORT_PROP_ISORIG ="find_spot.find_spot.place.is_origin";
@@ -93,6 +94,8 @@ public class Text extends CorpusObject {
private String hieroglyphs_sequential;
@Setter(AccessLevel.NONE)
private List translations;
+ @Setter(AccessLevel.NONE)
+ private List lineCountInfo;
public static class TranslationGroup {
private String language;
@@ -256,6 +259,13 @@ public List getTranslations() {
return this.translations;
}
+ public List getLineCountInfo() {
+ if(this.lineCountInfo== null) {
+ this.lineCountInfo = extractMultilineText(this.getPassport(), PASSPORT_PROP_LINE_COUNT);
+ }
+ return this.lineCountInfo;
+ }
+
//TODO generic
diff --git a/src/main/java/tla/web/model/ThsEntry.java b/src/main/java/tla/web/model/ThsEntry.java
index 6e362c7c..58c97f4b 100644
--- a/src/main/java/tla/web/model/ThsEntry.java
+++ b/src/main/java/tla/web/model/ThsEntry.java
@@ -32,9 +32,6 @@
@TLADTO(ThsEntryDto.class)
public class ThsEntry extends BTSObject implements Hierarchic {
- @Singular
- private SortedMap> translations;
-
private List paths;
//
diff --git a/src/main/java/tla/web/model/mappings/Util.java b/src/main/java/tla/web/model/mappings/Util.java
index d5a398cc..58a16328 100644
--- a/src/main/java/tla/web/model/mappings/Util.java
+++ b/src/main/java/tla/web/model/mappings/Util.java
@@ -28,11 +28,18 @@ public class Util {
public static final String TRANSLITERATION_FONT_MARKUP_REGEX = "\\$([^$]*?)\\$";
public static final String GREEK_FONT_MARKUP_VITTMANN_REGEX = "#g\\+([^#]*?)#g\\-";
- public static final String GREEK_FONT_MARKUP_REGEX = "([<]*?)";
- public static final String HIERO_FONT_MARKUP_REGEX = "([<]*?)";
+ public static final String GREEK_FONT_MARKUP_REGEX = "([^<]*?)";
+ public static final String HIERO_FONT_MARKUP_REGEX = "([^<]*?)";
+ public static final String TLA_ID_REF_REGEX = "<(sentence|lemma|text|object|thesaurus|token)(ID|Id|id)>\\s*([^<\\s]*?)\\s*(sentence|lemma|text|object|thesaurus|token)(ID|Id|id)>";
+ public static final String URL_PATTERN_REGEX = "(?";
public static final String MULTILING_FONT_MARKUP_REPLACEMENT = "$1";
public static final String HIERO_FONT_MARKUP_REPLACEMENT = "$1";
+ public static final String URL_PATTERN_REGEX_REPLACEMENT = "$1";
+ public static final String TLA_ID_REF_REGEX_REPLACEMENT = "$3";
public static final String XML_HEAD = "";
public static final String SVG_ATTR_REGEX = "width=.([0-9.]+). height=.([0-9.]+).";
@@ -152,6 +159,9 @@ public static String escapeMarkup(String text) {
text = text.replaceAll(GREEK_FONT_MARKUP_REGEX, MULTILING_FONT_MARKUP_REPLACEMENT);
text = text.replaceAll(HIERO_FONT_MARKUP_REGEX, HIERO_FONT_MARKUP_REPLACEMENT);
text = text.replaceAll(TRANSLITERATION_FONT_MARKUP_REGEX, MULTILING_FONT_MARKUP_REPLACEMENT);
+ text = text.replaceAll(URL_WITH_BRACKETS_REGEX, "<$1>"); // replace < and > around URLs
+ text = text.replaceAll(URL_PATTERN_REGEX, URL_PATTERN_REGEX_REPLACEMENT); // add href to URL
+ text = text.replaceAll(TLA_ID_REF_REGEX, TLA_ID_REF_REGEX_REPLACEMENT);
// line breaks to HTML
text = text.replaceAll("\\r?\\n", " ");
diff --git a/src/main/java/tla/web/model/meta/BTSObject.java b/src/main/java/tla/web/model/meta/BTSObject.java
index 809ccc12..01954d25 100644
--- a/src/main/java/tla/web/model/meta/BTSObject.java
+++ b/src/main/java/tla/web/model/meta/BTSObject.java
@@ -29,14 +29,20 @@ public class BTSObject extends TLAObject { // earlier: abstract
private String subtype;
- private String name;
-
private TreeMap> externalReferences;
public static final String PASSPORT_PROP_METADATA_EDITING = "definition.main_group.metadata_editing";
@Setter(AccessLevel.NONE)
private List metadata_editing;
+
+ @Override
+ public int compareObjects(T b) {
+ if(this.getName() != null && b.getName() != null) {
+ return this.getName().compareTo(b.getName());
+ }
+ return 0;
+ }
public List getMetadata_editing() {
if (this.metadata_editing == null) {
diff --git a/src/main/java/tla/web/model/meta/ObjectDetails.java b/src/main/java/tla/web/model/meta/ObjectDetails.java
index a59a6bf1..6b21e651 100644
--- a/src/main/java/tla/web/model/meta/ObjectDetails.java
+++ b/src/main/java/tla/web/model/meta/ObjectDetails.java
@@ -2,61 +2,69 @@
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.stream.Collectors;
+import java.util.Comparator;
+import java.util.HashMap;
import lombok.Getter;
import tla.domain.dto.extern.SingleDocumentWrapper;
import tla.domain.dto.meta.AbstractDto;
+import tla.web.model.Lemma;
import tla.web.model.mappings.MappingConfig;
@Getter
public class ObjectDetails extends ObjectsContainer {
- private T object;
-
- public ObjectDetails(T object) {
- this.object = object;
- }
-
- @SuppressWarnings("unchecked")
- public ObjectDetails(SingleDocumentWrapper> dto) {
- super(dto);
- this.object = (T) MappingConfig.convertDTO(
- dto.getDoc()
- );
- }
-
- public ObjectDetails(T object, Map> related) {
- super(related);
- this.object = object;
- }
-
- /**
- * Map payload and related objects from DTO to domain model types.
- */
- public static ObjectDetails extends TLAObject> from(SingleDocumentWrapper extends AbstractDto> wrapper) {
- var container = new ObjectDetails<>(wrapper);
- return container;
- }
-
- /**
- * Projects objects in a single object details container's related
- * map to the wrapped object's relations (which are {@link TLAObject} stubs
- * in objects freshly converted from DTO).
- */
- public Map> extractRelatedObjects() {
- return this.getObject().getRelations().entrySet().stream().collect(
- Collectors.toMap(
- entry -> entry.getKey(),
- entry -> entry.getValue().stream().map(
- reference -> this.expandRelatedObject(reference)
- ).filter(
- o -> o != null
- ).collect(
- Collectors.toList()
- )
- )
- );
- }
-
-}
\ No newline at end of file
+ private T object;
+
+ public ObjectDetails(T object) {
+ this.object = object;
+ }
+
+ @SuppressWarnings("unchecked")
+ public ObjectDetails(SingleDocumentWrapper> dto) {
+ super(dto);
+ this.object = (T) MappingConfig.convertDTO(dto.getDoc());
+ }
+
+ public ObjectDetails(T object, Map> related) {
+ super(related);
+ this.object = object;
+ }
+
+ /**
+ * Map payload and related objects from DTO to domain model types.
+ */
+ public static ObjectDetails extends TLAObject> from(SingleDocumentWrapper extends AbstractDto> wrapper) {
+ var container = new ObjectDetails<>(wrapper);
+ return container;
+ }
+
+ /**
+ * Projects objects in a single object details container's related
+ * map to the wrapped object's relations (which are
+ * {@link TLAObject} stubs in objects freshly converted from DTO).
+ */
+
+ public Map> extractRelatedObjects() {
+ Map> extractedRelations = new HashMap>();
+
+ extractedRelations = this.getObject().getRelations().entrySet().stream()
+ .collect(Collectors.toMap(entry -> entry.getKey(),
+ entry -> entry.getValue().stream().map(reference -> this.expandRelatedObject(reference))
+ .filter(o -> o != null).collect(Collectors.toList())));
+ for (String key : extractedRelations.keySet()) {
+ List value = extractedRelations.get(key);
+ value.sort(new NameComparator());
+ }
+ return extractedRelations;
+ }
+
+ class NameComparator implements Comparator {
+ @Override
+ public int compare(TLAObject a, TLAObject b) {
+ return a.compareObjects(b);
+ }
+ }
+}
diff --git a/src/main/java/tla/web/model/meta/TLAObject.java b/src/main/java/tla/web/model/meta/TLAObject.java
index 59315bd6..87369354 100644
--- a/src/main/java/tla/web/model/meta/TLAObject.java
+++ b/src/main/java/tla/web/model/meta/TLAObject.java
@@ -21,8 +21,14 @@ public abstract class TLAObject extends AbstractBTSBaseClass implements Relatabl
private String id;
private String type;
+
+ private String name;
private TreeMap> relations;
+
+ public int compareObjects(T b) {
+ return 0;
+ }
/**
* Creates an {@link ObjectReference} instance identifying this object.
diff --git a/src/main/java/tla/web/model/parts/extra/AttestedTimespan.java b/src/main/java/tla/web/model/parts/extra/AttestedTimespan.java
deleted file mode 100644
index 07d7fddb..00000000
--- a/src/main/java/tla/web/model/parts/extra/AttestedTimespan.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package tla.web.model.parts.extra;
-
-public class AttestedTimespan extends tla.domain.model.extern.AttestedTimespan {
-
- public static AttestedTimespan of(tla.domain.model.extern.AttestedTimespan dto) {
- AttestedTimespan o = new AttestedTimespan();
- o.setAttestations(dto.getAttestations());
- o.setPeriod(dto.getPeriod());
- o.setContains(dto.getContains());
- return o;
- }
-
- /**
- * compute sum of attestation counts of this attested timespan and all its descendants.
- */
- public AttestationStats getTotal() {
- AttestationStats stats = this.getContains().stream().collect(
- AttestationStats::new,
- (result, timespan) -> result.add(
- AttestedTimespan.of(timespan).getTotal()
- ),
- AttestationStats::add
- );
-
- return stats.add(this.getAttestations());
- }
-
-}
diff --git a/src/main/java/tla/web/model/ui/AttestationTimeline.java b/src/main/java/tla/web/model/ui/AttestationTimeline.java
deleted file mode 100644
index 9f22245c..00000000
--- a/src/main/java/tla/web/model/ui/AttestationTimeline.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package tla.web.model.ui;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import lombok.Getter;
-import tla.web.model.parts.extra.AttestedTimespan;
-
-@Getter
-public class AttestationTimeline {
-
- public static class QuartileFinder {
- private long counter = 0;
- private LinkedList targets = new LinkedList<>();
- @Getter
- private List quartiles = new ArrayList<>();
- private Integer quartile = null;
-
- public QuartileFinder(List attestations) {
- var total = computeTotal(attestations);
- List.of(.25, .5, .75).stream().forEach(
- ratio -> this.targets.add(ratio * total)
- );
- var attestedTimespans = new ArrayList();
- attestedTimespans.addAll(attestations);
- Collections.sort(
- attestedTimespans, Comparator.comparing(AttestedTimespan::getPeriod)
- );
- attestedTimespans.forEach(this::count);
- }
-
- public static List find(List attestations) {
- return new QuartileFinder(attestations).getQuartiles();
- }
-
- private void count(tla.domain.model.extern.AttestedTimespan attestedTimespan) {
- var children = new ArrayList();
- children.addAll(attestedTimespan.getContains());
- Collections.sort(
- children,
- Comparator.comparing(tla.domain.model.extern.AttestedTimespan::getPeriod)
- );
- children.forEach(this::count);
- var end = attestedTimespan.getPeriod().getEnd();
- var count = attestedTimespan.getAttestations().getCount();
- this.counter += count;
- this.quartile = end;
- while (!this.targets.isEmpty() && this.counter >= this.targets.getFirst()) {
- this.quartiles.add(this.quartile);
- this.targets.removeFirst();
- if (this.targets.isEmpty()) {
- return;
- }
- }
- }
- }
-
- public final static int FROM = -3500;
- public final static int TO = 600;
- /**
- * where the tics are to be drawn on the x-axis
- */
- public final static List XTICS = List.of(100, 500, 1000, 2000);
-
- private List rectangles;
- private long totalCount;
-
- private tla.domain.model.extern.AttestedTimespan.Period totalTimespan;
-
- /**
- * x-axis tics
- */
- private List tics;
- private List quartiles;
-
- public AttestationTimeline(List attestations) {
- this.totalCount = computeTotal(attestations);
- this.totalTimespan = tla.domain.model.extern.AttestedTimespan.Period.builder().begin(
- attestations.stream().mapToInt(
- attestation -> attestation.getPeriod().getBegin()
- ).min().orElse(0)
- ).end(
- attestations.stream().mapToInt(
- attestation -> attestation.getPeriod().getEnd()
- ).max().orElse(0)
- ).build();
- this.rectangles = attestations.stream().flatMap(
- attestation -> this.renderAttestedTimespan(attestation)
- ).collect(Collectors.toList());
- Collections.sort(this.rectangles);
- this.tics = this.createXTics();
- this.quartiles = this.createMarks(attestations);
- }
-
- public static long computeTotal(List attestations) {
- long sum1=0;
- for(int i=0;i attestation.getTotal().getCount()
- ).sum();
- }
-
- private int getHighestTicInterval(int year) {
- for (int i=XTICS.size()-1; i>=1; i--) {
- if (year % XTICS.get(i) == 0) {
- return i;
- }
- }
- return 0;
- }
-
- protected List createXTics() {
- List tics = new LinkedList<>();
- var s = XTICS.get(0);
- var start = FROM / s * s + 2 * s;
- var end = TO / s * s - 2 * s;
- for (int year=start; year <= end; year += XTICS.get(0)) {
- int i = getHighestTicInterval(year);
- tics.add(new Tic(year, i));
- }
- return tics;
- }
-
- protected List createMarks(List attestations) {
- if (this.totalCount > 0) {
- return QuartileFinder.find(attestations).stream().map(
- quartile -> Tic.of(quartile, 6)
- ).collect(
- Collectors.toList()
- );
- }
- return null;
- }
-
- public static AttestationTimeline from(List attestations) {
- return new AttestationTimeline(attestations);
- }
-
- protected Stream renderAttestedTimespan(tla.domain.model.extern.AttestedTimespan attestation) {
- return Stream.concat(
- List.of(
- new Rect(attestation, 0, a -> a.getAttestations().getCount()),
- new Rect(attestation, 30, a -> AttestedTimespan.of(a).getTotal().getCount())
- ).stream(),
- attestation.getContains().stream().flatMap(
- child -> renderAttestedTimespan(child)
- )
- );
- }
-
- /**
- * project given year onto timeline, which is defined by {@link FROM} and {@link TO},
- * and return the result as a percentage indicating where to place that year from left
- * to right.
- */
- protected static double projectDate(int year) {
- return 100f * (year - FROM) / (TO - FROM);
- }
-
- @Getter
- public class Rect implements Comparable {
-
- private double x;
- private double y;
- private double w;
- private double h;
- private double alpha;
- private long count;
- private tla.domain.model.extern.AttestedTimespan.Period period;
-
- public Rect(
- tla.domain.model.extern.AttestedTimespan attestation, double y,
- Function countFunc
- ) {
- this.period = attestation.getPeriod();
- var left = projectDate(attestation.getPeriod().getBegin());
- var right = projectDate(attestation.getPeriod().getEnd());
- this.alpha = .2f + .8f * countFunc.apply(attestation) / getTotalCount();
- this.count = attestation.getAttestations().getCount();
- this.x = left;
- this.w = right - left;
- this.y = y;
- this.h = 30f;
- }
-
- @Override
- public int compareTo(Rect o) {
- return Integer.compare((int) this.x, (int) o.x);
- }
- }
-
- @Getter
- public static class Tic {
- private double x;
- /** tic length */
- private double l;
- /** tic stroke width */
- private double w;
- private int level;
- private String label;
-
- public Tic(int year, int level) {
- this.level = level;
- this.x = projectDate(year);
- this.l = 6 + (int) Math.pow(1.6, level + 1) * 4;
- this.w = 0.25 + Math.pow(1.9, level) / 8;
- this.label = String.format("%d", year);
- }
-
- static Tic of(Integer year, int level) {
- if (year != null) {
- return new Tic(year, level);
- }
- return null;
- }
-
- }
-}
diff --git a/src/main/java/tla/web/mvc/IdController.java b/src/main/java/tla/web/mvc/IdController.java
new file mode 100644
index 00000000..4d4fd6f3
--- /dev/null
+++ b/src/main/java/tla/web/mvc/IdController.java
@@ -0,0 +1,63 @@
+package tla.web.mvc;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.view.RedirectView;
+
+import lombok.extern.slf4j.Slf4j;
+import tla.web.repo.TlaClient;
+
+@Slf4j
+@Controller
+@RequestMapping("/id")
+public class IdController {
+ /**
+ * Checks if ID exists and redirects to the corresponding page for details
+ */
+ @Autowired
+ protected TlaClient backend;
+
+ @RequestMapping(value = "", method = RequestMethod.GET)
+ public RedirectView getViewForRequestParamId(@RequestParam String id) {
+ return redirectToViewForId(id);
+ }
+
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+ public RedirectView getViewForPathVariable(@PathVariable String id) {
+ return redirectToViewForId(id);
+ }
+
+ public RedirectView redirectToViewForId(String id) {
+ String type = getTypeOfId(id);
+ return new RedirectView(String.format("/%s/%s", getViewPathForType(type), id), true);
+ }
+
+ public String getTypeOfId(String id) {
+ try {
+ return backend.getTypeOfIdFromAllIndices(id);
+ } catch (Exception e) {
+ return "false";
+ }
+ }
+
+ public String getViewPathForType(String type) {
+ Map indices = new HashMap();
+ indices.put("lemma", "lemma");
+ indices.put("text", "text");
+ indices.put("sentence", "sentence");
+ indices.put("token", "sentence/token");
+ indices.put("ths", "thesaurus");
+ indices.put("object", "object");
+ indices.put("false", "error");
+ // Comment and Annotation later to come
+
+ return indices.getOrDefault(type, "error");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/tla/web/mvc/ObjectController.java b/src/main/java/tla/web/mvc/ObjectController.java
index 9e920c16..3e8f9408 100644
--- a/src/main/java/tla/web/mvc/ObjectController.java
+++ b/src/main/java/tla/web/mvc/ObjectController.java
@@ -153,7 +153,7 @@ public String modifySearchUrl() {
return templateUtils.replacePath("search").build().toString();
}
- @ModelAttribute("modifySearchUrl")
+ //@ModelAttribute("modifySearchUrl") // TODO: Button does not work with this; why?
public String modifySearchUrlbyPath(String path) {
return templateUtils.replacePath(path).build().toString();
}
@@ -226,7 +226,7 @@ public RedirectView lookup(@RequestParam String id) {
* can use it.
*/
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
- public String getSingleObjectDetailsPage(@PathVariable String id, Model model) {
+ public String getSingleObjectDetailsPage(@PathVariable String id, Model model) { //TODO Move to Lemma
log.debug("Compile lemma detail view data for {} {}", getTemplatePath(), id);
ObjectDetails container = getService().getDetails(id).orElseThrow(
() -> new ObjectNotFoundException(id, getTemplatePath())
diff --git a/src/main/java/tla/web/mvc/SearchController.java b/src/main/java/tla/web/mvc/SearchController.java
index 03a38f0e..50cf38b2 100644
--- a/src/main/java/tla/web/mvc/SearchController.java
+++ b/src/main/java/tla/web/mvc/SearchController.java
@@ -50,7 +50,7 @@ public class SearchController {
private String defaultForm;
// public static final List SEARCH_FORMS = List.of("lemma-quick", "lemma", "sentence");
- public static final List SEARCH_FORMS = List.of("lemma", "collocation", /*"sentence",*/ "text", /*"object",*/ "lemma-id", "token-id", "sentence-id", "text-id", "object-id", "ths-id");
+ public static final List SEARCH_FORMS = List.of("lemma", "collocation", /*"sentence",*/ "text", /*"object",*/ "id");
@ModelAttribute("allScripts")
public Script[] getAllScripts() {
diff --git a/src/main/java/tla/web/repo/TlaClient.java b/src/main/java/tla/web/repo/TlaClient.java
index 3b7f176b..86fe1bae 100644
--- a/src/main/java/tla/web/repo/TlaClient.java
+++ b/src/main/java/tla/web/repo/TlaClient.java
@@ -120,6 +120,21 @@ public SingleDocumentWrapper retrieveObject(Class extends TLAObje
SingleDocumentWrapper.class
);
}
+
+ /**
+ * checks if single id exists at the backend application.//TODO returns/receives.
+ */
+ @SuppressWarnings("unchecked")
+ public String getTypeOfIdFromAllIndices(String id) {
+ return client.getForObject(
+ String.format(
+ "%s/typeofid/%s",
+ this.backendUrl,
+ id
+ ),
+ String.class
+ );
+ }
/**
* Send search form/command to backend endpoint configured for specified frontend
diff --git a/src/main/java/tla/web/service/ObjectService.java b/src/main/java/tla/web/service/ObjectService.java
index bb183f3b..cc3d1315 100644
--- a/src/main/java/tla/web/service/ObjectService.java
+++ b/src/main/java/tla/web/service/ObjectService.java
@@ -27,219 +27,196 @@
import tla.web.model.meta.TLAObject;
import tla.web.repo.TlaClient;
import tla.error.ObjectNotFoundException;
-
+
/**
* Generic TLA domain model type object operations component.
*
- * Subclasses are expected to specify their resptive domain model types in a {@link ModelClass}
- * annotation, so that it can be registered with automatic DTO model mapping and the
- * TLA backend API client.
+ * Subclasses are expected to specify their resptive domain model types in a
+ * {@link ModelClass} annotation, so that it can be registered with automatic
+ * DTO model mapping and the TLA backend API client.
*/
@Slf4j
public abstract class ObjectService {
- protected final static ObjectDetailsProperties DETAILS_UNCONFIGURED = new ObjectDetailsProperties();
- protected final static LinkedHashMap> EMPTY_MAP = new LinkedHashMap<>();
-
- public static final String BTS_ID_PATTERN = "(dm?)?\\d{1,6}|\\w{26,29}(\\-\\d{2})?";
-
- @Autowired
- protected TlaClient backend;
-
- /**
- * domain model type of the objects which are accessible via this service.
- */
- private Class modelClass;
-
- @Autowired
- private DetailsProperties detailsProperties;
-
- /**
- * search-specific configuration for the domain model type represented by this service.
- * such search properties are being made available to the service layer under these conditions:
- *
- *
specified in application.yml under the search.{type} path
- *
defined in a {@link SearchProperties} subclass with a {@link ModelClass} annotation
- *
- */
- private SearchProperties searchProperties;
-
- ResponseEntity> EMPTY_RESPONSE = ResponseEntity.of(Optional.empty());
-
- @SuppressWarnings("unchecked")
- public ObjectService() {
- for (Annotation a : this.getClass().getAnnotationsByType(ModelClass.class)) {
- Class extends TLAObject> modelClass = ((ModelClass) a).value();
- this.modelClass = (Class) modelClass;
- log.info("register {}", modelClass.getSimpleName());
- MappingConfig.registerModelClass(modelClass);
- TlaClient.registerModelclass(modelClass);
- }
- }
-
- /**
- * Return search properties registered for this service's model class, if there
- * are any.
- */
- public SearchProperties getSearchProperties() {
- if (this.searchProperties == null) {
- this.searchProperties = SearchProperties.getPropertiesFor(
- this.getModelClass()
- );
- }
- return this.searchProperties;
- }
-
- /**
- * Looks up the details view configuration for a service's domain model class.
- *
- * @see DetailsProperties
- */
- public ObjectDetailsProperties getDetailsProperties() {
- return this.detailsProperties.getOrDefault(
- TlaClient.getBackendPathPrefix(
- this.getModelClass()
- ),
- DETAILS_UNCONFIGURED
- );
- }
-
- /**
- * Extract an object's values for the passport properties configured for its domain model type.
- *
- * @see #getDetailsProperties()
- */
- public LinkedHashMap> getDetailsPassportPropertyValues(T object) {
- if (object instanceof BTSObject && ((BTSObject) object).getPassport() != null) {
- LinkedHashMap> passportValues = new LinkedHashMap<>();
- this.getDetailsProperties().getPassportProperties().stream().forEach(
- path -> {
- if (!((BTSObject) object).getPassport().extractProperty(path).isEmpty()) {
- passportValues.put(
- path,
- ((BTSObject) object).getPassport().extractProperty(path)
- );
- }
- }
- );
- return passportValues;
- } else {
- return EMPTY_MAP;
- }
- }
-
- /**
- * Returns the domain model class of which a service is taking care of and which has been
- * specified via a {@link ModelClass} annotation on top of that service.
- */
- public Class getModelClass() {
- return this.modelClass;
- }
-
- /**
- * Returns {@link BTSeClass} value of a service's domain model class or the {@link TLADTO}
- * it is annotated with.
- *
- * @see #getModelClass()
- */
- public String getModelEClass() {
- return MappingConfig.extractEclass(this.getModelClass());
- }
-
- /**
- * Call appropriate autocomplete endpoint for this service's model class.
- */
- public ResponseEntity> autoComplete(String term, String type) {
- if (term.trim().length() > 2) {
- return backend.autoComplete(
- this.getModelClass(), term, type
- );
- } else {
- return EMPTY_RESPONSE;
- }
- }
-
- /**
- * Retrieve document details (document itself plus related objects) from backend.
- *
- * @param id document ID
- * @return DTO wrapped inside a {@link SingleDocumentWrapper} container
- */
- public SingleDocumentWrapper retrieveSingleDocument(String id) {
- if (!id.matches(BTS_ID_PATTERN)) {
- log.warn("Tried to retrieve object by id without valid BTS id pattern: '{}'", id);
- }
- try {
- return backend.retrieveObject(
- this.getModelClass(), id
- );
- } catch (Exception e) {
- //throw new ObjectNotFoundException(id);
- //log.warn("Failed to retrieve object by ID '{}'!", id);
- log.error("Failed to retrieve object by ID '{}'!", id);
- log.error("cause: ", e);
- return null;
- }
- }
-
- /**
- * Retrieve a container with a single domain model class instance.
- * @param id object ID
- * @return model object wrapped inside an {@link ObjectDetails} container
- */
- @SuppressWarnings("unchecked")
- public Optional> getDetails(String id) {
- if (!id.matches(BTS_ID_PATTERN)) {
- log.warn("Tried to retrieve details of object by id without valid BTS id pattern: '{}'.", id);
- //return Optional.empty();
- }
- try {
- ObjectDetails> container = ObjectDetails.from(
- retrieveSingleDocument(id)
- );
- return Optional.of(
- new ObjectDetails(
- (T) container.getObject(),
- container.getRelated()
- )
- );
- } catch (Exception e) {
- //throw new ObjectNotFoundException(id);
- //log.warn("Failed to obtain details for object ID '{}'!", id);
- log.error("Failed to obtain details for object ID '{}'!", id);
- log.error("cause: ", e);
- return Optional.empty();
- }
- }
-
- /**
- * Generate a label for an object (used as caption in object detail pages).
- */
- public abstract String getLabel(T object);
-
- /**
- * Override this to do whatever necessary to search results container before passing it
- * to view controller. Gets called by {@link #search(SearchCommand, Integer)} before
- * returning the results to the view controller.
- */
- protected SearchResults preProcess(SearchResults searchResults) {
- return searchResults;
- }
-
- /**
- * Send search form to backend and convert results from DTO to frontend model objects.
- * Passes the results to {@link #preProcess(SearchResults)} before returning them,
- * the default implementation of which does nothing to them at all, but any enhancements
- * of the search results container right before it returns to the view controller can be
- * done by overriding this method.
- */
- public SearchResults search(SearchCommand> command, Integer page) {
- SearchResultsWrapper> response = backend.searchObjects(
- this.getModelClass(), command, page
- );
- return this.preProcess(
- SearchResults.from(response)
- );
- }
+ protected final static ObjectDetailsProperties DETAILS_UNCONFIGURED = new ObjectDetailsProperties();
+ protected final static LinkedHashMap> EMPTY_MAP = new LinkedHashMap<>();
+
+ public static final String BTS_ID_PATTERN = "(dm?)?\\d{1,6}|\\w{26,29}(\\-\\d{2})?";
+
+ @Autowired
+ protected TlaClient backend;
+
+ /**
+ * domain model type of the objects which are accessible via this service.
+ */
+ private Class modelClass;
+
+ @Autowired
+ private DetailsProperties detailsProperties;
+
+ /**
+ * search-specific configuration for the domain model type represented by this
+ * service. such search properties are being made available to the service layer
+ * under these conditions:
+ *
+ *
specified in application.yml under the
+ * search.{type} path
+ *
defined in a {@link SearchProperties} subclass with a {@link ModelClass}
+ * annotation
+ *
+ */
+ private SearchProperties searchProperties;
+
+ ResponseEntity> EMPTY_RESPONSE = ResponseEntity.of(Optional.empty());
+
+ @SuppressWarnings("unchecked")
+ public ObjectService() {
+ for (Annotation a : this.getClass().getAnnotationsByType(ModelClass.class)) {
+ Class extends TLAObject> modelClass = ((ModelClass) a).value();
+ this.modelClass = (Class) modelClass;
+ log.info("register {}", modelClass.getSimpleName());
+ MappingConfig.registerModelClass(modelClass);
+ TlaClient.registerModelclass(modelClass);
+ }
+ }
+
+ /**
+ * Return search properties registered for this service's model class, if there
+ * are any.
+ */
+ public SearchProperties getSearchProperties() {
+ if (this.searchProperties == null) {
+ this.searchProperties = SearchProperties.getPropertiesFor(this.getModelClass());
+ }
+ return this.searchProperties;
+ }
+
+ /**
+ * Looks up the details view configuration for a service's domain model class.
+ *
+ * @see DetailsProperties
+ */
+ public ObjectDetailsProperties getDetailsProperties() {
+ return this.detailsProperties.getOrDefault(TlaClient.getBackendPathPrefix(this.getModelClass()),
+ DETAILS_UNCONFIGURED);
+ }
+
+ /**
+ * Extract an object's values for the passport properties configured for its
+ * domain model type.
+ *
+ * @see #getDetailsProperties()
+ */
+ public LinkedHashMap> getDetailsPassportPropertyValues(T object) {
+ if (object instanceof BTSObject && ((BTSObject) object).getPassport() != null) {
+ LinkedHashMap> passportValues = new LinkedHashMap<>();
+ this.getDetailsProperties().getPassportProperties().stream().forEach(path -> {
+ if (!((BTSObject) object).getPassport().extractProperty(path).isEmpty()) {
+ passportValues.put(path, ((BTSObject) object).getPassport().extractProperty(path));
+ }
+ });
+ return passportValues;
+ } else {
+ return EMPTY_MAP;
+ }
+ }
+
+ /**
+ * Returns the domain model class of which a service is taking care of and which
+ * has been specified via a {@link ModelClass} annotation on top of that
+ * service.
+ */
+ public Class getModelClass() {
+ return this.modelClass;
+ }
+
+ /**
+ * Returns {@link BTSeClass} value of a service's domain model class or the
+ * {@link TLADTO} it is annotated with.
+ *
+ * @see #getModelClass()
+ */
+ public String getModelEClass() {
+ return MappingConfig.extractEclass(this.getModelClass());
+ }
+
+ /**
+ * Call appropriate autocomplete endpoint for this service's model class.
+ */
+ public ResponseEntity> autoComplete(String term, String type) {
+ if (term.trim().length() > 2) {
+ return backend.autoComplete(this.getModelClass(), term, type);
+ } else {
+ return EMPTY_RESPONSE;
+ }
+ }
+
+ /**
+ * Retrieve document details (document itself plus related objects) from
+ * backend.
+ *
+ * @param id document ID
+ * @return DTO wrapped inside a {@link SingleDocumentWrapper} container
+ */
+ public SingleDocumentWrapper retrieveSingleDocument(String id) {
+ if (!id.matches(BTS_ID_PATTERN)) {
+ log.warn("Tried to retrieve object by id without valid BTS id pattern: '{}'", id);
+ }
+ try {
+ return backend.retrieveObject(this.getModelClass(), id);
+ } catch (Exception e) {
+ log.error("Failed to retrieve object by ID '{}'!", id);
+ log.error("cause: ", e);
+ return null;
+ }
+ }
+
+ /**
+ * Retrieve a container with a single domain model class instance.
+ *
+ * @param id object ID
+ * @return model object wrapped inside an {@link ObjectDetails} container
+ */
+ @SuppressWarnings("unchecked")
+ public Optional> getDetails(String id) {
+ if (!id.matches(BTS_ID_PATTERN)) {
+ log.warn("Tried to retrieve details of object by id without valid BTS id pattern: '{}'.", id);
+ }
+ try {
+ ObjectDetails> container = ObjectDetails.from(retrieveSingleDocument(id));
+ return Optional.of(new ObjectDetails((T) container.getObject(), container.getRelated()));
+ } catch (Exception e) {
+ log.error("Failed to obtain details for object ID '{}'!", id);
+ log.error("cause: ", e);
+ return Optional.empty();
+ }
+ }
+
+ /**
+ * Generate a label for an object (used as caption in object detail pages).
+ */
+ public abstract String getLabel(T object);
+
+ /**
+ * Override this to do whatever necessary to search results container before
+ * passing it to view controller. Gets called by
+ * {@link #search(SearchCommand, Integer)} before returning the results to the
+ * view controller.
+ */
+ protected SearchResults preProcess(SearchResults searchResults) {
+ return searchResults;
+ }
+
+ /**
+ * Send search form to backend and convert results from DTO to frontend model
+ * objects. Passes the results to {@link #preProcess(SearchResults)} before
+ * returning them, the default implementation of which does nothing to them at
+ * all, but any enhancements of the search results container right before it
+ * returns to the view controller can be done by overriding this method.
+ */
+ public SearchResults search(SearchCommand> command, Integer page) {
+ SearchResultsWrapper> response = backend.searchObjects(this.getModelClass(), command, page);
+ return this.preProcess(SearchResults.from(response));
+ }
}
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 69181a6f..f4edc4ad 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -109,6 +109,8 @@ search:
- timeSpan.begin_desc
- timeSpan.end_asc
- timeSpan.end_desc
+ - attestedSentencesCount_desc
+ - attestedSentencesCount_asc
# buttons
hideable1-lemma-properties:
hieroglyphs: []
diff --git a/src/main/resources/i18n/messages_de.properties b/src/main/resources/i18n/messages_de.properties
index cb8c4255..50fb5c8d 100644
--- a/src/main/resources/i18n/messages_de.properties
+++ b/src/main/resources/i18n/messages_de.properties
@@ -3,8 +3,8 @@ date_not_edited=kein Datum eingegeben
tla_Title=Thesaurus Linguae Aegyptiae
tla_Editor=Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig
-tla_version=2.1.3
-tla_ReleaseDate=16.5.2024
+tla_version=2.1.5
+tla_ReleaseDate=26.7.2024
tla_corpusversion=18
tla_corpusdate=24.11.2023
@@ -19,7 +19,7 @@ lemma-tokens-hiero-de=1.159 Tsd.
lemma-tokens-dem-de=328 Tsd.
corpus-lemma-tokens-amount-de=1,49 Mill.
-error_404=Objekt nicht gefunden oder nicht geliefert (Server-Timeout)
+error_404=Datenobjekt oder Seite nicht gefunden
error_500=Serverfehler
error_500_long=Der Datenbank-Server konnte die Anfrage nicht korrekt bearbeiten.
@@ -35,6 +35,7 @@ msg_sentence_comments=In einer zukünftigen Version der TLA-Webanwendung werden
msg_sending_comments=Die Funktion Kommentare zu senden ist noch nicht implementiert.
msg_related_with_invalid_names=Auf den Inhalt dieses Kommentars/dieser Annotation können wir aktuell noch nicht zugreifen:
msg_search_for_texts=Als Übergangslösung suchen Sie bitte nach Texten und Objekten in dieser PDF-Datei.
+msg_search_for_tla_id=Bitte persistente Lemma-, Textobjekt-, Text-, Satz-, Satztoken- oder Thesauruseintrag-ID eingeben oder hineinkopieren.
citeas_heading=Bitte zitieren als
citeas_website_heading=Bitte zitieren Sie dieses Webangebot als
@@ -57,13 +58,14 @@ object_id_label_BTSLemmaEntry=Lemma-ID
object_id_label_BTSSentence=Satz ID
object_id_label_BTSToken=Token ID
+button_back=Zurück
button_copy_ID=ID kopieren
button_copy_URL=URL kopieren
button_copy_MdC=MdC kopieren
button_copy_unicode=Unicode kopieren
button_sentence_page=Satz-Seite/Zitation
-button_sentence_in_text_start=Text-Satz Nr.
-button_sentence_in_text_end=im Kotext
+button_sentence_in_text_start=Satz Nr.
+button_sentence_in_text_end=im Ko(n)text
button_sentence_in_text_warning=Sprungziel aktuell approximativ
button_text_content=Sätze des Textes
button_text_metadata=Metadaten des Textes
@@ -272,6 +274,7 @@ review_state_published-obsolete=Obsolet
review_state_published-awaiting-verification=Verifizierung steht aus
artificially_aligned=Hieroglyphen künstlich angeordnet
+sentence_abbreviation=Satz
sentences_abbreviation=Sätze
state_of=Stand
@@ -302,14 +305,15 @@ object_property_annotation=Kommentar
object_property_translation=Übersetzung
object_property_script=Schrift
object_property_date=Datierung
-object_property_date_comment= Kommentar zur Datierung
+object_property_date_comment=Kommentar zur Datierung
+object_property_line_count_info=Information zur Zeilen-/Kolumnenzählung
object_property_language=Sprache
object_property_materials=Material
object_property_dimensions=Maße (H×B(×T))
object_property_origplace=Fundort
object_property_formerplace=Frühere(r) Ort(e)
object_property_certainty=Gewissheit
-object_property_isorigplace=Ist der ursprünglicher Nutzungsort
+object_property_isorigplace=Ist der ursprüngliche Nutzungsort
object_property_yes=Ja
object_property_no=Nein
object_property_in_situ=Ist in situ
@@ -443,7 +447,7 @@ lang_label_en=English
lang_label_fr=Français
# Search forms
-form_label_some-id-search=ID nachschlagen
+form_label_id-search=TLA-ID nachschlagen
form_label_lemma-id-search=Lemma-ID nachschlagen
form_label_token-id-search=Token-ID nachschlagen
form_label_sentence-id-search=Satz-ID nachschlagen
@@ -456,6 +460,7 @@ form_label_sentence-search=Sätze suchen
form_label_text-search=Texte/Objekte suchen
form_label_object-search=Objekte suchen
+field_label_id=TLA-ID
field_label_lemma_id=Lemma-ID
field_label_sentence_id=Satz-ID
field_label_text_id=Text-ID
@@ -558,6 +563,8 @@ field_value_label_sort_by_timeSpan.begin_desc_type_lemma=Belegzeit, Anfang (abst
field_value_label_sort_by_timeSpan.end_asc_type_lemma=Belegzeit, Ende (aufst.)
field_value_label_sort_by_timeSpan.end_desc_type_lemma=Belegzeit, Ende (abst.)
field_value_label_sort_by_root_asc_type_lemma=Wurzel
+field_value_label_sort_by_attestedSentencesCount_asc_type_lemma=Beleganzahl (aufst.)
+field_value_label_sort_by_attestedSentencesCount_desc_type_lemma=Beleganzahl (abst.)
field_value_label_sort_by_context.notBefore_asc_type_sentence=Datierungszeitspanne, Anfang (aufsteigend)
field_value_label_sort_by_context.notBefore_desc_type_sentence=Datierungszeitspanne, Anfang (absteigend)
@@ -565,7 +572,7 @@ field_value_label_sort_by_context.notAfter_asc_type_sentence=Datierungszeitspann
field_value_label_sort_by_context.notAfter_desc_type_sentence=Datierungszeitspanne, Ende (absteigend)
button_label_clear_form=Alles löschen
-button_label_some-id_search=ID nachschlagen
+button_label_id_search=ID nachschlagen
button_label_lemma-id_search=ID nachschlagen
button_label_sentence-id_search=ID nachschlagen
button_label_text-id_search=ID nachschlagen
diff --git a/src/main/resources/i18n/messages_en.properties b/src/main/resources/i18n/messages_en.properties
index dc181f64..038d9b36 100644
--- a/src/main/resources/i18n/messages_en.properties
+++ b/src/main/resources/i18n/messages_en.properties
@@ -3,8 +3,8 @@ date_not_edited=no date edited
tla_Title=Thesaurus Linguae Aegyptiae
tla_Editor=Tonio Sebastian Richter & Daniel A. Werning on behalf of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils on behalf of the Sächsische Akademie der Wissenschaften zu Leipzig
-tla_version=2.1.3
-tla_ReleaseDate=5/16/2023
+tla_version=2.1.5
+tla_ReleaseDate=7/26/2023
tla_corpusversion=18
tla_corpusdate=11/24/2023
@@ -19,7 +19,7 @@ lemma-tokens-hiero-de=1.159 Tsd.
lemma-tokens-dem-de=328 Tsd.
corpus-lemma-tokens-amount-de=1,49 Mill.
-error_404=Object not found or not delivered (server timeout)
+error_404=Data object or page not found
error_500=Server error
error_500_long=The database server failed to process your request.
@@ -35,6 +35,7 @@ msg_sentence_comments=A future release of the TLA web app will also indicate the
msg_sending_comments=The function of sending comments is not yet implemented.
msg_related_with_invalid_names=We are yet unable to access the content of this comment/annotation:
msg_search_for_texts=As a temporary solution, please search for texts and objects in this PDF file.
+msg_search_for_tla_id=Enter or paste persistent ID of lemma, text object, text, sentence, sentence token, or thesaurus entry.
citeas_heading=Please cite as
citeas_website_heading=Please cite this website as
@@ -57,13 +58,14 @@ object_id_label_BTSLemmaEntry=Lemma ID
object_id_label_BTSSentence=Sentence ID
object_id_label_BTSToken= Token ID
+button_back=Back
button_copy_ID=Copy ID
button_copy_URL=Copy URL
button_copy_MdC=Copy MdC
button_copy_unicode=Copy Unicode
button_sentence_page=Go to/cite sentence
-button_sentence_in_text_start=Text sentence no.
-button_sentence_in_text_end=in cotext
+button_sentence_in_text_start=Sentence no.
+button_sentence_in_text_end=in co(n)text
button_sentence_in_text_warning=Jump target position currently approximate.
button_text_content=Sentences of the text
button_text_metadata=Metadata of the text
@@ -272,6 +274,7 @@ review_state_published-obsolete=Obsolete
review_state_published-awaiting-verification=Verification pending
artificially_aligned=Glyphs artificially arranged
+sentence_abbreviation=sent.
sentences_abbreviation=sent.
state_of=State of
@@ -300,9 +303,10 @@ object_property_grammatical_encoding=Grammatical annotation
object_property_hieroglyphic_encoding=Editing of hieroglpyhs
object_property_isHieroglyphs_sequential=Hieroglyphs encoded without arrangement (pure sequence)
object_property_translation=Translation
-object_property_script= Script
-object_property_date= Dating
-object_property_date_comment= Comment on dating
+object_property_script=Script
+object_property_date=Dating
+object_property_date_comment=Comment on dating
+object_property_line_count_info=Information on line/column count
object_property_language=Language
object_property_materials=Materials
object_property_dimensions=Dimensions (H×W(×D))
@@ -443,7 +447,7 @@ lang_label_en=English
lang_label_fr=Français
# Search forms
-form_label_some-id-search=Look up ID
+form_label_id-search=Look up TLA ID
form_label_lemma-id-search=Look up lemma ID
form_label_token-id-search=Look up token ID
form_label_sentence-id-search=Look up sentence ID
@@ -456,6 +460,7 @@ form_label_sentence-search=Search for sentences
form_label_text-search=Search for texts/objects
form_label_object-search=Search for objects
+field_label_id=TLA ID
field_label_lemma_id=Lemma ID
field_label_sentence_id=Sentence ID
field_label_text_id=Text ID
@@ -558,6 +563,8 @@ field_value_label_sort_by_timeSpan.begin_desc_type_lemma=Attestation time, start
field_value_label_sort_by_timeSpan.end_asc_type_lemma=Attestation time, end (asc.)
field_value_label_sort_by_timeSpan.end_desc_type_lemma=Attestation time, end (desc.)
field_value_label_sort_by_root_asc_type_lemma=Root
+field_value_label_sort_by_attestedSentencesCount_asc_type_lemma=Attestation count (asc.)
+field_value_label_sort_by_attestedSentencesCount_desc_type_lemma=Attestation count (desc.)
field_value_label_sort_by_context.notBefore_asc_type_sentence=Dating time span, start (asc.)
field_value_label_sort_by_context.notBefore_desc_type_sentence=Dating time span, start (desc.)
@@ -565,7 +572,7 @@ field_value_label_sort_by_context.notAfter_asc_type_sentence=Dating time span, e
field_value_label_sort_by_context.notAfter_desc_type_sentence=Dating time span, end (desc.)
button_label_clear_form=Clear all
-button_label_some-id_search=Look up ID
+button_label_id_search=Look up ID
button_label_lemma-id_search=Look up ID
button_label_sentence-id_search=Look up ID
button_label_text-id_search=Look up ID
diff --git a/src/main/resources/pages/de/help/search-page.html b/src/main/resources/pages/de/help/search-page.html
index 9011f4d7..46977969 100644
--- a/src/main/resources/pages/de/help/search-page.html
+++ b/src/main/resources/pages/de/help/search-page.html
@@ -58,7 +58,7 @@
Bibliographie
-
Formulare „ID nachschlagen‟
+
Formulare „ID nachschlagen‟
In diesen Suchfeldern können Sie eine persistente TLA-ID nachschlagen, die Sie im TLA oder in einer anderen Publikation zitiert gefunden haben. Bitte geben Sie hier die reine ID (nicht eine ganze URL) ein, z.B. eine Lemma- oder Wurzel-ID wie 170860 oder eine Satz-, Text-, Objekt- oder Thesaursuseintrag-ID wie BCU37HWBF5BL5APKALEPWE2RWY.
Web app: v2.1.5, Verbesserungen
+ (verbessert:) Links in Kommentaren/Textfeldern anklickbar, Button-Platzierung auf Text- und Suchseite, Belegstellensortierung: zweites Sortierkriterium, Relations-Listen: Sortierung nach Alphabet;
+ (korrigiert:) Bug in Font "EgyptianHiero" v3.03 > v3.03a durch Marwan Kilani, Bug: keine Anzeige von Links in spitzen Klammern;
+ (neu:) Text-Metadatum: Information zu Zeilenzählung, Objekt-Metadatum: Objektbeschreibung, Sortiermöglichkeit von Lemmata nach Beleganzahl.
+
Text corpus: v18, unverändert
+
+
+
27.6.2024:
+
+
Web app: v2.1.4, Verbesserungen
+ (verbessert:) ID-Suche in einem Suchschlitz zusammengefasst;
+ (korrigiert:) Bug fixes bei Relationen ohne IDs.
+
Text corpus: v18, unverändert
+
+
16.5.2024:
Web app: v2.1.3, Verbesserungen
@@ -20,7 +37,7 @@
Versionshistorie
(verbessert:) Glossierungsabkürzungsliste;
(aktualisiert:) Infos über Korpusinhalte, Autor:innen, Bibliographie;
(geändert:) Zählweise von Satzlesevarianten nun dezimal, Lizenzinformationen;
- (neu:) Übersichtsliste Metadaten-Thesauri.
=j (Lemma-ID 10030), <https://thesaurus-linguae-aegyptiae.de/lemma/10030>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
=f (Lemma-ID 10050), <https://thesaurus-linguae-aegyptiae.de/lemma/10050>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
=k (Lemma-ID 10110), <https://thesaurus-linguae-aegyptiae.de/lemma/10110>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
jri̯ (Lemma-ID 28550), <https://thesaurus-linguae-aegyptiae.de/lemma/28550>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
m (Lemma-ID 400007), <https://thesaurus-linguae-aegyptiae.de/lemma/400007>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
n (Lemma-ID 400055), <https://thesaurus-linguae-aegyptiae.de/lemma/400055>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
n.j (Lemma-ID 79800), <https://thesaurus-linguae-aegyptiae.de/lemma/79800>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
nb (Lemma-ID 81660), <https://thesaurus-linguae-aegyptiae.de/lemma/81660>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
1...n (Lemma-ID 850814), <https://thesaurus-linguae-aegyptiae.de/lemma/850814>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
-
- de
-
-
- der [best. Art. Sg. mask.]; das [neutrisch]; [beim "Vokativ; demonstrativ bei Zeitbegriffen; [im Prädikat der "pseudo-cleft-sentence
-
-
-
-
-
-
-
-
- Bezeugung im TLA-Textkorpus
-
-
- 9818
-
-
-
-
-
-
- Belegzeitraum im TLA-Textkorpus:
- von
-
- 664
- v.Chr.
-
- bis
-
- 475
- n.Chr.
-
-
-
pꜣ (Lemma-ID d1839), <https://thesaurus-linguae-aegyptiae.de/lemma/d1839>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
=f (Lemma-ID d2193), <https://thesaurus-linguae-aegyptiae.de/lemma/d2193>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Korpus-Ausgabe 17, Web-App-Version 2.0, 31.10.2022, hrsg. von Tonio Sebastian Richter & Daniel A. Werning im Auftrag der Berlin-Brandenburgischen Akademie der Wissenschaften und Hans-Werner Fischer-Elfert & Peter Dils im Auftrag der Sächsischen Akademie der Wissenschaften zu Leipzig (Zugriff am:
- xx.xx.20xx)
-
These search fields allow you to look up a persistent TLA ID which you may have found in the TLA or which was cited in another publication. Please enter the bare ID (not an entire URL), e.g., a lemma or root ID such as 170860, or a sentence, text, object, or thesaurus entry ID such as BCU37HWBF5BL5APKALEPWE2RWY.
Web app: v2.1.5, improvements
+ (Improved:) Links in comments/text fields clickable, button placement on text and search page, attestation sorting: second sorting criterion, relation lists: sorting by alphabet;
+ (Corrected:) Bug in font “EgyptianHiero” v3.03 > v3.03a by Marwan Kilani, bug: no display of links in angle brackets;
+ Text metadata: information on line count, object metadata: object description, sorting option for lemmata by attestation count.
+
Text corpus: v18, unchanged
+
+
+
6/27/2024:
+
+
Web app: v2.1.4, improvements
+ (Improved:) ID search merged;
+ (Corrected:) Bug fixes concerning relations w/o IDs.
+
Text corpus: v18, unchanged
+
+
5/16/2024:
Web app: v2.1.3, improvements
@@ -20,7 +37,7 @@
Version history
(Improved:) List of glossing abbreviations;
(Updated:) Information on corpus, authors, bibliography;
(Changed:) Counting of sentence reading variants now decimal, license information,
- (New:) List of metadata thesauri.
=j (Lemma ID 10030), <https://thesaurus-linguae-aegyptiae.de/lemma/10030>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
=f (Lemma ID 10050), <https://thesaurus-linguae-aegyptiae.de/lemma/10050>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
=k (Lemma ID 10110), <https://thesaurus-linguae-aegyptiae.de/lemma/10110>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
jri̯ (Lemma ID 28550), <https://thesaurus-linguae-aegyptiae.de/lemma/28550>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
m (Lemma ID 400007), <https://thesaurus-linguae-aegyptiae.de/lemma/400007>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
n (Lemma ID 400055), <https://thesaurus-linguae-aegyptiae.de/lemma/400055>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
n.j (Lemma ID 79800), <https://thesaurus-linguae-aegyptiae.de/lemma/79800>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
nb (Lemma ID 81660), <https://thesaurus-linguae-aegyptiae.de/lemma/81660>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
1...n (Lemma ID 850814), <https://thesaurus-linguae-aegyptiae.de/lemma/850814>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
-
- de
-
-
- der [best. Art. Sg. mask.]; das [neutrisch]; [beim "Vokativ; demonstrativ bei Zeitbegriffen; [im Prädikat der "pseudo-cleft-sentence
-
-
-
-
-
-
-
-
- Attestation in the TLA text corpus
-
-
- 9818
-
-
-
-
-
-
- Attestation time frame in the TLA text corpus:
- from
-
- 664
- BCE
-
- to
-
- 475
- CE
-
-
-
pꜣ (Lemma ID d1839), <https://thesaurus-linguae-aegyptiae.de/lemma/d1839>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
=f (Lemma ID d2193), <https://thesaurus-linguae-aegyptiae.de/lemma/d2193>, in:
- Thesaurus Linguae Aegyptiae
- <https://thesaurus-linguae-aegyptiae.de>, Corpus issue 17, Web app version 2.0, 10/31/2022, ed. by Tonio Sebastian Richter & Daniel A. Werning by order of the Berlin-Brandenburgische Akademie der Wissenschaften and Hans-Werner Fischer-Elfert & Peter Dils by order of the Sächsische Akademie der Wissenschaften zu Leipzig (accessed:
- xx.xx.20xx)
-
Kommentieren Sie den Inhalt dieser Seite
- -Danke, dass Sie uns helfen unser Angebot zu verbessern. Ihr Kommentar wird an das TLA-Team zur Bearbeitung übermittelt werden. Weitere Informationen finden Sie in der Datenschutz-Erklärung.
-Teile diese Seite
- -Beachten Sie, dass, wenn Sie Social Media-Buttons (z.b. Twitter, Facebook) nutzen, Daten an die entsprechenden Services übermittelt werden. Details entnehmen Sie den Datenschutzrichtlinien des entsprechenden Angebots.
-