BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Springshare//LibCal//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-TIMEZONE:America/Vancouver
X-PUBLISHED-TTL:PT15M
BEGIN:VEVENT
DTSTART:20260811T223000Z
DTEND:20260812T013000Z
DTSTAMP:20260811T000000Z
SUMMARY:TEI 2026: Schematron in ODD
DESCRIPTION:Topic: “Schematron in ODD”: Using Schematron in  in TEI 
 customizaitons to constrain your TEI documents in ways that are difficult 
 or impossible to express in PureODD without .\n\nObjective: Participants 
 should leave the workshop with at least a working knowledge of the basics 
 of Schematron\,¹ XPath\,² how these are used in an ODD customization\, 
 and a list of resources for learning more. With luck\, participants (at 
 least those who arrive with a TEI customization and the desire to add some 
 difficult constraints to it) will leave with TEI ODD files that generate 
 Schematron that performs the checks they would like their project data to 
 pass. Appeal to the community: I have no idea if community members will 
 find this appealing or not. I know for sure they *should* find it very 
 appealing\, but a) most people may already know this stuff\, and b) many 
 people may not realize how important it is. That said\, I think it is 
 pretty easy to make the argument that\n\n\n	catching errors in your 
 encoding earlier is better\n	thus catching errors in your customized TEI 
 schema is a good thing\n	there are lots of errors to be caught that are 
 difficult or impossible to catch using PureODD without .\n\n\nA great 
 example of this is checking that the value of @ref attributes of  point to 
 a \, and that those of\n\n\n\nThis workshop will start with an ~½-hour 
 talk on Schematron\, what it is\, and how it fits into ODD\, followed by an 
 ~½-hour introduction to XPath (this part will be ditched if all 
 participants are already comfortable with XPath). It will then quickly 
 progress to a hands-on practice session with participants writing 
 Schematron in an ODD to solve an assigned constraint. The rest (and 
 hopefully most) of the time will be spent with participants working with 
 their own ODDs creating and applying constraints needed for their own 
 data.\n\n\n\nPrerequisites:\n\n\n	Participants should be familiar with 
 ODD\, at least in a “I download it from Roma” kinda way.\n	The more 
 XPath participants know\, the better.\n	Participants should arrive with the 
 capability to generate RELAX NG and Schematron schemas from their 
 customization ODDs. (Typically this would mean using Roma or oXygen\, but 
 TEI Garage or commandline or anything else is fine\, too. But we do not 
 want to spend class time setting folks up for generating schemas. If a 
 prospective participant is having trouble with that\, I would be willing to 
 meet (virtually) with them in early–mid July.)\n	Participants should 
 arrive with the capability to validate their TEI documents against both 
 RELAX NG and Schematron. (oXygen will do\, but any other method is fine\, 
 too — I use jing and a front-end to SchXslt2 on the commandline\, 
 myself.)\n\n\nNotes \n\n¹ That is\, the basic idea that Schematron gives 
 us the ability to select a bunch of nodes from the tree\, and for each one 
 ask “starting from this particular node\, is this XPath true?”\, and to 
 issue a message if the answer is “no”. I.e.\, \, @context\, \, \, 
 @test\, \, and . More advanced topics like phases\, abstract patterns\, and 
 diagnotics will not be covered\, or only discussed if a question comes up 
 to which they are the best answer.\n\n² That is\, the basic XPath required 
 to perform simple tree navigation in a TEI document: axis\, paths\, steps\, 
 predicates\, and some functions and operators\; and (for testing)\, the 
 concept that if an XPath returns one or more nodes it counts as true()\; if 
 it returns zero nodes it counts as false().\n\n³ You need to remove  from 
 both model classes it is in\, and add it back to the content models of  and 
  manually. In the case of  this is not particularly difficult — ( ( sic\, 
 corr) | ( corr\, sic ) | ( model.choicePart\, model.choicePart  ) ). But 
 for  you have to create *two* entire specifications for \, one for when 
 @type is "catch" and another for when it is not.\n\nThis event is in 
 partnership with SFU Library Research Commons.
LOCATION:Buchanan B210\, Buchanan
ORGANIZER;CN="Abirami Muthukumar":MAILTO:abi.muthukumar@ubc.ca
CATEGORIES:Digital Scholarship
CONTACT;CN="Abirami Muthukumar":MAILTO:abi.muthukumar@ubc.ca
STATUS:CONFIRMED
UID:LibCal-4043889
URL:https://libcal.library.ubc.ca/event/4043889
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT

END:VCALENDAR