diff --git a/Schema/tei_blotius.rnc b/Schema/tei_blotius.rnc
index 0627d66369b7d62bffa7803dc2c81cfe01031c53..a590a5c4fb6ae7a00f56a76d30be3cebd2f25278 100644
--- a/Schema/tei_blotius.rnc
+++ b/Schema/tei_blotius.rnc
@@ -8,10 +8,10 @@ namespace teix = "http://www.tei-c.org/ns/Examples"
 namespace xi = "http://www.w3.org/2001/XInclude"
 namespace xlink = "http://www.w3.org/1999/xlink"
 
-# Schema generated from ODD source 2019-09-11T07:28:01Z. .
-# TEI Edition: Version 3.6.0. Last updated on
-#	16th July 2019, revision 4d9d1971f
-# TEI Edition Location: http://www.tei-c.org/Vault/P5/Version 3.6.0/
+# Schema generated from ODD source 2020-08-12T09:07:48Z. .
+# TEI Edition: Version 4.0.0. Last updated on
+#	13th February 2020, revision ccd19b0ba
+# TEI Edition Location: http://www.tei-c.org/Vault/P5/Version 4.0.0/
 #
 
 # This material is dual-licensed.
@@ -150,7 +150,7 @@ teiatt.dimensions.attribute.unit =
     | 
       ## (characters) characters of text
       "char"
-    | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.dimensions.attribute.quantity =
   
@@ -186,7 +186,7 @@ teiatt.dimensions.attribute.scope =
   ## where the measurement summarizes more than one observation, specifies the applicability of this measurement.
   ## Beispielwerte sind etwa: 1] all; 2] most; 3] range
   attribute scope {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.written.attributes = teiatt.written.attribute.hand
 teiatt.written.attribute.hand =
@@ -209,7 +209,7 @@ teiatt.damaged.attribute.agent =
   ## categorizes the cause of the damage, if it can be identified.
   ## Beispielwerte sind etwa: 1] rubbing; 2] mildew; 3] smoke
   attribute agent {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.damaged.attribute.degree =
   [
@@ -247,7 +247,7 @@ teiatt.breaking.attribute.break =
   
   ## indicates whether or not the element bearing this attribute should be considered to mark the end of an orthographic token in the same way as whitespace.
   attribute break {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.cReferencing.attributes = teiatt.cReferencing.attribute.cRef
 teiatt.cReferencing.attribute.cRef =
@@ -526,7 +526,7 @@ teiatt.docStatus.attribute.status =
   ## Beispielwerte sind etwa: 1] approved; 2] candidate; 3] cleared; 4] deprecated; 5] draft; 6] embargoed; 7] expired; 8] frozen; 9] galley; 10] proposed; 11] published; 12] recommendation; 13] submitted; 14] unfinished; 15] withdrawn
   [ a:defaultValue = "draft" ]
   attribute status {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.global.responsibility.attributes =
   teiatt.global.responsibility.attribute.cert,
@@ -572,7 +572,7 @@ teiatt.editLike.attribute.evidence =
        | 
          ## the intervention or interpretation has been made by the editor, cataloguer, or scholar on the basis of their expertise.
          "conjecture"
-       | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" })+
+       | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+
     }
   }?
 teiatt.editLike.attribute.instant =
@@ -597,7 +597,7 @@ teiatt.global.rendition.attribute.rend =
   ## (rendition) indicates how the element in question was rendered or presented in the source text.
   attribute rend {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.global.rendition.attribute.style =
@@ -713,7 +713,7 @@ teiatt.handFeatures.attribute.medium =
   ## describes the tint or type of ink, e.g. brown, or other writing medium, e.g. pencil
   attribute medium {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.handFeatures.attribute.scope =
@@ -737,7 +737,7 @@ teiatt.internetMedia.attribute.mimeType =
   ## (MIME media type) specifies the applicable multimedia internet mail extension (MIME) media type
   attribute mimeType {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.media.attributes =
@@ -784,7 +784,7 @@ teiatt.measurement.attributes =
 teiatt.measurement.attribute.unit =
   
   ## indicates the units used for the measurement, usually using the standard symbol for the desired units.
-  ## Empfohlene Werte sind: 1] m (metre); 2] kg (kilogram); 3] s (second); 4] Hz (hertz); 5] Pa (pascal); 6] Ω (ohm); 7] L (litre); 8] t (tonne); 9] ha (hectare); 10] Å (ångström); 11] mL (millilitre); 12] cm (centimetre); 13] dB (decibel); 14] kbit (kilobit); 15] Kibit (kibibit); 16] kB (kilobyte); 17] KiB (kibibyte); 18] MB (megabyte); 19] MiB (mebibyte)
+  ## Empfohlene Werte sind: 1] m (metre); 2] kg (kilogram); 3] s (second); 4] Hz (hertz); 5] Pa (pascal); 6] Ω (ohm); 7] L (litre); 8] t (tonne); 9] ha (hectare); 10] Å (ångström); 11] mL (millilitre); 12] cm (centimetre); 13] dB (decibel); 14] kbit (kilobit); 15] Kibit (kibibit); 16] kB (kilobyte); 17] KiB (kibibyte); 18] MB (megabyte); 19] MiB (mebibyte)
   attribute unit {
     
     ## (metre) SI base unit of length
@@ -803,7 +803,7 @@ teiatt.measurement.attribute.unit =
       "Pa"
     | 
       ## (ohm) SI unit of electric resistance
-      "Ω"
+      "Ω"
     | 
       ## (litre) 1 dm³
       "L"
@@ -815,7 +815,7 @@ teiatt.measurement.attribute.unit =
       "ha"
     | 
       ## (ångström) 10⁻¹⁰ m
-      "â„«"
+      "Ã…"
     | 
       ## (millilitre) 
       "mL"
@@ -843,7 +843,7 @@ teiatt.measurement.attribute.unit =
     | 
       ## (mebibyte) 2²⁰ or 1 048 576 bytes
       "MiB"
-    | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.measurement.attribute.unitRef =
   [
@@ -869,7 +869,7 @@ teiatt.measurement.attribute.commodity =
   ## indicates the substance that is being measured
   attribute commodity {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 sch:pattern [
@@ -901,7 +901,7 @@ teiatt.naming.attribute.role =
   ## may be used to specify further information about the entity referenced by this name in the form of a set of whitespace-separated values, for example the occupation of a person, or the status of a place.
   attribute role {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.naming.attribute.nymRef =
@@ -915,7 +915,7 @@ teiatt.notated.attribute.notation =
   
   ## names the notation used for the content of the element.
   attribute notation {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.placement.attributes = teiatt.placement.attribute.place
 teiatt.placement.attribute.place =
@@ -954,7 +954,7 @@ teiatt.placement.attribute.place =
        | 
          ## in a predefined space, for example left by an earlier scribe.
          "inspace"
-       | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" })+
+       | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+
     }
   }?
 teiatt.typed.attributes =
@@ -963,13 +963,13 @@ teiatt.typed.attribute.type =
   
   ## characterizes the element in some sense, using any convenient classification scheme or typology.
   attribute type {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.typed.attribute.subtype =
   
   ## provides a sub-categorization of the element, if needed
   attribute subtype {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 sch:pattern [
   id = "tei_blotius_odd-att.typed-subtypeTyped-constraint-rule-6"
@@ -1082,9 +1082,9 @@ teiatt.pointing.group.attribute.targFunc =
   ]
   attribute targFunc {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" },
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" },
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }*
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" },
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" },
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }*
     }
   }?
 teiatt.segLike.attributes =
@@ -1095,14 +1095,14 @@ teiatt.segLike.attribute.function =
   
   ## characterizes the function of the segment.
   attribute function {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.sortable.attributes = teiatt.sortable.attribute.sortKey
 teiatt.sortable.attribute.sortKey =
   
   ## supplies the sort key for this element in an index, list or group which contains it.
   attribute sortKey {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.edition.attributes =
   teiatt.edition.attribute.ed, teiatt.edition.attribute.edRef
@@ -1111,7 +1111,7 @@ teiatt.edition.attribute.ed =
   ## (edition) supplies a sigil or other arbitrary identifier for the source edition in which the associated feature (for example, a page, column, or line break) occurs at this point in the text.
   attribute ed {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.edition.attribute.edRef =
@@ -1224,13 +1224,13 @@ teiatt.transcriptional.attribute.status =
   ## Beispielwerte sind etwa: 1] duplicate; 2] duplicate-partial; 3] excessStart; 4] excessEnd; 5] shortStart; 6] shortEnd; 7] partial; 8] unremarkable
   [ a:defaultValue = "unremarkable" ]
   attribute status {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.transcriptional.attribute.cause =
   
   ## documents the presumed cause for the intervention.
   attribute cause {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.transcriptional.attribute.seq =
   
@@ -1284,7 +1284,7 @@ teiatt.citing.attribute.unit =
     | 
       ## the element identifies an entry number or label in a list of entries.
       "entry"
-    | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.citing.attribute.from =
   [
@@ -1295,7 +1295,7 @@ teiatt.citing.attribute.from =
     ]
   ]
   attribute from {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.citing.attribute.to =
   [
@@ -1306,7 +1306,7 @@ teiatt.citing.attribute.to =
     ]
   ]
   attribute to {
-    xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teimodel.nameLike.agent = teiname | teiorgName | teipersName
 teimodel.nameLike.agent_alternation = teiname | teiorgName | teipersName
@@ -1910,6 +1910,7 @@ teimodel.frontPart.drama = notAllowed
 teimodel.pLike.front =
   teihead
   | teibyline
+  | teidateline
   | teiargument
   | teiepigraph
   | teidocTitle
@@ -2046,6 +2047,9 @@ teimodel.biblPart =
   | teilistRelation
   | teiobjectIdentifier
   | teimsIdentifier
+  | teiexplicit
+  | teiincipit
+  | teidecoNote
 teimodel.frontPart =
   teimodel.frontPart.drama | teilistBibl | teidivGen | teititlePage
 teimodel.addrPart =
@@ -2120,6 +2124,13 @@ teimodel.profileDescPart =
   | teicorrespDesc
   | teihandNotes
   | teilistTranspose
+teimodel.standOffPart =
+  teimodel.global.meta
+  | teimodel.biblLike
+  | teimodel.listLike
+  | teilistChange
+  | teiseg
+  | teizone
 teiatt.formula.attributes = teiatt.formula.attribute.formula
 teiatt.formula.attribute.formula =
   [
@@ -2136,7 +2147,8 @@ teimodel.correspContextPart =
   teimodel.ptrLike | teimodel.pLike | teinote
 teimodel.correspDescPart =
   teinote | teicorrespAction | teicorrespContext
-teimodel.resourceLike = teitext | teifacsimile | teisourceDoc
+teimodel.resource = teistandOff | teitext | teifacsimile | teisourceDoc
+teimodel.describedResource = teiteiCorpus | teiTEI
 teimodel.objectLike = teiobject | teilistObject
 teiatt.personal.attributes =
   teiatt.naming.attributes,
@@ -2217,7 +2229,7 @@ teiatt.milestoneUnit.attribute.unit =
     | 
       ## passages present in the text, but not to be included as part of the reference.
       "unnumbered"
-    | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }
 teip =
   
@@ -2299,10 +2311,11 @@ teidistinct =
   element distinct {
     teimacro.phraseSeq,
     teiatt.global.attributes,
+    teiatt.typed.attribute.subtype,
     
     ## specifies the sublanguage or register to which the word or phrase is being assigned
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## specifies how the phrase is distinct diachronically
@@ -2396,7 +2409,7 @@ teiq =
       | 
         ## (erwähnt) bezieht sich auf sich selbst, nicht auf den üblichen Bezugspunkt
         "mentioned"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -2439,14 +2452,14 @@ teidesc =
          sch:rule [
            context = "tei:desc[ @type eq 'deprecationInfo']"
            "\x{a}" ~
-           "	              "
+           "               "
            sch:assert [
              test = "../@validUntil"
              "Information about a\x{a}" ~
-             "	deprecation should only be present in a specification element\x{a}" ~
-             "	that is being deprecated: that is, only an element that has a\x{a}" ~
-             "	@validUntil attribute should have a child <desc\x{a}" ~
-             '	type="deprecationInfo">.'
+             "        deprecation should only be present in a specification element\x{a}" ~
+             "        that is being deprecated: that is, only an element that has a\x{a}" ~
+             "        @validUntil attribute should have a child <desc\x{a}" ~
+             '        type="deprecationInfo">.'
            ]
            "\x{a}" ~
            "            "
@@ -2460,7 +2473,7 @@ teidesc =
     
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -2562,14 +2575,14 @@ teigap =
          | 
            ## (Auswahl) 
            "sampling"
-         | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" })+
+         | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+
       }
     }?,
     
     ## (Ursache) bestimmt im Falle von Text, der wegen Beschädigung weggelassen wird, die Ursache für den Schaden, sofern er ermittelt werden kann.
     ## Beispielwerte sind etwa: 1] rubbing; 2] mildew; 3] smoke
     attribute agent {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -2624,14 +2637,14 @@ teiunclear =
          | 
            ## (exzentrischer Duktus) 
            "eccentric_ductus"
-         | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" })+
+         | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+
       }
     }?,
     
     ## basiert die Schwierigkeit bei der Transkription auf einer schadhaften Stelle am Textträger, kann der Grund dafür hier genauer kategorisiert werden.
     ## Beispielwerte sind etwa: 1] rubbing; 2] mildew; 3] smoke
     attribute agent {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -2694,6 +2707,7 @@ teinum =
   element num {
     teimacro.phraseSeq,
     teiatt.global.attributes,
+    teiatt.typed.attribute.subtype,
     teiatt.ranging.attributes,
     
     ## bestimmt die Art des numerischen Wertes.
@@ -2711,7 +2725,7 @@ teinum =
       | 
         ## Prozentangabe
         "percentage"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## beinhaltet den Zahlenwert in standardisierter Form.
@@ -2729,11 +2743,12 @@ teimeasure =
   element measure {
     teimacro.phraseSeq,
     teiatt.global.attributes,
+    teiatt.typed.attribute.subtype,
     teiatt.measurement.attributes,
     
     ## specifies the type of measurement in any convenient typology.
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -2795,7 +2810,7 @@ teiabbr =
     ## (Typ) erlaubt es, die Abkürzung nach einer geeigneten Typologie zu klassifizieren.
     ## Beispielwerte sind etwa: 1] suspension; 2] contraction; 3] brevigraph; 4] superscription; 5] acronym; 6] title; 7] organization; 8] geographic
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -2933,7 +2948,7 @@ teilist =
       | 
         ## (logischer Schluss) jeder Listenpunkt ist Teil eines Arguments, das aus zwei oder mehr Prämissen und einem daraus gezogenen Schluss besteht.
         "syllogism"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -3040,7 +3055,7 @@ teimedia =
     ## (MIME media type) specifies the applicable multimedia internet mail extension (MIME) media type
     attribute mimeType {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     },
     empty
@@ -3074,7 +3089,7 @@ teibinaryObject =
     ]
     attribute encoding {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     empty
@@ -3264,14 +3279,14 @@ teititle =
   element title {
     teimacro.paraContent,
     teiatt.global.attributes,
-    teiatt.canonical.attributes,
     teiatt.typed.attribute.subtype,
+    teiatt.canonical.attributes,
     teiatt.datable.attributes,
     
     ## klassifiziert den Titel entsprechend einer geeigneten Typologie.
     ## Beispielwerte sind etwa: 1] main; 2] sub (subordinate); 3] alt (alternate); 4] short; 5] desc (descriptive)
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## gibt den bibliografischen Typ eines Titels an, d.h. ob er einen Artikel, ein Buch, eine Zeitschrift, eine Reihe oder unpubliziertes Material bezeichnet.
@@ -3425,19 +3440,6 @@ teirelatedItem =
              "relatedItem element must be empty"
            ]
            "\x{a}" ~
-           "            "
-         ]
-         "\x{a}" ~
-         "         "
-       ]
-    >> sch:pattern [
-         id =
-           "tei_blotius_odd-relatedItem-targetorcontent1-constraint-assert-8"
-         "\x{a}" ~
-         "            "
-         sch:rule [
-           context = "tei:relatedItem"
-           "\x{a}" ~
            "               "
            sch:assert [
              test = "@target or child::*"
@@ -3615,7 +3617,7 @@ teistage =
          | 
            ## mehrere der oben angeführten Funktionen.
            "mixed"
-         | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" })*
+         | xsd:token { pattern = "[^\p{C}\p{Z}]+" })*
       }
     }?,
     empty
@@ -3629,9 +3631,7 @@ teiteiCorpus =
     ]
   ]
   element teiCorpus {
-    (teiteiHeader,
-     ((teimodel.resourceLike+, (teiTEI | teiteiCorpus)*)
-      | (teiTEI | teiteiCorpus)+)),
+    (teiteiHeader, teimodel.resource*, teimodel.describedResource+),
     teiatt.global.attributes,
     teiatt.typed.attributes,
     
@@ -3647,11 +3647,12 @@ teidivGen =
   element divGen {
     teimodel.headLike*,
     teiatt.global.attributes,
+    teiatt.typed.attribute.subtype,
     
     ## specifies what type of generated text division (e.g. index, table of contents, etc.) is to appear.
     ## Beispielwerte sind etwa: 1] index; 2] toc; 3] figlist; 4] tablist
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -4240,7 +4241,7 @@ teirendition =
     ## where CSS is used, provides a way of defining pseudo-elements, that is, styling rules applicable to specific sub-portions of an element.
     ## Beispielwerte sind etwa: 1] first-line; 2] first-letter; 3] before; 4] after
     attribute scope {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     [
       a:documentation [
@@ -4353,6 +4354,7 @@ teicatDesc =
   element catDesc {
     (text | teimodel.limitedPhrase | teimodel.catDescPart)*,
     teiatt.global.attributes,
+    teiatt.canonical.attributes,
     empty
   }
 teigeoDecl =
@@ -4384,7 +4386,7 @@ teigeoDecl =
       | 
         ## (European Datum coordinate system) the value supplied is to be interpreted as latitude followed by longitude according to the European Datum coordinate system.
         "ED50"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -4643,7 +4645,7 @@ teicorrespAction =
       | 
         ## information concerning the forwarding of a message.
         "forwarded"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -4864,7 +4866,7 @@ teiab =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     attribute type {
       
-      ## The value "blotius number" reflects the number given by Blotius to the title in the inventary.
+      ## The value "blotius-number" reflects the number given by Blotius to the title in the inventary.
       "blotius-number"
       | 
         ## The value "title" reflects the title as written by Blotius.
@@ -4872,6 +4874,9 @@ teiab =
       | 
         ## The value "note" is reserved for a note made by Blotius himself.
         "note"
+      | 
+        ## The value "dernschwam-number" reflects the number given by Hans Dernschwam to the title in his catalogue.
+        "dernschwam-number"
     }?,
     empty
   }
@@ -4937,7 +4942,7 @@ teiwhen =
       | 
         ## (milliseconds) 
         "ms"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## specifies a time interval either as a number or as one of the keywords defined by the datatype data.interval
@@ -4996,7 +5001,7 @@ teitimeline =
       | 
         ## (milliseconds) 
         "ms"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## specifies a time interval either as a positive integral value or using one of a set of predefined codes.
@@ -5157,10 +5162,46 @@ teialtGrp =
     }?,
     empty
   }
+teistandOff =
+  
+  ## Functions as a container element for linked data, contextual information, and stand-off annotations embedded in a TEI document. [16.10. The standOff Container]
+  element standOff {
+    (teimodel.standOffPart+)
+    >> sch:pattern [
+         id =
+           "tei_blotius_odd-standOff-nested_standOff_should_be_typed-constraint-assert-12"
+         "\x{a}" ~
+         "            "
+         sch:rule [
+           context = "tei:standOff"
+           "\x{a}" ~
+           "               "
+           sch:assert [
+             test = "@type or not(ancestor::tei:standOff)"
+             "This\x{a}" ~
+             "      "
+             sch:name [ ]
+             " element must have a @type attribute, since it is\x{a}" ~
+             "      nested inside a "
+             sch:name [ ]
+             "\x{a}" ~
+             "               "
+           ]
+           "\x{a}" ~
+           "            "
+         ]
+         "\x{a}" ~
+         "         "
+       ],
+    teiatt.global.attributes,
+    teiatt.typed.attributes,
+    teiatt.declaring.attributes,
+    empty
+  }
 teiTEI =
   [
     a:documentation [
-      "(TEI-Dokument) enthält ein einzelnes TEI-konformes Dokument, das aus einem einzigen TEI-Header und einem oder mehreren Mitgliedern der model.resourceLike-Klasse besteht. Mehrere "
+      "(TEI-Dokument) enthält ein einzelnes TEI-konformes Dokument, das aus einem einzigen TEI-Header und einem oder mehreren Mitgliedern der model.resource-Klasse besteht. Mehrere "
       ns1:code [ "<TEI>" ]
       "-Elemente können in einem "
       ns1:code [ "<teiCorpus>" ]
@@ -5168,7 +5209,8 @@ teiTEI =
     ]
   ]
   element TEI {
-    (teiteiHeader, teimodel.resourceLike+)
+    (teiteiHeader,
+     ((teimodel.resource+, teiTEI*) | teiTEI+))
     >> sch:ns [ prefix = "tei" uri = "http://www.tei-c.org/ns/1.0" ]
     >> sch:ns [ prefix = "xs" uri = "http://www.w3.org/2001/XMLSchema" ]
     >> sch:ns [
@@ -5308,7 +5350,7 @@ teidiv =
       
       ##
       "entry"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -5441,10 +5483,11 @@ teititlePage =
      teimodel.titlepagePart,
      (teimodel.titlepagePart | teimodel.global)*),
     teiatt.global.attributes,
+    teiatt.typed.attribute.subtype,
     
     ## klassifiziert die Titelseite entsprechend einer geeigneten Typologie.
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -5463,6 +5506,7 @@ teititlePart =
   element titlePart {
     teimacro.paraContent,
     teiatt.global.attributes,
+    teiatt.typed.attribute.subtype,
     
     ## (Titelart) beschreibt die Funktion dieses Titelbestandteils näher.
     ## Empfohlene Werte sind: 1] main; 2] sub (subordinate); 3] alt (alternate); 4] short; 5] desc (descriptive)
@@ -5483,7 +5527,7 @@ teititlePart =
       | 
         ## (Beschreibung) beschreibende Paraphrase eines Werks
         "desc"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -5591,7 +5635,7 @@ teiatt.datable.custom.attribute.when-custom =
   ## supplies the value of a date or time in some custom standard form.
   attribute when-custom {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.datable.custom.attribute.notBefore-custom =
@@ -5599,7 +5643,7 @@ teiatt.datable.custom.attribute.notBefore-custom =
   ## specifies the earliest possible date for the event in some custom standard form.
   attribute notBefore-custom {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.datable.custom.attribute.notAfter-custom =
@@ -5607,7 +5651,7 @@ teiatt.datable.custom.attribute.notAfter-custom =
   ## specifies the latest possible date for the event in some custom standard form.
   attribute notAfter-custom {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.datable.custom.attribute.from-custom =
@@ -5615,7 +5659,7 @@ teiatt.datable.custom.attribute.from-custom =
   ## indicates the starting point of the period in some custom standard form.
   attribute from-custom {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.datable.custom.attribute.to-custom =
@@ -5623,7 +5667,7 @@ teiatt.datable.custom.attribute.to-custom =
   ## indicates the ending point of the period in some custom standard form.
   attribute to-custom {
     list {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
     }
   }?
 teiatt.datable.custom.attribute.datingPoint =
@@ -5948,7 +5992,7 @@ teiaffiliation =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] sponsor; 2] recommend; 3] discredit; 4] pledged
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -5966,7 +6010,7 @@ teiage =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] western; 2] sui; 3] subjective; 4] objective; 5] inWorld (in world); 6] chronological; 7] biological; 8] psychological; 9] functional
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## supplies a numeric code representing the age or age group
@@ -5988,7 +6032,7 @@ teibirth =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] caesarean (caesarean section); 2] vaginal (vaginal delivery); 3] exNihilo (ex nihilo); 4] incorporated; 5] founded; 6] established
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -6007,7 +6051,7 @@ teideath =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] proclaimed; 2] assumed; 3] verified; 4] clinical; 5] brain; 6] natural; 7] unnatural; 8] fragmentation; 9] dissolution
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -6025,7 +6069,7 @@ teieducation =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] primary; 2] secondary; 3] undergraduate; 4] graduate; 5] residency; 6] apprenticeship
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -6073,7 +6117,7 @@ teifaith =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] practicing; 2] clandestine; 3] patrilineal; 4] matrilineal; 5] convert
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -6181,7 +6225,7 @@ teioccupation =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] primary; 2] other; 3] paid; 4] unpaid
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     [
       a:documentation [
@@ -6226,7 +6270,7 @@ teiorg =
     ## specifies a primary role or classification for the organization.
     attribute role {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     empty
@@ -6256,20 +6300,20 @@ teiperson =
     ## specifies a primary role or classification for the person.
     attribute role {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     
     ## specifies the sex of the person.
     attribute sex {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     
     ## specifies an age group for the person.
     attribute age {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -6285,20 +6329,20 @@ teipersona =
     ## specifies a primary role or classification for the persona.
     attribute role {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     
     ## specifies the sex of the persona.
     attribute sex {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     
     ## specifies an age group for the persona.
     attribute age {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -6312,25 +6356,25 @@ teipersonGrp =
     
     ## specifies the role of this group of participants in the interaction.
     attribute role {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## specifies the sex of the participant group.
     attribute sex {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     
     ## specifies the age group of the participants.
     attribute age {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## describes informally the size or approximate size of the group for example by means of a number and an indication of accuracy e.g. approx 200.
     attribute size {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     empty
@@ -6364,7 +6408,7 @@ teirelation =
     (teidesc?)
     >> sch:pattern [
          id =
-           "tei_blotius_odd-relation-reforkeyorname-constraint-assert-12"
+           "tei_blotius_odd-relation-reforkeyorname-constraint-assert-13"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -6428,7 +6472,7 @@ teirelation =
     
     ## supplies a name for the kind of relationship of which this is an instance.
     attribute name {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     (
      ## identifies the active participants in a non-mutual relationship, or all the participants in a mutual one.
@@ -6461,7 +6505,7 @@ teiresidence =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] primary; 2] secondary; 3] temporary; 4] permanent
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -6478,13 +6522,13 @@ teisex =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] explicit; 2] implicit
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## supplies a coded value for sex
     attribute value {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     empty
@@ -6503,7 +6547,7 @@ teisocecStatus =
     ## characterizes the element in some sense, using any convenient classification scheme or typology.
     ## Beispielwerte sind etwa: 1] atBirth; 2] atDeath; 3] dependent; 4] inherited; 5] independent
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     [
       a:documentation [
@@ -6744,7 +6788,7 @@ teiatt.coordinated.attribute.lry =
   }?
 teiatt.coordinated.attribute.points =
   
-  ## identifies a two dimensional area within the bounding box specified by the other attributes by means of a series of pairs of numbers, each of which gives the x,y coordinates of a point on a line enclosing the area.
+  ## identifies a two dimensional area by means of a series of pairs of numbers, each of which gives the x,y coordinates of a point on a line enclosing the area.
   attribute points {
     list {
       xsd:token {
@@ -6799,7 +6843,7 @@ teisurface =
     ## describes the method by which this surface is or was connected to the main surface
     ## Beispielwerte sind etwa: 1] glued; 2] pinned; 3] sewn
     attribute attachment {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## indicates whether the surface is attached and folded in such a way as to provide two writing surfaces
@@ -6826,6 +6870,7 @@ teizone =
   ]
   element zone {
     (text
+     | teimodel.gLike
      | teimodel.graphicLike
      | teimodel.global
      | teisurface
@@ -6956,7 +7001,7 @@ teiaddSpan =
   element addSpan {
     empty
     >> sch:pattern [
-         id = "tei_blotius_odd-addSpan-spanTo-constraint-assert-13"
+         id = "tei_blotius_odd-addSpan-spanTo-constraint-assert-14"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -6976,7 +7021,7 @@ teiaddSpan =
          "         "
        ]
     >> sch:pattern [
-         id = "tei_blotius_odd-addSpan-spanTo_fr-constraint-assert-14"
+         id = "tei_blotius_odd-addSpan-spanTo_fr-constraint-assert-15"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7017,7 +7062,7 @@ teidamageSpan =
   element damageSpan {
     empty
     >> sch:pattern [
-         id = "tei_blotius_odd-damageSpan-spanTo-constraint-assert-15"
+         id = "tei_blotius_odd-damageSpan-spanTo-constraint-assert-16"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7039,7 +7084,7 @@ teidamageSpan =
        ]
     >> sch:pattern [
          id =
-           "tei_blotius_odd-damageSpan-spanTo_fr-constraint-assert-16"
+           "tei_blotius_odd-damageSpan-spanTo_fr-constraint-assert-17"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7068,7 +7113,7 @@ teidelSpan =
   element delSpan {
     empty
     >> sch:pattern [
-         id = "tei_blotius_odd-delSpan-spanTo-constraint-assert-17"
+         id = "tei_blotius_odd-delSpan-spanTo-constraint-assert-18"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7088,7 +7133,7 @@ teidelSpan =
          "         "
        ]
     >> sch:pattern [
-         id = "tei_blotius_odd-delSpan-spanTo_fr-constraint-assert-18"
+         id = "tei_blotius_odd-delSpan-spanTo_fr-constraint-assert-19"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7128,13 +7173,13 @@ teifw =
   element fw {
     teimacro.phraseSeq,
     teiatt.global.attributes,
+    teiatt.typed.attribute.subtype,
     teiatt.placement.attributes,
     teiatt.written.attributes,
     
     ## classifies the material encoded according to some useful typology.
-    ## Beispielwerte sind etwa: 1] header; 2] footer; 3] pageNum (page number); 4] lineNum (line number); 5] sig (signature); 6] catch (catchword)
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -7236,7 +7281,7 @@ teisubst =
     ((teiadd | teidel | teimodel.milestoneLike)+)
     >> sch:pattern [
          id =
-           "tei_blotius_odd-subst-substContents1-constraint-assert-19"
+           "tei_blotius_odd-subst-substContents1-constraint-assert-20"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7284,7 +7329,7 @@ teisupplied =
     ## one or more words indicating why the text has had to be supplied, e.g. overbinding, faded-ink, lost-folio, omitted-in-original.
     attribute reason {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     empty
@@ -7301,7 +7346,7 @@ teisurplus =
     ## one or more words indicating why this text is believed to be superfluous, e.g. repeated, interpolated etc.
     attribute reason {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     empty
@@ -7318,7 +7363,7 @@ teisecl =
     ## one or more words indicating why this text has been secluded, e.g. interpolated etc.
     attribute reason {
       list {
-        xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }+
+        xsd:token { pattern = "[^\p{C}\p{Z}]+" }+
       }
     }?,
     empty
@@ -7351,7 +7396,7 @@ teimetamark =
     
     ## describes the function (for example status, insertion, deletion, transposition) of the metamark.
     attribute function {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## identifies one or more elements to which the metamark applies.
@@ -7437,7 +7482,7 @@ teiatt.tableDecoration.attribute.role =
     | 
       ## data values.
       "data"
-    | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+    | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
   }?
 teiatt.tableDecoration.attribute.rows =
   
@@ -7527,7 +7572,7 @@ teiatt.msClass.attribute.class =
   }?
 teimsDesc =
   
-  ## (manuscript description) contains a description of a single identifiable manuscript or other text-bearing object. [10.1. Overview]
+  ## (manuscript description) contains a description of a single identifiable manuscript or other text-bearing object such as early printed books. [10.1. Overview]
   element msDesc {
     (teimsIdentifier,
      teimodel.headLike*,
@@ -7551,7 +7596,7 @@ teicatchwords =
     teimacro.phraseSeq
     >> sch:pattern [
          id =
-           "tei_blotius_odd-catchwords-catchword_in_msDesc-constraint-assert-20"
+           "tei_blotius_odd-catchwords-catchword_in_msDesc-constraint-assert-21"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7596,19 +7641,6 @@ teidimensions =
              "      "
            ]
            "\x{a}" ~
-           "            "
-         ]
-         "\x{a}" ~
-         "         "
-       ]
-    >> sch:pattern [
-         id =
-           "tei_blotius_odd-dimensions-duplicateDim-constraint-report-22"
-         "\x{a}" ~
-         "            "
-         sch:rule [
-           context = "tei:dimensions"
-           "\x{a}" ~
            "               "
            sch:report [
              test = "count(tei:height)> 1"
@@ -7619,19 +7651,6 @@ teidimensions =
              "      "
            ]
            "\x{a}" ~
-           "            "
-         ]
-         "\x{a}" ~
-         "         "
-       ]
-    >> sch:pattern [
-         id =
-           "tei_blotius_odd-dimensions-duplicateDim-constraint-report-23"
-         "\x{a}" ~
-         "            "
-         sch:rule [
-           context = "tei:dimensions"
-           "\x{a}" ~
            "               "
            sch:report [
              test = "count(tei:depth)> 1"
@@ -7649,11 +7668,11 @@ teidimensions =
        ],
     teiatt.global.attributes,
     teiatt.dimensions.attributes,
+    teiatt.typed.attribute.subtype,
     
     ## indicates which aspect of the object is being measured.
-    ## Beispielwerte sind etwa: 1] leaves; 2] ruled; 3] pricked; 4] written; 5] miniatures; 6] binding; 7] box
     attribute type {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -7724,12 +7743,12 @@ teilocus =
     
     ## specifies the starting point of the location in a normalized form, typically a page number.
     attribute from {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     
     ## specifies the end-point of the location in a normalized form, typically as a page number.
     attribute to {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -7798,7 +7817,7 @@ teisecFol =
     teimacro.phraseSeq
     >> sch:pattern [
          id =
-           "tei_blotius_odd-secFol-secFol_in_msDesc-constraint-assert-21"
+           "tei_blotius_odd-secFol-secFol_in_msDesc-constraint-assert-22"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7827,7 +7846,7 @@ teisignatures =
     teimacro.specialPara
     >> sch:pattern [
          id =
-           "tei_blotius_odd-signatures-signatures_in_msDesc-constraint-assert-22"
+           "tei_blotius_odd-signatures-signatures_in_msDesc-constraint-assert-23"
          "\x{a}" ~
          "            "
          sch:rule [
@@ -7907,7 +7926,7 @@ teiinstitution =
   
   ## contains the name of an organization such as a university or library, with which a manuscript or other object is identified, generally its holding institution. [10.4. The Manuscript Identifier]
   element institution {
-    teimacro.xtext,
+    teimacro.phraseSeq.limited,
     teiatt.global.attributes,
     teiatt.naming.attributes,
     empty
@@ -7916,7 +7935,7 @@ teirepository =
   
   ## contains the name of a repository within which manuscripts or other objects are stored, possibly forming part of an institution. [10.4. The Manuscript Identifier]
   element repository {
-    teimacro.xtext,
+    teimacro.phraseSeq.limited,
     teiatt.global.attributes,
     teiatt.naming.attributes,
     empty
@@ -7925,7 +7944,7 @@ teicollection =
   
   ## contains the name of a collection of manuscripts or other objects, not necessarily located within a single repository. [10.4. The Manuscript Identifier]
   element collection {
-    teimacro.xtext,
+    teimacro.phraseSeq.limited,
     teiatt.global.attributes,
     teiatt.naming.attributes,
     teiatt.typed.attributes,
@@ -8104,7 +8123,7 @@ teiobjectDesc =
     
     ## a short project-specific name identifying the physical form of the carrier, for example as a codex, roll, fragment, partial leaf, cutting etc.
     attribute form {
-      xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
@@ -8132,7 +8151,7 @@ teisupportDesc =
       | 
         ##
         "mixed"
-      | xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
+      | xsd:token { pattern = "[^\p{C}\p{Z}]+" }
     }?,
     empty
   }
diff --git a/Schema/tei_blotius_odd.odd b/Schema/tei_blotius_odd.odd
index 24ffbd8e2a51b754772df9aa70f05d8f93fbbd6b..b2f85bb5a9ea734b9e9f41d3e179a2c6ff14ca75 100644
--- a/Schema/tei_blotius_odd.odd
+++ b/Schema/tei_blotius_odd.odd
@@ -40,7 +40,7 @@
      </address>
     </publisher>
     <pubPlace ref="http://www.geonames.org/2761369/">Vienna</pubPlace>
-    <date type="lastChanged">2019-04-03</date>
+    <date type="lastChanged">2020-08-12</date>
     <availability status="free">
      <licence target="https://creativecommons.org/licenses/by-sa/4.0/">
       <p>Distributed under the Creative Commons Attribution-ShareAlike 4.0 International
@@ -113,9 +113,10 @@
      <attList>
       <attDef ident="type" mode="change">       
        <valList type="closed" mode="replace">
-        <valItem ident="blotius-number"><desc xml:lang="en">The value "blotius number" reflects the number given by Blotius to the title in the inventary.</desc></valItem>
+        <valItem ident="blotius-number"><desc xml:lang="en">The value "blotius-number" reflects the number given by Blotius to the title in the inventary.</desc></valItem>
         <valItem ident="title"><desc xml:lang="en">The value "title" reflects the title as written by Blotius.</desc></valItem>
         <valItem ident="note"><desc xml:lang="en">The value "note" is reserved for a note made by Blotius himself.</desc></valItem>
+        <valItem ident="dernschwam-number"><desc xml:lang="en" versionDate="2020-08-12">The value "dernschwam-number" reflects the number given by Hans Dernschwam to the title in his catalogue.</desc></valItem>
        </valList>
       </attDef>
       <attDef ident="ana" mode="delete"/>