I realize there is a whole lot of this thread I have not read (and may not get to for hours … I have 2 more meetings today), but: What's weird there is this bit: <assert test="tei:gloss[ lang('en') ]"> Surely we'd expect <assert test="tei:gloss[@xml:lang='en']">, wouldn't we? That said, I've never actually used Abstract Patterns in Schematron so I may be missing something obvious. Nothing to do with abstract pattern vs other use of XPath. The lang() function is an XPath function for testing ancestor-or-self::*/@xml:lang to see if the context item is in the given language or sublanguage of the given language. See https://www.w3.org/TR/xpath-functions-31/#func-lang. That said, IIRC we require @xml:lang on <gloss>, so just tei:gloss[starts-with( @xml:lang, 'en' )] is probably sufficient if lang() is giving trouble. ________________________________ The problem seems to be in the generated p5.isosch file, with one or more of these patterns: <pattern id="egia-elementSpec" is-a="en-gloss-if-any"> <param name="gse" value="tei:elementSpec"/> </pattern> <pattern id="egia-classSpec" is-a="en-gloss-if-any"> <param name="gse" value="tei:classSpec"/> </pattern> <pattern id="egia-dataSpec" is-a="en-gloss-if-any"> <param name="gse" value="tei:dataSpec"/> </pattern> <pattern id="egia-macroSpec" is-a="en-gloss-if-any"> <param name="gse" value="tei:macroSpec"/> </pattern> ... <pattern id="egia-attDef" is-a="en-gloss-if-any"> <param name="gse" value="tei:attDef"/> </pattern> ... <pattern id="egia-valItem" is-a="en-gloss-if-any"> <param name="gse" value="tei:valItem"/> </pattern> These patterns are used here: <pattern abstract="true" id="en-gloss-if-any"> <rule context="$gse[tei:gloss]"> <assert test="tei:gloss[ lang('en') ]">If there is any gloss inside <value-of select="name(.)"/>, there must be an English gloss.</assert> </rule> </pattern> What's weird there is this bit: <assert test="tei:gloss[ lang('en') ]"> Surely we'd expect <assert test="tei:gloss[@xml:lang='en']">, wouldn't we? That said, I've never actually used Abstract Patterns in Schematron so I may be missing something obvious.