XSD für briefe

This commit is contained in:
Simon Martens
2025-09-03 12:52:47 +02:00
parent 4e3c455af2
commit db68316346
3 changed files with 362 additions and 1 deletions

View File

@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<opus> <document>
<opus xmlns="https://lenz-archiv.de"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://lenz-archiv.de ../xsd/briefe.xsd">
<document>
<letterText letter="1">
<page index="1" /><align pos="right">HochEdelgeborner Hochgelahrter Herr <aq>Secretair</aq></align>

47
data/xsd/briefe.xsd Normal file
View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://lenz-archiv.de"
xmlns="https://lenz-archiv.de"
xmlns:lenz="https://lenz-archiv.de"
elementFormDefault="qualified">
<xs:include schemaLocation="common.xsd"></xs:include>
<xs:include schemaLocation="textelements.xsd"></xs:include>
<!-- Root Element: opus -->
<xs:element name="opus">
<xs:complexType>
<xs:sequence>
<xs:element ref="document" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Document Container -->
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element ref="letterText" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueIndexLetter">
<xs:annotation>
<xs:documentation>Pflicht: Jeder Brief hat eine eindeutige ID.</xs:documentation>
</xs:annotation>
<xs:selector xpath="lenz:letterText" />
<xs:field xpath="@letter" />
</xs:unique>
</xs:element>
<!-- Main Letter Text Element -->
<xs:element name="letterText">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="letter" type="xs:nonNegativeInteger" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>

311
data/xsd/textelements.xsd Normal file
View File

@@ -0,0 +1,311 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://lenz-archiv.de"
xmlns="https://lenz-archiv.de"
xmlns:lenz="https://lenz-archiv.de"
elementFormDefault="qualified">
<xs:include schemaLocation="common.xsd"></xs:include>
<xs:complexType name="inline" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="page" />
<xs:element ref="line" />
<xs:element ref="align" />
<xs:element ref="sidenote" />
<xs:element ref="aq" />
<xs:element ref="ul" />
<xs:element ref="address" />
<xs:element ref="insertion" />
<xs:element ref="del" />
<xs:element ref="hand" />
<xs:element ref="note" />
<xs:element ref="tl" />
<xs:element ref="dul" />
<xs:element ref="fn" />
<xs:element ref="pe" />
<xs:element ref="anchor" />
<xs:element ref="nr" />
<xs:element ref="b" />
<xs:element ref="it" />
<xs:element ref="gr" />
<xs:element ref="hb" />
<xs:element ref="subst" />
<xs:element ref="tabs" />
<xs:element ref="er" />
<xs:element ref="ink" />
<xs:element ref="ru" />
</xs:choice>
</xs:complexType>
<xs:complexType name="textbase" mixed="true">
<xs:complexContent>
<xs:extension base="inline" />
</xs:complexContent>
</xs:complexType>
<!-- Page Break -->
<xs:element name="page">
<xs:complexType>
<xs:attribute name="index" type="xs:positiveInteger" use="required" />
</xs:complexType>
</xs:element>
<!-- Aligned Text Block -->
<xs:element name="align">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="pos" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="left" />
<xs:enumeration value="center" />
<xs:enumeration value="right" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<!-- Line Element (various types) -->
<xs:element name="line">
<xs:complexType>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="break" />
<xs:enumeration value="empty" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="tab" type="xs:positiveInteger" use="optional" />
<xs:attribute name="index" type="xs:positiveInteger" use="optional" />
</xs:complexType>
</xs:element>
<!-- Sidenote / Marginalia -->
<xs:element name="sidenote">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="pos" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="left" />
<xs:enumeration value="right" />
<xs:enumeration value="top" />
<xs:enumeration value="bottom" />
<xs:enumeration value="top right" />
<xs:enumeration value="top left" />
<xs:enumeration value="bottom right" />
<xs:enumeration value="bottom left" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="page" type="xs:positiveInteger" use="required" />
<xs:attribute name="annotation" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="insertion">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="pos" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="left" />
<xs:enumeration value="right" />
<xs:enumeration value="top" />
<xs:enumeration value="bottom" />
<xs:enumeration value="top right" />
<xs:enumeration value="top left" />
<xs:enumeration value="bottom right" />
<xs:enumeration value="bottom left" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="annotation" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="fn">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="index" type="xs:positiveInteger" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="hand">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="ref" type="xs:positiveInteger" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ink">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="ref" type="xs:positiveInteger" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="nr">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="extent" type="xs:positiveInteger" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="tabs">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="lenz:tab" minOccurs="1" maxOccurs="unbounded" />
<xs:element ref="lenz:line" />
<xs:element ref="lenz:page" />
<xs:element ref="lenz:note" />
</xs:choice>
<xs:attribute name="extent" type="xs:positiveInteger" use="optional" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="tab">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="lenz:textbase">
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="1-2" />
<xs:enumeration value="2-2" />
<xs:enumeration value="1-3" />
<xs:enumeration value="2-3" />
<xs:enumeration value="3-3" />
<xs:enumeration value="1-4" />
<xs:enumeration value="2-4" />
<xs:enumeration value="3-4" />
<xs:enumeration value="4-4" />
<xs:enumeration value="1-5" />
<xs:enumeration value="2-5" />
<xs:enumeration value="3-5" />
<xs:enumeration value="4-5" />
<xs:enumeration value="5-5" />
<xs:enumeration value="1-6" />
<xs:enumeration value="2-6" />
<xs:enumeration value="3-6" />
<xs:enumeration value="4-6" />
<xs:enumeration value="5-6" />
<xs:enumeration value="6-6" />
<xs:enumeration value="1-7" />
<xs:enumeration value="2-7" />
<xs:enumeration value="3-7" />
<xs:enumeration value="4-7" />
<xs:enumeration value="5-7" />
<xs:enumeration value="6-7" />
<xs:enumeration value="7-7" />
<xs:enumeration value="1-8" />
<xs:enumeration value="2-8" />
<xs:enumeration value="3-8" />
<xs:enumeration value="4-8" />
<xs:enumeration value="5-8" />
<xs:enumeration value="6-8" />
<xs:enumeration value="7-8" />
<xs:enumeration value="8-8" />
<xs:enumeration value="1-9" />
<xs:enumeration value="2-9" />
<xs:enumeration value="3-9" />
<xs:enumeration value="4-9" />
<xs:enumeration value="5-9" />
<xs:enumeration value="6-9" />
<xs:enumeration value="7-9" />
<xs:enumeration value="8-9" />
<xs:enumeration value="9-9" />
<xs:enumeration value="1-10" />
<xs:enumeration value="2-10" />
<xs:enumeration value="3-10" />
<xs:enumeration value="4-10" />
<xs:enumeration value="5-10" />
<xs:enumeration value="6-10" />
<xs:enumeration value="7-10" />
<xs:enumeration value="8-10" />
<xs:enumeration value="9-10" />
<xs:enumeration value="10-10" />
<xs:enumeration value="1-11" />
<xs:enumeration value="2-11" />
<xs:enumeration value="3-11" />
<xs:enumeration value="4-11" />
<xs:enumeration value="5-11" />
<xs:enumeration value="6-11" />
<xs:enumeration value="7-11" />
<xs:enumeration value="8-11" />
<xs:enumeration value="9-11" />
<xs:enumeration value="10-11" />
<xs:enumeration value="11-11" />
<xs:enumeration value="1-12" />
<xs:enumeration value="2-12" />
<xs:enumeration value="3-12" />
<xs:enumeration value="4-12" />
<xs:enumeration value="5-12" />
<xs:enumeration value="6-12" />
<xs:enumeration value="7-12" />
<xs:enumeration value="8-12" />
<xs:enumeration value="9-12" />
<xs:enumeration value="10-12" />
<xs:enumeration value="11-12" />
<xs:enumeration value="12-12" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="subst">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="lenz:del" minOccurs="1" maxOccurs="unbounded" />
<xs:element ref="lenz:insertion" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="aq" type="lenz:textbase" />
<xs:element name="ul" type="lenz:textbase" />
<xs:element name="address" type="lenz:textbase" />
<xs:element name="del" type="lenz:textbase" />
<xs:element name="note" type="lenz:textbase" />
<xs:element name="tl" type="lenz:textbase" />
<xs:element name="b" type="lenz:textbase" />
<xs:element name="it" type="lenz:textbase" />
<xs:element name="er" type="lenz:textbase" />
<xs:element name="dul" type="lenz:textbase" />
<xs:element name="pe" type="lenz:textbase" />
<xs:element name="anchor" type="lenz:textbase" />
<xs:element name="gr" type="lenz:textbase" />
<xs:element name="hb" type="lenz:textbase" />
<xs:element name="ru" type="lenz:textbase" />
</xs:schema>