diff --git a/schema/edxml.rng b/schema/edxml.rng index 74b3030095cbee7fb18866208223eb7393c56c46..a769b09582c03b007f4844ec8bb6e76d584260ee 100644 --- a/schema/edxml.rng +++ b/schema/edxml.rng @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" +<grammar xmlns="http://relaxng.org/ns/structure/1.0" + xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:tei="http://www.tei-c.org/ns/1.0" - datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://sub.uni-goettingen.de/edxml#"> + datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" + ns="http://sub.uni-goettingen.de/edxml#"> <sch:ns prefix="edxml" uri="http://sub.uni-goettingen.de/edxml#"/> <sch:ns prefix="tei" uri="http://www.tei-c.org/ns/1.0"/> @@ -29,11 +31,13 @@ </list> <sch:pattern> <sch:rule context="@corresp"> - <sch:let name="ids" value="for $id in tokenize(., ' ') return substring-after($id, '#')"/> + <sch:let name="ids" + value="for $id in tokenize(., ' ') return substring-after($id, '#')"/> <sch:let name="wrong-ids" value="for $id in $ids return (if ( not(//*[@xml:id = $id]) ) then ($id) else () )"/> - <sch:assert test="empty($wrong-ids)" role="error"> - (ID existiert nicht) Die in @corresp angegebene ID (<sch:value-of select="$wrong-ids"/>) existiert in diesem Dokument nicht! Beachte bitte auch, dass "#" davor gesetzt ist! + <sch:assert test="empty($wrong-ids)" role="error"> (ID existiert nicht) Die in + @corresp angegebene ID (<sch:value-of select="$wrong-ids"/>) existiert in + diesem Dokument nicht! Beachte bitte auch, dass "#" davor gesetzt ist! </sch:assert> </sch:rule> </sch:pattern> @@ -42,13 +46,14 @@ <define name="attr.lemma"> <attribute name="lemma"> - + <sch:pattern> - + <sch:rule context="@lemma[count(tokenize(., ':')) < 2]"> - <sch:report test=".">Du hast keinen Eintrag aus einem Lemmakatalog verknüpft!</sch:report> + <sch:report test=".">Du hast keinen Eintrag aus einem Lemmakatalog + verknüpft!</sch:report> </sch:rule> - + <!--<sch:rule context="@lemma[count(tokenize(., ':')) = 2]"> <sch:let name="fname" value="tokenize(base-uri(), '/')[last()]"/> <sch:let name="rel-dir" value="substring-before(base-uri(), $fname)"/> @@ -113,13 +118,13 @@ <data type="ID"/> </attribute> </define> - + <define name="attr.xml.base"> <attribute name="xml:base"> <data type="anyURI"/> </attribute> </define> - + <define name="attr.xml.lang"> <attribute name="xml:lang"/> </define> @@ -132,7 +137,7 @@ <element name="ana"> <interleave> <zeroOrMore> - <ref name="elem.term"/> + <ref name="elem.term"/> </zeroOrMore> <text/> </interleave> @@ -207,8 +212,8 @@ <text/> </element> </define> - - + + <define name="elem.div"> <element name="div"> @@ -235,7 +240,7 @@ </choice> </element> </define> - + <define name="elem.encodingDesc"> <element name="encodingDesc"> <optional> @@ -243,7 +248,7 @@ </optional> </element> </define> - + <define name="elem.externalResources"> <element name="externalResources"> <interleave> @@ -294,7 +299,8 @@ <define name="elem.g"> <element name="g"> - <a:documentation xml:lang="de">(Zeichen oder Glyphe) repräsentiert eine Glyphe oder ein Zeichen.</a:documentation> + <a:documentation xml:lang="de">(Zeichen oder Glyphe) repräsentiert eine Glyphe oder ein + Zeichen.</a:documentation> <optional> <ref name="attr.xml.id"/> </optional> @@ -380,11 +386,13 @@ <ref name="model.poetology.annotation"/> <sch:pattern> <sch:rule context="edxml:kolon/@units"> - <sch:let name="ids" value="for $id in tokenize(., ' ') return substring-after($id, '#')"/> + <sch:let name="ids" + value="for $id in tokenize(., ' ') return substring-after($id, '#')"/> <sch:let name="wrong-ids" value="for $id in $ids return (if ( not(//edxml:unit[@xml:id = $id][ancestor::edxml:philology]) ) then ($id) else () )"/> - <sch:assert test="empty($wrong-ids)" role="error">(Falsche ID) In @units eines Kolon dürfen nur IDs von Philology Units stehen - (<sch:value-of select="$wrong-ids"/>)!</sch:assert> + <sch:assert test="empty($wrong-ids)" role="error">(Falsche ID) In @units eines + Kolon dürfen nur IDs von Philology Units stehen (<sch:value-of + select="$wrong-ids"/>)!</sch:assert> </sch:rule> </sch:pattern> </element> @@ -445,9 +453,10 @@ <sch:pattern> <sch:rule context="edxml:metamark/@rend"> <sch:let name="renditions" value="//edxml:rendition"/> - <sch:assert test=". = ($renditions/@xml:id, 'line', 'doubleLine')" role="error"> - (Hervorhebung nicht definiert) Die Hervorhebung "<sch:value-of select="data(.)"/>" ist nicht im Header (encodingDesc/tagsDecl/rendition) definiert! - </sch:assert> + <sch:assert test=". = ($renditions/@xml:id, 'line', 'doubleLine')" + role="error"> (Hervorhebung nicht definiert) Die Hervorhebung + "<sch:value-of select="data(.)"/>" ist nicht im Header + (encodingDesc/tagsDecl/rendition) definiert! </sch:assert> </sch:rule> </sch:pattern> </attribute> @@ -459,7 +468,7 @@ <element name="motif"> <interleave> <zeroOrMore> - <ref name="elem.term"/> + <ref name="elem.term"/> </zeroOrMore> <text/> </interleave> @@ -484,33 +493,48 @@ <optional> <attribute name="type"> <list> - <choice> - <value>con</value> - <a:documentation>Inhalt</a:documentation> - <value>gr</value> - <a:documentation>Grammatik</a:documentation> - <value>lx</value> - <a:documentation>Lexik</a:documentation> - <value>rek</value> - <a:documentation>Rekonstruktion</a:documentation> - <value>str</value> - <a:documentation>Struktur</a:documentation> - </choice> + <oneOrMore> + <choice> + <value>con</value> + <a:documentation>Inhalt</a:documentation> + <value>gr</value> + <a:documentation>Grammatik</a:documentation> + <value>lx</value> + <a:documentation>Lexik</a:documentation> + <value>poet</value> + <a:documentation>Poetologie</a:documentation> + <value>rek</value> + <a:documentation>Rekonstruktion</a:documentation> + </choice> + </oneOrMore> </list> </attribute> </optional> <interleave> + <!-- MFZ, 2024-04-05: Eigentlich könnten wir ja alles außer elem.hi, elem.p, elem.quote, elem.ugarit und elem.meta.bibl aus dieser Liste rausnehmen, oder?! --> + <zeroOrMore> + <ref name="model.transcriptional"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.ana"/> + </zeroOrMore> <zeroOrMore> <ref name="elem.hi"/> </zeroOrMore> <zeroOrMore> - <ref name="elem.w"/> + <ref name="elem.p"/> </zeroOrMore> <zeroOrMore> <ref name="elem.phr"/> </zeroOrMore> <zeroOrMore> - <ref name="model.transcriptional"/> + <ref name="elem.quote"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.ugarit"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.w"/> </zeroOrMore> <zeroOrMore> <ref name="elem.meta.bibl"/> @@ -518,9 +542,10 @@ <text/> </interleave> <sch:pattern> - <sch:rule context="edxml:note[not(ancestor::edxml:structure[@type='poetological'] or ancestor::edxml:surface)]"> - <sch:assert test="@target" role="warn">Diese Anmerkung ist nicht an ein Element angebunden (sprich: Sie bezieht sich auf - Nichts)!</sch:assert> + <sch:rule + context="edxml:note[not(ancestor::edxml:structure[@type='poetological'] or ancestor::edxml:surface)]"> + <sch:assert test="@target" role="warn">Diese Anmerkung ist nicht an ein Element + angebunden (sprich: Sie bezieht sich auf Nichts)!</sch:assert> </sch:rule> </sch:pattern> </element> @@ -587,6 +612,67 @@ </element> </define> + <define name="elem.phr"> + <element name="phr"> + <optional> + <ref name="attr.xml.id"/> + </optional> + <optional> + <ref name="attr.ana"/> + </optional> + <interleave> + <zeroOrMore> + <ref name="elem.phr"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.lb"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.w"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.pc"/> + </zeroOrMore> + <zeroOrMore> + <ref name="model.transcriptional"/> + </zeroOrMore> + <text/> + </interleave> + </element> + </define> + + <define name="elem.quote"> + <element name="quote"> + <interleave> + <zeroOrMore> + <ref name="model.transcriptional"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.hi"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.lb"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.phr"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.quote"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.ugarit"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.w"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.meta.bibl"/> + </zeroOrMore> + <text/> + </interleave> + </element> + </define> + <define name="elem.relations"> <element name="relations"> <element name="head"> @@ -606,8 +692,9 @@ <sch:pattern> <sch:rule context="edxml:relation/@source"> <sch:let name="id" value="substring-after(., '#')"/> - <sch:assert test="//*[@xml:id = $id]" role="error">(ID '<sch:value-of select="$id"/>' gibt's nicht!): Die ID in @<sch:name/> - gibt es in diesem Dokument nicht!</sch:assert> + <sch:assert test="//*[@xml:id = $id]" role="error">(ID '<sch:value-of + select="$id"/>' gibt's nicht!): Die ID in @<sch:name/> gibt es in + diesem Dokument nicht!</sch:assert> </sch:rule> </sch:pattern> </attribute> @@ -616,8 +703,9 @@ <sch:pattern> <sch:rule context="edxml:relation/@target"> <sch:let name="id" value="substring-after(., '#')"/> - <sch:assert test="//*[@xml:id = $id]" role="error">(ID '<sch:value-of select="$id"/>' gibt's nicht!): Die ID in @<sch:name/> - gibt es in diesem Dokument nicht!</sch:assert> + <sch:assert test="//*[@xml:id = $id]" role="error">(ID '<sch:value-of + select="$id"/>' gibt's nicht!): Die ID in @<sch:name/> gibt es in + diesem Dokument nicht!</sch:assert> </sch:rule> </sch:pattern> </attribute> @@ -625,6 +713,8 @@ </element> </define> + + <define name="elem.ref"> <element name="ref"> <attribute name="target"/> @@ -632,35 +722,6 @@ </element> </define> - <define name="elem.phr"> - <element name="phr"> - <optional> - <ref name="attr.xml.id"/> - </optional> - <optional> - <ref name="attr.ana"/> - </optional> - <interleave> - <zeroOrMore> - <ref name="elem.phr"/> - </zeroOrMore> - <zeroOrMore> - <ref name="elem.lb"/> - </zeroOrMore> - <zeroOrMore> - <ref name="elem.w"/> - </zeroOrMore> - <zeroOrMore> - <ref name="elem.pc"/> - </zeroOrMore> - <zeroOrMore> - <ref name="model.transcriptional"/> - </zeroOrMore> - <text/> - </interleave> - </element> - </define> - <define name="elem.rendition"> <element name="rendition"> <ref name="attr.xml.id"/> @@ -668,9 +729,9 @@ <attribute name="scheme"/> </optional> <text/> - </element> + </element> </define> - + <define name="elem.revisionDesc"> <element name="revisionDesc"> <oneOrMore> @@ -681,7 +742,8 @@ <define name="elem.seg"> <element name="seg"> - <a:documentation xml:lang="de">(Segment) repräsentiert ein Segment (z.B. eine Zeichengruppe).</a:documentation> + <a:documentation xml:lang="de">(Segment) repräsentiert ein Segment (z.B. eine + Zeichengruppe).</a:documentation> <optional> <ref name="attr.xml.id"/> </optional> @@ -720,8 +782,8 @@ <ref name="elem.units"/> <sch:pattern> <sch:rule context="edxml:stanza/edxml:units/element()"> - <sch:report test="not(./local-name() = ('verse', 'choice'))" role="error">(Vers): In Strophen können nur Verse - stehen!</sch:report> + <sch:report test="not(./local-name() = ('verse', 'choice'))" role="error" + >(Vers): In Strophen können nur Verse stehen!</sch:report> </sch:rule> </sch:pattern> </element> @@ -747,7 +809,7 @@ </optional> <interleave> <zeroOrMore> - <ref name="elem.term"/> + <ref name="elem.term"/> </zeroOrMore> <text/> </interleave> @@ -792,7 +854,7 @@ </optional> </element> </define> - + <define name="elem.tagsDecl"> <element name="tagsDecl"> <zeroOrMore> @@ -800,7 +862,7 @@ </zeroOrMore> </element> </define> - + <define name="elem.term"> <element name="term"> <optional> @@ -848,6 +910,32 @@ </element> </define> + <define name="elem.ugarit"> + <element name="ugarit"> + <interleave> + <zeroOrMore> + <ref name="model.transcriptional"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.hi"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.lb"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.phr"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.w"/> + </zeroOrMore> + <zeroOrMore> + <ref name="elem.meta.bibl"/> + </zeroOrMore> + <text/> + </interleave> + </element> + </define> + <define name="elem.unit"> <element name="unit"> <ref name="attr.xml.id"/> @@ -870,11 +958,13 @@ </choice> <sch:pattern> <sch:rule context="edxml:philology//edxml:unit/@corresp"> - <sch:let name="ids" value="for $id in tokenize(., ' ') return substring-after($id, '#')"/> + <sch:let name="ids" + value="for $id in tokenize(., ' ') return substring-after($id, '#')"/> <sch:let name="wrong-ids" value="for $id in $ids return (if ( not(//edxml:line[@xml:id = $id] or //*[@xml:id = $id][ancestor::edxml:line]) ) then ($id) else () )"/> - <sch:assert test="empty($wrong-ids)" role="error">(Falsche ID) In @corresp von Philology Units dürfen nur IDs aus dem facsimiles - Block stehen (<sch:value-of select="$wrong-ids"/>)!</sch:assert> + <sch:assert test="empty($wrong-ids)" role="error">(Falsche ID) In @corresp von + Philology Units dürfen nur IDs aus dem facsimiles Block stehen + (<sch:value-of select="$wrong-ids"/>)!</sch:assert> </sch:rule> </sch:pattern> </element> @@ -924,7 +1014,8 @@ <ref name="elem.units"/> <sch:pattern> <sch:rule context="edxml:verse/edxml:units/element()"> - <sch:report test="not(./local-name() = ('kolon', 'choice'))" role="error">(Kola): In Versen können nur Kola stehen!</sch:report> + <sch:report test="not(./local-name() = ('kolon', 'choice'))" role="error" + >(Kola): In Versen können nur Kola stehen!</sch:report> </sch:rule> </sch:pattern> </element> @@ -958,8 +1049,9 @@ </interleave> <sch:pattern> <sch:rule context="edxml:w"> - <sch:assert test="@xml:id or not(empty(@xml:id))" role="warning">('<sch:value-of select=".//text()"/>' hat keine ID): Jedes Wort - sollte durch eine ID (@xml:id) eindeutig identifiziert sein!</sch:assert> + <sch:assert test="@xml:id or not(empty(@xml:id))" role="warning">('<sch:value-of + select=".//text()"/>' hat keine ID): Jedes Wort sollte durch eine ID + (@xml:id) eindeutig identifiziert sein!</sch:assert> </sch:rule> </sch:pattern> </element> @@ -1072,7 +1164,7 @@ </zeroOrMore> </interleave> </define>--> - + <define name="model.include"> <optional> <ref name="attr.xml.id"/> @@ -1081,7 +1173,7 @@ <ref name="attr.xml.base"/> </optional> </define> - + <define name="model.analysis"> <interleave> <zeroOrMore> @@ -1172,7 +1264,7 @@ <ref name="elem.lb"/> </choice> </define> - + <define name="model.external-resources"> <attribute name="prefix"/> <choice> @@ -1181,7 +1273,7 @@ </choice> <text/> </define> - + <define name="model.poetology.annotation"> <interleave> <optional> @@ -1488,7 +1580,7 @@ <text/> </element> </define> - + <define name="elem.tei.choice"> <element name="tei:choice"> <interleave>