Quote indicates source.odd
Jump to navigation
Jump to search
See this post and the rest of the thread it initiated for information on what this snippet does and why. To use this, copy-and-paste only the <elementSpec> into your ODD file (making sure you have the needed namespace declarations on some ancestor thereof). Most projects probably won't need both the Schematron 1.5 constaints and the ISO Schematron constraints, so you probably want to delete the ones you're not using.
<!-- fragment of ODD (wrapped in a <schemaSpec> just to hold --> <!-- namespace declarations) that adds a cit= attribute and a --> <!-- ref= attribute to <quote> --> <!-- Copyleft 2008 Syd Bauman and the Brown University Women --> <!-- Writers Project --> <schemaSpec ident="source-references-for-quote-element" xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns:isosch="http://purl.oclc.org/dsdl/schematron" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns="http://www.tei-c.org/ns/1.0" xml:lang="en"> <!-- Add cit= and ref= to <quote> --> <elementSpec module="core" ident="quote" mode="change"> <content> <rng:ref name="macro.specialPara"/> </content> <constraintSpec scheme="schematron" ident="quotation_pointers_1.5"> <constraint> <sch:pattern name="cit-should-point-to-bibl"> <sch:rule context="quote[starts-with(@cit,'#')]"> <sch:assert test="//bibl[@xml:id=substring-after(current()/@cit,'#')]">cit= attribute of <gi><sch:name/></gi> does not point to a <gi>bibl</gi>.</sch:assert> </sch:rule> <sch:rule context="quote[contains(@cit,'#')]"> <sch:assert test="document(substring-before(@cit,'#'))//bibl[@xml:id=substring-after(current()/@cit,'#')]">cit= attribute of <gi><sch:name/></gi> does not point to a <gi>bibl</gi>.</sch:assert> </sch:rule> <sch:rule context="quote[@cit]"> <sch:report test="not(contains(@cit,'#'))">cit= attribute of <gi><sch:name/></gi> must point to particular <gi>bibl</gi> element via its xml:id=</sch:report> </sch:rule> </sch:pattern> <sch:pattern name="ref-should-point-to-biblX"> <sch:rule context="quote[starts-with(@ref,'#')]"> <sch:assert test="//*[@xml:id=substring-after(current()/@ref,'#')][starts-with(local-name(.),'bibl')]">ref= attribute of <gi><sch:name/></gi> does not point to a <gi>bibl</gi>, <gi>biblStruct</gi>, or <gi>biblFull</gi>.</sch:assert> </sch:rule> <sch:rule context="quote[contains(@ref,'#')]"> <sch:assert test="document(substring-before(@ref,'#'))//*[@xml:id=substring-after(current()/@ref,'#')][starts-with(local-name(.),'bibl')]">ref= attribute of <gi><sch:name/></gi> does not point to a <gi>bibl</gi>, <gi>biblStruct</gi>, or <gi>biblFull</gi>.</sch:assert> </sch:rule> <sch:rule context="quote[@ref]"> <sch:report test="not(contains(@ref,'#'))">ref= attribute of <gi><sch:name/></gi> must point to particular <gi>bibl</gi>, <gi>biblStruct</gi>, or <gi>biblFull</gi> element via its xml:id=</sch:report> </sch:rule> </sch:pattern> </constraint> </constraintSpec> <constraintSpec scheme="isoschematron" ident="quotation_pointers"> <constraint> <isosch:pattern> <isosch:rule context="quote[starts-with(@cit,'#')]"> <isosch:assert test="//bibl[@xml:id=substring-after(current()/@cit,'#')]">cit= attribute of <gi><isosch:name/></gi> does not point to a <gi>bibl</gi>.</isosch:assert> </isosch:rule> <isosch:rule context="quote[contains(@cit,'#')]"> <isosch:assert test="document(substring-before(@cit,'#'))//bibl[@xml:id=substring-after(current()/@cit,'#')]">cit= attribute of <gi><isosch:name/></gi> does not point to a <gi>bibl</gi>.</isosch:assert> </isosch:rule> <isosch:rule context="quote[@cit]"> <isosch:report test="not(contains(@cit,'#'))">cit= attribute of <gi><isosch:name/></gi> must point to particular <gi>bibl</gi> element via its xml:id=</isosch:report> </isosch:rule> </isosch:pattern> <isosch:pattern> <isosch:rule context="quote[starts-with(@ref,'#')]"> <isosch:assert test="//*[@xml:id=substring-after(current()/@ref,'#')][starts-with(local-name(.),'bibl')]">ref= attribute of <gi><isosch:name/></gi> does not point to a <gi>bibl</gi>, <gi>biblStruct</gi>, or <gi>biblFull</gi>.</isosch:assert> </isosch:rule> <isosch:rule context="quote[contains(@ref,'#')]"> <isosch:assert test="document(substring-before(@ref,'#'))//*[@xml:id=substring-after(current()/@ref,'#')][starts-with(local-name(.),'bibl')]">ref= attribute of <gi><isosch:name/></gi> does not point to a <gi>bibl</gi>, <gi>biblStruct</gi>, or <gi>biblFull</gi>.</isosch:assert> </isosch:rule> <isosch:rule context="quote[@ref]"> <isosch:report test="not(contains(@ref,'#'))">ref= attribute of <gi><isosch:name/></gi> must point to particular <gi>bibl</gi>, <gi>biblStruct</gi>, or <gi>biblFull</gi> element via its xml:id=</isosch:report> </isosch:rule> </isosch:pattern> </constraint> </constraintSpec> <attList> <attDef ident="cit" mode="add" usage="opt"> <gloss>prose citation reference</gloss> <desc>points to (one or more) bibliographic citation(s) for this quotation as they appear in the source</desc> <datatype minOccurs="1" maxOccurs="unbounded"> <rng:ref name="data.pointer"/> </datatype> </attDef> <attDef ident="ref" mode="add" usage="opt"> <gloss>formal citation reference</gloss> <desc>points to (one or more) complete modern bibliographic citation(s) for this quotation, typically stored in a <gi>listBibl</gi> in the project bibliography</desc> <datatype minOccurs="1" maxOccurs="unbounded"> <rng:ref name="data.pointer"/> </datatype> </attDef> </attList> </elementSpec> </schemaSpec>