From 03c774a2a367c28d25fad57949b46aa14dda5301 Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 14 Mar 2024 16:14:29 -0400 Subject: [PATCH 01/13] Address #2371 with a Schematron constraint that flags as an error any 2+ attDef elements who both share an ancestor attList and have the same ident= attribute (regardless of the mode= attr value) unless they are both (all) children of an attList that has an org= attribute value of "choice". --- P5/Source/Specs/attList.xml | 102 ++++++--- P5/Test/detest.odd | 200 ++++++++++++++++-- .../detest_odd_schematron.log | 63 +++++- .../detest_xml_schematron.log | 15 +- 4 files changed, 323 insertions(+), 57 deletions(-) diff --git a/P5/Source/Specs/attList.xml b/P5/Source/Specs/attList.xml index 06f0db90cf..6e8888afd8 100644 --- a/P5/Source/Specs/attList.xml +++ b/P5/Source/Specs/attList.xml @@ -1,32 +1,79 @@ - + attribute list liste d'attributs - contains documentation for all the attributes associated with this element, as a series of - attDef elements. + contains documentation for all the attributes associated with this element, as a series of attDef elements. 일련의 attDef 요소로서, 이 요소와 연관된 모든 속성에 대한 기록을 포함한다. 包含所有和此元素相關的屬性記錄,使用一連串的元素attDef 当該要素に関する全ての属性に関する文書を、一連の要素attDef で示す。 - contient la documentation pour tous les attributs - associés à cet élément comme une série d'éléments attDef. - contiene documentación relativa a todos los atributos - asociados con este elemento bajo forma de series de elementos attDef. - contiene la documentazione relativa agli attributi - associati all'elemento in questione sotto forma di una serie di elementi attDef + contient la documentation pour tous les attributs associés à cet élément comme une série d'éléments attDef. + contiene documentación relativa a todos los atributos asociados con este elemento bajo forma de series de elementos attDef. + contiene la documentazione relativa agli attributi associati all'elemento in questione sotto forma di una serie di elementi attDef - - - - - - - + + + + + + + Because it is illegal in XML to have two attributes with the + same name on the same element instance, it is illegal in TEI to + have two attDef elements with the same value of + ident as within a single attList, unless the + parent attList has an org of + choice. This applies regardless of mode of + each attDef with a matching ident. + + + + + + + + + + + + + Within the attribute list defined in , + the following attributes have been defined multiple times: . + + + + organization @@ -36,15 +83,11 @@ organizzazione specifies whether only one (choice) or all (group) of the attributes in the list are available 목록의 모든 속성이 이용가능하거나(org="group") 그 중 하나만 이용가능한지를 명시한다. - 標明是否列表中的全部屬性皆可使用 (org="group") 、或是僅可使用其中一個 - (org="choice")。 - リスト中の属性が全て使用できるか(org="group")、またはその1つだけ - が使用できるか(org="choice")を示す。 - précise si les attributs dans la liste sont tous - disponibles (org="group") ou seulement l'un d'entre eux (org="choice"). + 標明是否列表中的全部屬性皆可使用 (org="group") 、或是僅可使用其中一個 (org="choice")。 + リスト中の属性が全て使用できるか(org="group")、またはその1つだけ が使用できるか(org="choice")を示す。 + précise si les attributs dans la liste sont tous disponibles (org="group") ou seulement l'un d'entre eux (org="choice"). indica si solo uno (choice) o todos (group) los atributos de la lista están disponibles - indica se gli attributi contenuti nella lista sono - tutti disponibili (group) o se ne è disponibile solo uno (choice) + indica se gli attributi contenuti nella lista sono tutti disponibili (group) o se ne è disponibile solo uno (choice) group @@ -109,12 +152,15 @@ - identifies the active participants in a non-mutual relationship, or all the participants in a mutual - one. + identifies the + active participants in a non-mutual + relationship, or all the participants in a mutual one. - supplies a list of participants amongst all of whom the relationship holds equally. + supplies a list + of participants amongst all of whom the relationship holds + equally. @@ -124,4 +170,4 @@ - \ No newline at end of file + diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index ed347586ac..0a188897e2 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -8,6 +8,8 @@ Testing errors Lou Burnard + Sebastian Rhatz + Syd Bauman

Published along with TEI P5 as part of its build process test suite

@@ -17,6 +19,9 @@ + + + Add the add_missing_scheme and replace_missing_scheme tests for @@ -77,15 +82,13 @@ - - lists inside paragraphs not supported + lists inside paragraphs not supported - - multi-valued rend is not supported + multi-valued rend is not supported @@ -161,18 +164,18 @@ - - divs of type 'canon' may not be nested - - - divs of type 'canon' may not be nested within 'register' - - - divs of type 'canon' may contain only one 'canonText' - - - divs of type 'canonText' can only occur inside 'canon' - + + divs of type 'canon' may not be nested + + + divs of type 'canon' may not be nested within 'register' + + + divs of type 'canon' may contain only one 'canonText' + + + divs of type 'canonText' can only occur inside 'canon' + @@ -357,7 +360,10 @@ - another completely spurious element made up for testing purposes only + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + @@ -517,6 +523,166 @@ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are two bad attributes defined as siblings.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because, + although there are three fun attributes + defined as siblings, they are in alternation with one + another.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema.

+
+
+ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are both two my and two your + attributes defined, and although each is in an alternate + group, the two my attributes are not in + alternation with one another (nor are the two + yours).

+

Note that the Your vs your and + The vs the are not problems at all + — XML is completely case sensitive, those are different + attributes.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid due to the + two definitions of the the attribute, which + are not in alternation.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ diff --git a/P5/Test/expected-results/detest_odd_schematron.log b/P5/Test/expected-results/detest_odd_schematron.log index e5813482e5..58f69cb9ad 100644 --- a/P5/Test/expected-results/detest_odd_schematron.log +++ b/P5/Test/expected-results/detest_odd_schematron.log @@ -1,11 +1,11 @@ -Buildfile: /TEI/P5/Test/antruntest.xml +Buildfile: /home/syd/Documents/TEI_gitHub/P5/Test/antruntest.xml validateodd: [echo] Validate detest.odd as ODD ... [echo] ... against RelaxNG (../p5odds.rng) with jing ... [echo] ... against Schematron (../p5odds.message.isosch.xsl) with Saaxon via trax - [xslt] Processing /TEI/P5/Test/detest.odd to /dev/null - [xslt] Loading stylesheet /TEI/P5/p5odds.message.isosch.xsl + [xslt] Processing /home/syd/Documents/TEI_gitHub/P5/Test/detest.odd to /dev/null + [xslt] Loading stylesheet /home/syd/Documents/TEI_gitHub/P5/p5odds.message.isosch.xsl [xslt] [xslt] Error: both the versionDate and xml:lang attributes on "remarks" are required when it is a child of "elementSpec". [xslt] (@xml:lang and @versionDate) @@ -35,6 +35,61 @@ validateodd: [xslt] with the value 'schematron' on the scheme attribute (tei:constraint/sch:* and not( @scheme eq 'schematron')) [xslt] The @scheme attribute of <constraintSpec> is required when the @mode is not specified. (@scheme) [xslt] The @scheme attribute of <constraintSpec> is required when the @mode is "replace". (@scheme) + [xslt] + [xslt] Within the attribute list defined in no_duplicate_attrs_1_invalid, + [xslt] the following attributes have been defined multiple times: bad. + [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] + [xslt] Within the attribute list defined in no_duplicate_attrs_3_invalid, + [xslt] the following attributes have been defined multiple times: my your. + [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] + [xslt] Within the attribute list defined in no_duplicate_attrs_4_invalid, + [xslt] the following attributes have been defined multiple times: the. + [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @have attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @til attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @her attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @daddy attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @all attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @leaves attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @are attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @brown attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @sky attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @gray attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Since the @default-is-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] Since the @default-NOT-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] In the elementSpec defining @@ -51,4 +106,4 @@ validateodd: [xslt] values (string(tei:defaultVal) = tei:valList/tei:valItem/@ident) BUILD SUCCESSFUL -Total time: 3 seconds +Total time: 0 seconds diff --git a/P5/Test/expected-results/detest_xml_schematron.log b/P5/Test/expected-results/detest_xml_schematron.log index a7f9a9332e..4e739c296b 100644 --- a/P5/Test/expected-results/detest_xml_schematron.log +++ b/P5/Test/expected-results/detest_xml_schematron.log @@ -12,8 +12,7 @@ The element indicated by @spanTo (notMeaningful) must follow the current element @calendar indicates one or more systems or calendars to which the date represented by the content of this element belongs, but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) - - lists inside paragraphs not supported (tei:list) + lists inside paragraphs not supported (tei:list) @calendar indicates one or more systems or calendars to which the date represented by the content of this element belongs, but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) @@ -71,14 +70,14 @@ On quotation, either the @marks attribute should be used, or a paragraph of desc systems or calendars to which the date represented by the content of this element belongs, but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) - divs of type 'canon' may contain only one 'canonText' - (@type='canon' and count (tei:div[@type='canonText']) >1) + divs of type 'canon' may contain only one 'canonText' + (@type='canon' and count( tei:div[ @type eq 'canonText'] ) gt 1) - divs of type 'canon' may not be nested - (@type='canon' and parent::tei:div/@type='canon') + divs of type 'canon' may not be nested + (@type='canon' and parent::tei:div/@type='canon') - divs of type 'canon' may not be nested within 'register' - (@type='canon' and parent::tei:div/@type='register') + divs of type 'canon' may not be nested within 'register' + (@type='canon' and parent::tei:div/@type='register') You may not nest one s element within another: use seg instead (tei:s) From 220f3adf74fb318e041d6ea60c400180b05e30ad Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 14 Mar 2024 16:24:23 -0400 Subject: [PATCH 02/13] Ooops; forgot content of change log entry --- P5/Test/detest.odd | 339 +++++++++++++++++++++++---------------------- 1 file changed, 172 insertions(+), 167 deletions(-) diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index 0a188897e2..a1799a983a 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -8,8 +8,8 @@ Testing errors Lou Burnard - Sebastian Rhatz - Syd Bauman + Sebastian Rhatz + Syd Bauman

Published along with TEI P5 as part of its build process test suite

@@ -20,7 +20,12 @@ - + Add specifications for several new elements + (no_duplicate_attrs_1_invalid, + no_duplicate_attrs_2_valid, + no_duplicate_attrs_3_invalid, and + no_duplicate_attrs_4_invalid) that exercise the new + no_duplicate_attrs constraint. Add the add_missing_scheme and @@ -165,17 +170,17 @@ - divs of type 'canon' may not be nested - + divs of type 'canon' may not be nested + - divs of type 'canon' may not be nested within 'register' - + divs of type 'canon' may not be nested within 'register' + - divs of type 'canon' may contain only one 'canonText' - + divs of type 'canon' may contain only one 'canonText' + - divs of type 'canonText' can only occur inside 'canon' - + divs of type 'canonText' can only occur inside 'canon' + @@ -361,9 +366,9 @@ - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + @@ -523,166 +528,166 @@ - + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be invalid because there - are two bad attributes defined as siblings.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema, which is - a good thing, becase defining an attribute twice like - that is an error in at least RELAX NG and DTD.

-
-
+ Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are two bad attributes defined as siblings.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
- + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be valid because, - although there are three fun attributes - defined as siblings, they are in alternation with one - another.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema.

-
-
+ Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because, + although there are three fun attributes + defined as siblings, they are in alternation with one + another.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema.

+
+
- + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be invalid because there - are both two my and two your - attributes defined, and although each is in an alternate - group, the two my attributes are not in - alternation with one another (nor are the two - yours).

-

Note that the Your vs your and - The vs the are not problems at all - — XML is completely case sensitive, those are different - attributes.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema, which is - a good thing, becase defining an attribute twice like - that is an error in at least RELAX NG and DTD.

-
-
+ Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are both two my and two your + attributes defined, and although each is in an alternate + group, the two my attributes are not in + alternation with one another (nor are the two + yours).

+

Note that the Your vs your and + The vs the are not problems at all + — XML is completely case sensitive, those are different + attributes.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
- + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be invalid due to the - two definitions of the the attribute, which - are not in alternation.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema, which is - a good thing, becase defining an attribute twice like - that is an error in at least RELAX NG and DTD.

-
-
- + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid due to the + two definitions of the the attribute, which + are not in alternation.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ From 238af0359501a1b1ed3551b6bf53903a5a459742 Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Fri, 15 Mar 2024 17:51:27 -0400 Subject: [PATCH 03/13] Add namespace checking: Per suggestion @martindholmes, make sure to think of two attributes that have the same local name (i.e., ident= attribute) but different namespaces (i.e., ns= attribute); since the attList element does not have an ns= attribute, we do not have to worry about inheritance, which makes this much easier. --- P5/Source/Specs/attList.xml | 31 ++++--- P5/Test/detest.odd | 87 +++++++++++++++++++ .../detest_odd_schematron.log | 26 ++++++ 3 files changed, 132 insertions(+), 12 deletions(-) diff --git a/P5/Source/Specs/attList.xml b/P5/Source/Specs/attList.xml index 6e8888afd8..7b1d657546 100644 --- a/P5/Source/Specs/attList.xml +++ b/P5/Source/Specs/attList.xml @@ -31,6 +31,11 @@ each attDef with a matching ident. + + + value="for $ad in $defs return + if ( $ad[ + parent::tei:attList[ @org eq 'choice'] + and + preceding-sibling::tei:attDef[ + @ident eq $ad/@ident + and + ( @ns, $notanamespace )[1] eq ( $ad/@ns, $notanamespace )[1] + ] + ] + ) + then '' + else normalize-space( if ($ad/@ns) then 'Q{'||$ad/@ns||'}'||$ad/@ident else $ad/@ident ) + "/> diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index a1799a983a..66c3d516b2 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -528,6 +528,36 @@ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because + although there are two bad attributes defined + as siblings, they have different namespaces.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ Another completely spurious element made up for testing purposes only. @@ -649,6 +679,63 @@ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because although there + are both two my and two your + attributes defined that are not in alternation, they are + in different namespaces.

+

Note that the Your vs your and + The vs the are not problems at all + — XML is completely case sensitive, those are different + attributes.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ Another completely spurious element made up for testing purposes only. diff --git a/P5/Test/expected-results/detest_odd_schematron.log b/P5/Test/expected-results/detest_odd_schematron.log index 58f69cb9ad..95153d220a 100644 --- a/P5/Test/expected-results/detest_odd_schematron.log +++ b/P5/Test/expected-results/detest_odd_schematron.log @@ -47,6 +47,11 @@ validateodd: [xslt] Within the attribute list defined in no_duplicate_attrs_4_invalid, [xslt] the following attributes have been defined multiple times: the. [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) @@ -80,6 +85,27 @@ validateodd: [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @all attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @leaves attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) From c347477271735da15b00361de61880fbccffab5f Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 14 Mar 2024 16:14:29 -0400 Subject: [PATCH 04/13] Address #2371 with a Schematron constraint that flags as an error any 2+ attDef elements who both share an ancestor attList and have the same ident= attribute (regardless of the mode= attr value) unless they are both (all) children of an attList that has an org= attribute value of "choice". --- P5/Source/Specs/attList.xml | 102 ++++++++--- P5/Test/detest.odd | 173 +++++++++++++++++- .../detest_odd_schematron.log | 55 ++++++ .../detest_xml_schematron.log | 16 ++ 4 files changed, 315 insertions(+), 31 deletions(-) diff --git a/P5/Source/Specs/attList.xml b/P5/Source/Specs/attList.xml index 06f0db90cf..6e8888afd8 100644 --- a/P5/Source/Specs/attList.xml +++ b/P5/Source/Specs/attList.xml @@ -1,32 +1,79 @@ - + attribute list liste d'attributs - contains documentation for all the attributes associated with this element, as a series of - attDef elements. + contains documentation for all the attributes associated with this element, as a series of attDef elements. 일련의 attDef 요소로서, 이 요소와 연관된 모든 속성에 대한 기록을 포함한다. 包含所有和此元素相關的屬性記錄,使用一連串的元素attDef 当該要素に関する全ての属性に関する文書を、一連の要素attDef で示す。 - contient la documentation pour tous les attributs - associés à cet élément comme une série d'éléments attDef. - contiene documentación relativa a todos los atributos - asociados con este elemento bajo forma de series de elementos attDef. - contiene la documentazione relativa agli attributi - associati all'elemento in questione sotto forma di una serie di elementi attDef + contient la documentation pour tous les attributs associés à cet élément comme une série d'éléments attDef. + contiene documentación relativa a todos los atributos asociados con este elemento bajo forma de series de elementos attDef. + contiene la documentazione relativa agli attributi associati all'elemento in questione sotto forma di una serie di elementi attDef - - - - - - - + + + + + + + Because it is illegal in XML to have two attributes with the + same name on the same element instance, it is illegal in TEI to + have two attDef elements with the same value of + ident as within a single attList, unless the + parent attList has an org of + choice. This applies regardless of mode of + each attDef with a matching ident. + + + + + + + + + + + + + Within the attribute list defined in , + the following attributes have been defined multiple times: . + + + + organization @@ -36,15 +83,11 @@ organizzazione specifies whether only one (choice) or all (group) of the attributes in the list are available 목록의 모든 속성이 이용가능하거나(org="group") 그 중 하나만 이용가능한지를 명시한다. - 標明是否列表中的全部屬性皆可使用 (org="group") 、或是僅可使用其中一個 - (org="choice")。 - リスト中の属性が全て使用できるか(org="group")、またはその1つだけ - が使用できるか(org="choice")を示す。 - précise si les attributs dans la liste sont tous - disponibles (org="group") ou seulement l'un d'entre eux (org="choice"). + 標明是否列表中的全部屬性皆可使用 (org="group") 、或是僅可使用其中一個 (org="choice")。 + リスト中の属性が全て使用できるか(org="group")、またはその1つだけ が使用できるか(org="choice")を示す。 + précise si les attributs dans la liste sont tous disponibles (org="group") ou seulement l'un d'entre eux (org="choice"). indica si solo uno (choice) o todos (group) los atributos de la lista están disponibles - indica se gli attributi contenuti nella lista sono - tutti disponibili (group) o se ne è disponibile solo uno (choice) + indica se gli attributi contenuti nella lista sono tutti disponibili (group) o se ne è disponibile solo uno (choice) group @@ -109,12 +152,15 @@ - identifies the active participants in a non-mutual relationship, or all the participants in a mutual - one. + identifies the + active participants in a non-mutual + relationship, or all the participants in a mutual one. - supplies a list of participants amongst all of whom the relationship holds equally. + supplies a list + of participants amongst all of whom the relationship holds + equally. @@ -124,4 +170,4 @@ - \ No newline at end of file + diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index 02b53a0fd2..dae11cbdc2 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -8,6 +8,8 @@ Testing errors Lou Burnard + Sebastian Rhatz + Syd Bauman

Published along with TEI P5 as part of its build process test suite

@@ -17,6 +19,9 @@ + + + Add the add_missing_scheme and replace_missing_scheme tests for @@ -87,8 +92,7 @@ - - multi-valued rend is not supported + multi-valued rend is not supported @@ -362,7 +366,10 @@
- another completely spurious element made up for testing purposes only + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + @@ -535,6 +542,166 @@ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are two bad attributes defined as siblings.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because, + although there are three fun attributes + defined as siblings, they are in alternation with one + another.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema.

+
+
+ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are both two my and two your + attributes defined, and although each is in an alternate + group, the two my attributes are not in + alternation with one another (nor are the two + yours).

+

Note that the Your vs your and + The vs the are not problems at all + — XML is completely case sensitive, those are different + attributes.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid due to the + two definitions of the the attribute, which + are not in alternation.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ diff --git a/P5/Test/expected-results/detest_odd_schematron.log b/P5/Test/expected-results/detest_odd_schematron.log index f077d3bd12..10c47256e0 100644 --- a/P5/Test/expected-results/detest_odd_schematron.log +++ b/P5/Test/expected-results/detest_odd_schematron.log @@ -36,6 +36,61 @@ validateodd: [xslt] The use of an <sch:assert> or <sch:report> that does not have a context (i.e., does not have an ancestor <sch:rule> with a @context attribute) in an ISO Schematron constraint specification is deprecated, and will become invalid after 2025-03-15. (( $assertsHaveContext, $reportsHaveContext ) = false() / warning) [xslt] The @scheme attribute of <constraintSpec> is required when the @mode is not specified. (@scheme) [xslt] The @scheme attribute of <constraintSpec> is required when the @mode is "replace". (@scheme) + [xslt] + [xslt] Within the attribute list defined in no_duplicate_attrs_1_invalid, + [xslt] the following attributes have been defined multiple times: bad. + [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] + [xslt] Within the attribute list defined in no_duplicate_attrs_3_invalid, + [xslt] the following attributes have been defined multiple times: my your. + [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] + [xslt] Within the attribute list defined in no_duplicate_attrs_4_invalid, + [xslt] the following attributes have been defined multiple times: the. + [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @have attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @til attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @her attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @daddy attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @all attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @leaves attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @are attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @brown attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @sky attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @gray attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Since the @default-is-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] Since the @default-NOT-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] In the elementSpec defining diff --git a/P5/Test/expected-results/detest_xml_schematron.log b/P5/Test/expected-results/detest_xml_schematron.log index 6ecfa77abc..4e40017d04 100644 --- a/P5/Test/expected-results/detest_xml_schematron.log +++ b/P5/Test/expected-results/detest_xml_schematron.log @@ -12,6 +12,7 @@ The element indicated by @spanTo (notMeaningful) must follow the current element @calendar indicates one or more systems or calendars to which the date represented by the content of this element belongs, but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) + lists inside paragraphs not supported (tei:list) @calendar indicates one or more systems or calendars to which the date represented by the content of this element belongs, but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) @@ -70,7 +71,22 @@ An lg element must contain at least one child l, lg, or gap element. (count(desc but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) You may not nest one s element within another: use seg instead (tei:s) +<<<<<<< HEAD Only one of the attributes @target and @from may be supplied on span +======= + divs of type 'canon' may contain only one 'canonText' + (@type='canon' and count( tei:div[ @type eq 'canonText'] ) gt 1) + + divs of type 'canon' may not be nested + (@type='canon' and parent::tei:div/@type='canon') + + divs of type 'canon' may not be nested within 'register' + (@type='canon' and parent::tei:div/@type='register') +You may not nest one s element within + another: use seg instead (tei:s) + +Only one of the attributes @target and @from may be supplied on span +>>>>>>> 03c774a2a (Address #2371 with a Schematron constraint) (@from and @target) Only one of the attributes @target and @to may be supplied on span From 40a2f2e5d266a8fa88f6070bf76452229d322929 Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 14 Mar 2024 16:24:23 -0400 Subject: [PATCH 05/13] Ooops; forgot content of change log entry --- P5/Test/detest.odd | 323 +++++++++++++++++++++++---------------------- 1 file changed, 164 insertions(+), 159 deletions(-) diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index dae11cbdc2..34d33b9053 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -8,8 +8,8 @@ Testing errors Lou Burnard - Sebastian Rhatz - Syd Bauman + Sebastian Rhatz + Syd Bauman

Published along with TEI P5 as part of its build process test suite

@@ -20,7 +20,12 @@ - + Add specifications for several new elements + (no_duplicate_attrs_1_invalid, + no_duplicate_attrs_2_valid, + no_duplicate_attrs_3_invalid, and + no_duplicate_attrs_4_invalid) that exercise the new + no_duplicate_attrs constraint. Add the add_missing_scheme and @@ -367,9 +372,9 @@ - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + @@ -542,166 +547,166 @@ - + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be invalid because there - are two bad attributes defined as siblings.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema, which is - a good thing, becase defining an attribute twice like - that is an error in at least RELAX NG and DTD.

-
-
+ Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are two bad attributes defined as siblings.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
- + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be valid because, - although there are three fun attributes - defined as siblings, they are in alternation with one - another.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema.

-
-
+ Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because, + although there are three fun attributes + defined as siblings, they are in alternation with one + another.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema.

+
+
- + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be invalid because there - are both two my and two your - attributes defined, and although each is in an alternate - group, the two my attributes are not in - alternation with one another (nor are the two - yours).

-

Note that the Your vs your and - The vs the are not problems at all - — XML is completely case sensitive, those are different - attributes.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema, which is - a good thing, becase defining an attribute twice like - that is an error in at least RELAX NG and DTD.

-
-
+ Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid because there + are both two my and two your + attributes defined, and although each is in an alternate + group, the two my attributes are not in + alternation with one another (nor are the two + yours).

+

Note that the Your vs your and + The vs the are not problems at all + — XML is completely case sensitive, those are different + attributes.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
- + - Another completely spurious element made up for testing purposes only. - For information on what is being tested, see remarks. - - - - - - - - - - - - - - - - - - - - - - -

Here we are testing the Schematron that tests for duplicate - atttribute defintions, i.e. no_duplicate_attrs.

-

This attList should be invalid due to the - two definitions of the the attribute, which - are not in alternation.

-

Note that because this element is not a member of any - model class nor in any other element’s content model, it - will probably not show up in an output schema, which is - a good thing, becase defining an attribute twice like - that is an error in at least RELAX NG and DTD.

-
-
- + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be invalid due to the + two definitions of the the attribute, which + are not in alternation.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ From 1ea26bc337ab03bbd7c96a46cebd51f7b6867656 Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Fri, 15 Mar 2024 17:51:27 -0400 Subject: [PATCH 06/13] Add namespace checking: Per suggestion @martindholmes, make sure to think of two attributes that have the same local name (i.e., ident= attribute) but different namespaces (i.e., ns= attribute); since the attList element does not have an ns= attribute, we do not have to worry about inheritance, which makes this much easier. --- P5/Source/Specs/attList.xml | 31 ++++--- P5/Test/detest.odd | 87 +++++++++++++++++++ .../detest_odd_schematron.log | 26 ++++++ 3 files changed, 132 insertions(+), 12 deletions(-) diff --git a/P5/Source/Specs/attList.xml b/P5/Source/Specs/attList.xml index 6e8888afd8..7b1d657546 100644 --- a/P5/Source/Specs/attList.xml +++ b/P5/Source/Specs/attList.xml @@ -31,6 +31,11 @@ each attDef with a matching ident. + + + value="for $ad in $defs return + if ( $ad[ + parent::tei:attList[ @org eq 'choice'] + and + preceding-sibling::tei:attDef[ + @ident eq $ad/@ident + and + ( @ns, $notanamespace )[1] eq ( $ad/@ns, $notanamespace )[1] + ] + ] + ) + then '' + else normalize-space( if ($ad/@ns) then 'Q{'||$ad/@ns||'}'||$ad/@ident else $ad/@ident ) + "/> diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index 34d33b9053..dd93149b4e 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -547,6 +547,36 @@ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because + although there are two bad attributes defined + as siblings, they have different namespaces.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ Another completely spurious element made up for testing purposes only. @@ -668,6 +698,63 @@ + + + Another completely spurious element made up for testing purposes only. + For information on what is being tested, see remarks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Here we are testing the Schematron that tests for duplicate + atttribute defintions, i.e. no_duplicate_attrs.

+

This attList should be valid because although there + are both two my and two your + attributes defined that are not in alternation, they are + in different namespaces.

+

Note that the Your vs your and + The vs the are not problems at all + — XML is completely case sensitive, those are different + attributes.

+

Note that because this element is not a member of any + model class nor in any other element’s content model, it + will probably not show up in an output schema, which is + a good thing, becase defining an attribute twice like + that is an error in at least RELAX NG and DTD.

+
+
+ Another completely spurious element made up for testing purposes only. diff --git a/P5/Test/expected-results/detest_odd_schematron.log b/P5/Test/expected-results/detest_odd_schematron.log index 10c47256e0..006c6b9c69 100644 --- a/P5/Test/expected-results/detest_odd_schematron.log +++ b/P5/Test/expected-results/detest_odd_schematron.log @@ -48,6 +48,11 @@ validateodd: [xslt] Within the attribute list defined in no_duplicate_attrs_4_invalid, [xslt] the following attributes have been defined multiple times: the. [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) @@ -81,6 +86,27 @@ validateodd: [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @all attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) [xslt] Attribute: the definition of the @leaves attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) From 55d0aa49f7bbf3024364b986f4e48a5062ee872b Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Sat, 13 Apr 2024 03:08:18 -0400 Subject: [PATCH 07/13] =?UTF-8?q?Address=20@martindholmes=E2=80=99=20conce?= =?UTF-8?q?rn:=20Per=20suggestion=20@ebeshero=20use=20a=20different=20host?= =?UTF-8?q?=20for=20easter=20egg=20namespace=20URIs.=20Also=20required=20u?= =?UTF-8?q?pdate=20to=20expected=20results=20to=20match=20new=20formatting?= =?UTF-8?q?=20of=20Schematron=20msgs.=20(Not=20sure=20why=20that=20change?= =?UTF-8?q?=20wasn=E2=80=99t=20already=20present.)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- P5/Test/detest.odd | 18 +- .../detest_odd_schematron.log | 414 +++++++++++++++--- 2 files changed, 354 insertions(+), 78 deletions(-) diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index dd93149b4e..e08879125b 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -557,11 +557,11 @@ - - - - - + + + + +

Here we are testing the Schematron that tests for duplicate @@ -715,8 +715,8 @@ - - + + @@ -731,8 +731,8 @@ - - + + diff --git a/P5/Test/expected-results/detest_odd_schematron.log b/P5/Test/expected-results/detest_odd_schematron.log index 006c6b9c69..e828e2657e 100644 --- a/P5/Test/expected-results/detest_odd_schematron.log +++ b/P5/Test/expected-results/detest_odd_schematron.log @@ -48,75 +48,351 @@ validateodd: [xslt] Within the attribute list defined in no_duplicate_attrs_4_invalid, [xslt] the following attributes have been defined multiple times: the. [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @have attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @til attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @her attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @daddy attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @all attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @leaves attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @are attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @brown attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @sky attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @gray attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @good attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @better attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @best attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @good attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @better attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @best attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @have attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @fun attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @fun attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @fun attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @til attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @her attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @daddy attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Your attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @My attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @spirit attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @and attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @voice attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @in attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @one attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @combined attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @The attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Phantom attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @of attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Opera attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @is attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @there attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Inside attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @mind attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Your attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @My attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @spirit attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @and attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @voice attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @in attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @one attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @combined attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @The attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Phantom attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @of attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Opera attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @is attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @there attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Inside attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @mind attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @all attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @leaves attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @are attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @brown attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @and attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @sky attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @is attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @gray attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) [xslt] Since the @default-is-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] Since the @default-NOT-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] In the elementSpec defining From 5fabcceb4bfe1e2a24c2ac24e74745c610440def Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 14 Mar 2024 16:14:29 -0400 Subject: [PATCH 08/13] Address #2371 with a Schematron constraint that flags as an error any 2+ attDef elements who both share an ancestor attList and have the same ident= attribute (regardless of the mode= attr value) unless they are both (all) children of an attList that has an org= attribute value of "choice". --- P5/Test/expected-results/detest_xml_schematron.log | 3 --- 1 file changed, 3 deletions(-) diff --git a/P5/Test/expected-results/detest_xml_schematron.log b/P5/Test/expected-results/detest_xml_schematron.log index 4e40017d04..bf0322fdf7 100644 --- a/P5/Test/expected-results/detest_xml_schematron.log +++ b/P5/Test/expected-results/detest_xml_schematron.log @@ -71,9 +71,7 @@ An lg element must contain at least one child l, lg, or gap element. (count(desc but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) You may not nest one s element within another: use seg instead (tei:s) -<<<<<<< HEAD Only one of the attributes @target and @from may be supplied on span -======= divs of type 'canon' may contain only one 'canonText' (@type='canon' and count( tei:div[ @type eq 'canonText'] ) gt 1) @@ -86,7 +84,6 @@ You may not nest one s element within another: use seg instead (tei:s) Only one of the attributes @target and @from may be supplied on span ->>>>>>> 03c774a2a (Address #2371 with a Schematron constraint) (@from and @target) Only one of the attributes @target and @to may be supplied on span From 9abe908f417938cd63059bf57d59a6eab5a5d285 Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 14 Mar 2024 16:24:23 -0400 Subject: [PATCH 09/13] Ooops; forgot content of change log entry --- P5/Test/detest.odd | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index dd93149b4e..e08879125b 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -557,11 +557,11 @@ - - - - - + + + + +

Here we are testing the Schematron that tests for duplicate @@ -715,8 +715,8 @@ - - + + @@ -731,8 +731,8 @@ - - + + From 1e2646f1b2e5da0cc5369a0c98a2256dbb302beb Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 25 Apr 2024 15:34:31 -0400 Subject: [PATCH 10/13] Use the latest detest.odd --- P5/Test/detest.odd | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index e08879125b..3958f0d170 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -557,11 +557,19 @@ +<<<<<<< HEAD +======= + + + + + +>>>>>>> 238af0359 (Add namespace checking:)

Here we are testing the Schematron that tests for duplicate @@ -715,8 +723,13 @@ +<<<<<<< HEAD +======= + + +>>>>>>> 238af0359 (Add namespace checking:) @@ -731,8 +744,13 @@ +<<<<<<< HEAD +======= + + +>>>>>>> 238af0359 (Add namespace checking:) From f78b7667a0774aa14cf6bb307e43aa8011e0da5b Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 25 Apr 2024 15:38:50 -0400 Subject: [PATCH 11/13] Trying to force git to use the lateset detest --- P5/Test/detest.odd | 18 - .../detest_odd_schematron.log | 414 +++++++++++++++--- 2 files changed, 345 insertions(+), 87 deletions(-) diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index 3958f0d170..e08879125b 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -557,19 +557,11 @@ -<<<<<<< HEAD -======= - - - - - ->>>>>>> 238af0359 (Add namespace checking:)

Here we are testing the Schematron that tests for duplicate @@ -723,13 +715,8 @@ -<<<<<<< HEAD -======= - - ->>>>>>> 238af0359 (Add namespace checking:) @@ -744,13 +731,8 @@ -<<<<<<< HEAD -======= - - ->>>>>>> 238af0359 (Add namespace checking:) diff --git a/P5/Test/expected-results/detest_odd_schematron.log b/P5/Test/expected-results/detest_odd_schematron.log index 006c6b9c69..e828e2657e 100644 --- a/P5/Test/expected-results/detest_odd_schematron.log +++ b/P5/Test/expected-results/detest_odd_schematron.log @@ -48,75 +48,351 @@ validateodd: [xslt] Within the attribute list defined in no_duplicate_attrs_4_invalid, [xslt] the following attributes have been defined multiple times: the. [xslt] (count( $distinct_dups[ . ne ''] ) eq 0) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @good attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @better attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @best attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @bad attribute in the no_duplicate_attrs_1_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @have attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @fun attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @til attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @her attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @daddy attribute in the no_duplicate_attrs_2_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @My attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @spirit attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @voice attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @in attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @one attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @combined attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @The attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Phantom attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @of attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Opera attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @there attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @Inside attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @my attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @your attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @mind attribute in the no_duplicate_attrs_3_valid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @all attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @leaves attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @are attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @brown attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @and attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @the attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @sky attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @is attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) - [xslt] Attribute: the definition of the @gray attribute in the no_duplicate_attrs_4_invalid elementSpec should have a closed valList or a datatype (ancestor::teix:egXML[@valid='feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[@type='closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @good attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @better attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @best attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @good attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @better attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @best attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @bad attribute in the + [xslt] no_duplicate_attrs_1_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @have attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @fun attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @fun attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @fun attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @til attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @her attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @daddy attribute in the + [xslt] no_duplicate_attrs_2_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Your attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @My attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @spirit attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @and attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @voice attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @in attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @one attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @combined attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @The attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Phantom attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @of attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Opera attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @is attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @there attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Inside attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @mind attribute in the + [xslt] no_duplicate_attrs_3_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Your attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @My attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @spirit attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @and attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @voice attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @in attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @one attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @combined attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @The attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Phantom attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @of attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Opera attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @is attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @there attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @Inside attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @my attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @your attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @mind attribute in the + [xslt] no_duplicate_attrs_3_valid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @all attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @leaves attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @are attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @brown attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @and attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @the attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @sky attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @is attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) + [xslt] + [xslt] Attribute: the definition of the @gray attribute in the + [xslt] no_duplicate_attrs_4_invalid elementSpec should + [xslt] have a closed valList or a datatype + [xslt] (ancestor::teix:egXML[ @valid eq 'feasible'] or @mode eq 'change' or @mode eq 'delete' or tei:datatype or tei:valList[ @type eq 'closed']) [xslt] Since the @default-is-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] Since the @default-NOT-in-list-req attribute is required, it will always be specified. Thus the default value (of "ONE") will never be used. Either change the definition of the attribute so it is not required ("rec" or "opt"), or remove the defaultVal element. (tei:defaultVal) [xslt] In the elementSpec defining From 972db64f56963f278a1963508801a45541e565a5 Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Thu, 16 May 2024 20:11:12 -0400 Subject: [PATCH 12/13] Bug fix: Missing namespace prefix in context attribute added, and results to match --- P5/Test/detest.odd | 2 +- .../detest_xml_schematron.log | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/P5/Test/detest.odd b/P5/Test/detest.odd index e08879125b..9d86879402 100644 --- a/P5/Test/detest.odd +++ b/P5/Test/detest.odd @@ -173,7 +173,7 @@ - + divs of type 'canon' may not be nested diff --git a/P5/Test/expected-results/detest_xml_schematron.log b/P5/Test/expected-results/detest_xml_schematron.log index 836d616dba..2f6858e847 100644 --- a/P5/Test/expected-results/detest_xml_schematron.log +++ b/P5/Test/expected-results/detest_xml_schematron.log @@ -68,21 +68,18 @@ An lg element must contain at least one child l, lg, or gap element. (count(desc @calendar indicates one or more systems or calendars to which the date represented by the content of this element belongs, but this date element has no textual content. (string-length( normalize-space(.) ) gt 0) -You may not nest one s element within another: use seg instead (tei:s) - Only one of the attributes @target and @from may be supplied on span - divs of type 'canon' may contain only one 'canonText' - (@type='canon' and count( tei:div[ @type eq 'canonText'] ) gt 1) + divs of type 'canon' may contain only one 'canonText' + (@type eq 'canon' and count( tei:div[ @type eq 'canonText'] ) gt 1) - divs of type 'canon' may not be nested - (@type='canon' and parent::tei:div/@type='canon') + divs of type 'canon' may not be nested + (@type eq 'canon' and parent::tei:div/@type eq 'canon') - divs of type 'canon' may not be nested within 'register' - (@type='canon' and parent::tei:div/@type='register') -You may not nest one s element within - another: use seg instead (tei:s) + divs of type 'canon' may not be nested within 'register' + (@type eq 'canon' and parent::tei:div/@type eq 'register') +You may not nest one s element within another: use seg instead (tei:s) -Only one of the attributes @target and @from may be supplied on span + Only one of the attributes @target and @from may be supplied on span (@from and @target) Only one of the attributes @target and @to may be supplied on span From a9e64616b011bc9554c307ff4eb9bc9e3cead711 Mon Sep 17 00:00:00 2001 From: Syd Bauman Date: Fri, 21 Jun 2024 13:29:00 -0400 Subject: [PATCH 13/13] Improve wording in both description and some comments of new no_duplicate_attrs constraint; change attr names to reflect NameSpace + IDENTifier combination --- P5/Source/Specs/attList.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/P5/Source/Specs/attList.xml b/P5/Source/Specs/attList.xml index 7b1d657546..60a4fcfa9a 100644 --- a/P5/Source/Specs/attList.xml +++ b/P5/Source/Specs/attList.xml @@ -24,25 +24,25 @@ Because it is illegal in XML to have two attributes with the same name on the same element instance, it is illegal in TEI to - have two attDef elements with the same value of - ident as within a single attList, unless the - parent attList has an org of - choice. This applies regardless of mode of - each attDef with a matching ident. + have two attDef elements with the same values of + ns and ident in a single attList, + unless the parent attList has an org of + choice. This applies regardless of the mode + of each attDef. - - +