SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Rebooting TEI Pointers
Hugh A. Cayless, NYU
Twitter: @hcayless
philomousos@gmail.com
Outline


✤   What are XPointers?

✤   Why should you care?

✤   Rebooting the TEI Pointer Guidelines

✤   Implementation and examples
What are XPointers?

✤   http://example.com/example.xml#xpath(//lb[@n='5'])




                                    {
                                              xpointer
✤   Tacked on to a URL to indicate a section inside the document.

✤   http://example.com/example.xml#anID (also an XPointer,
    technically)

✤   TEI Xpointer Schemes:
    http://www.tei-c.org/release/doc/tei-p5-doc/en/html/SA.html#SATS
TEI Pointers address:



✤   nodes (elements, attributes, or text nodes)

✤   points (conceptual locations between elements or inside text nodes)

✤   ranges (chunks of document between two points).
Why should you care?
<?xml version="1.0" encoding="UTF-8"?>
<foo type="barbecue">
 <bar>
   <baz>Here be dragons.</baz>
 </bar>
</foo>
<?xml version="1.0" encoding="UTF-8"?>
<foo type="barbecue">
 <bar>
   <baz>Here be dragons.</baz>
 </bar>
</foo>

                   I want to say something
                       about dragons...
<?xml version="1.0" encoding="UTF-8"?>
<foo type="barbecue">
 <bar>
   <baz>Here be dragons.</baz>
 </bar>
</foo>

                   I want to say something
                       about dragons...


                         <?xml version="1.0" encoding="UTF-8"?>
                         <foo type="barbecue">
                          <bar>
                            <baz>Here be <n xml:id="d1">dragons</n>.</baz>
                          </bar>
                         </foo>
<?xml version="1.0" encoding="UTF-8"?>
<foo type="barbecue">
 <bar>
   <baz>Here be dragons.</baz>
 </bar>
</foo>

                   I want to say something
                       about dragons...


                         <?xml version="1.0" encoding="UTF-8"?>
                         <foo type="barbecue">
                          <bar>
                            <baz>Here be <n xml:id="d1">dragons</n>.</baz>
                          </bar>
                         </foo>


                                                             Easy.
Rebooting TEI Pointers
what we need to do



✤   break out of the vicious cycle of apathy

✤   implementations!

✤   make the spec more detailed and clear
<?xml version="1.0" encoding="UTF-8"?>
        <foo type="barbecue">
         <bar>
start
           <p>Here be dragons.</p>
         </bar>
        </foo>            end
start




        ×
        <?xml version="1.0" encoding="UTF-8"?>
        <foo type="barbecue">
         <bar>
           <p>Here be dragons.</p>
         </bar>
        </foo>            end
#range(left(/foo),string-index(//p,10))


        <?xml version="1.0" encoding="UTF-8"?>
        <foo type="barbecue">
         <bar>
start
           <p>Here be dragons.</p>
         </bar>
        </foo>            end
#range(left(/foo),string-index(//p,10))


                <?xml version="1.0" encoding="UTF-8"?>
                <foo type="barbecue">
                 <bar>
       start
                   <p>Here be dragons.</p>
                 </bar>
                </foo>            end




("n           ", "n          ", "Here be dr")
#range(right(//lb[@n='5']),string-index(//lb[@n='5'],5)



          start



    <lb n="5"/><unclear>Ἰσ</unclear>ά<hi rend="diaeresis">ι</hi>ς
    ἁλιεύς <num value="5">ε</num>

                                                                    end
usage scenarios


✤   Including and transcluding text

    ✤   I want to import chunks of document from outside, or from
        another part of my document.

✤   Leveraging annotations or standoff markup during transformations

    ✤   I want to make standoff annotations and have their effects show up
        in the results
<div type="edition">
 <ab>
  <lb n="5"/><unclear>Ἰσ</unclear>ά<hi rend="diaeresis">ι</hi>ς ἁλιεύς <num value="5">ε</num>
 </ab>
</div>
<div type="annotations">
 <ab>
  <name ref="#name1"><ref target="#match(//lb[@n='5'],'Ἰσάις')"/></name>
 </ab>
</div>
<div type="edition">
  <ab>
   <lb n="5"/><unclear>Ἰσ</unclear>ά<hi rend="diaeresis">ι</hi>ς ἁλιεύς <num value="5">ε</num>
  </ab>
 </div>
 <div type="annotations">
  <ab>
   <name ref="#name1"><ref target="#match(//lb[@n='5'],'Ἰσάις')"/></name>
  </ab>
 </div>




5 Ἰ̣σ̣άι(¨)ς ἁλιεύς ε




                   On mouseover, we get more
                info about the person, name, etc.,
                   pulled from the annotation.
Ovid, Ibis, Merkel & Ehwald                                                      Ovid, Ibis – apparatus, Owen
<?xml version="1.0" encoding="utf-8"?>
<TEI.2><text><body><div1 type="book" n="1" org="uniform" sample="complete"><p>       <?xml version="1.0" encoding="UTF-8"?>
<pb id="p.103" />                                                                    <?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng"
                                                                                      schematypens="http://relaxng.org/ns/structure/1.0"?>
                                                                                     <TEI
<lb rend="displayNum" n="1" />                                                        xmlns="http://www.tei-c.org/ns/1.0">
 <milestone unit="alt" n="1" />Tempus ad hoc; lustris bis iam mihi quinque peractis,  <teiHeader>
<lb rend="displayNum" n="2" />Omne fuit Musae carmen inerme meae;                      <fileDesc>
<lb rend="displayNum" n="3" />Nullaque; quae possit; scriptis tot milibus, extat         <titleStmt>
<lb rend="displayNum" n="4" />Littera Nasonis sanguinolenta legi:                         <title>Ovid: Ibis – Apparatus</title>
<lb rend="displayNum" n="5" /> Nec quemquam nostri nisi me laesere libelli,              </titleStmt>
<lb rend="displayNum" n="6" />Artificis periit cum caput Arte sua.                        <publicationStmt>
<lb rend="displayNum" n="7" />Unus — et hoc ipsum est iniuria magna — perennem            <p>An experiment</p>
                                                                                         </publicationStmt>
<lb rend="displayNum" n="8" />Candoris titulum non sinit esse mei.                       <sourceDesc>
<lb rend="displayNum" n="9" />Quisquis is est, — nam nomen adhuc utcumque tacebo —        <p><bibl>S. G. Owen, <title>P. Ovidi Nasonis Tristium Libri Quinque,
<lb rend="displayNum" n="10" /> Cogit inassuetas sumere tela manus.                         Ibis, Ex Ponto Libri Quattuor, Halieutica Fragmenta, Oxford (1915)</title></bibl></p>
<lb rend="displayNum" n="11" />Ille relegatum gelidos aquilonis ad ortus                 </sourceDesc>
                                                                                       </fileDesc>
<lb rend="displayNum" n="12" />Non sinit exilio delituisse meo;                       </teiHeader>
<lb rend="displayNum" n="13" />Vulneraque inmitis requiem quaerentia vexat,           <text>
<lb rend="displayNum" n="14" />Iactat et in toto nomina nostra foro;                   <body>
<lb rend="displayNum" n="15" /> Perpetuoque mihi sociatam foedere lecti                  <div type="apparatus">
<lb rend="displayNum" n="16" />Non patitur vivi funera flere viri.                         <ab>
<lb rend="displayNum" n="17" />Cumque ego quassa meae complectar membra carinae,            <app corresp="ibis-perseus.xml#match(//lb[@n='9'],'tacebo')">
<lb rend="displayNum" n="18" />Naufragii tabulas pugnat habere mei:                           <lem>tacebo</lem>
<lb rend="displayNum" n="19" />Et qui debuerat subitas extinguere flammas,                     <rdg wit="#F #T #X">latebit</rdg>
<lb rend="displayNum" n="20" /> Hic praedam medio raptor ab igne petit.                     </app>
                                                                                            <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'Qua')">
<lb rend="displayNum" n="21" />                                                               <lem>quod</lem>
 <milestone unit="alt" n="2" />Nititur, ut profugae desint alimenta senectae.                 <rdg wit="#G">qua</rdg>
<lb rend="displayNum" n="22" />Heu! quanto est nostris dignior ipse malis!                    <rdg wit="#P">quam</rdg>
                                                                                            </app>
<pb id="p.104" />                                                                           <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'ei!')">
                                                                                              <lem wit="#P">et</lem>
<lb rend="displayNum" n="23" />Di melius; quorum longe mihi maximus ille est,                 <rdg wit="#F #H #T #V">hei</rdg>
<lb rend="displayNum" n="24" />Qui nostras inopes noluit esse vias.                           <rdg wit="#G #X #Zamoscianus">heu</rdg>
<lb rend="displayNum" n="25" /> Huic igitur meritas grates, ubicumque licebit,              </app>
<lb rend="displayNum" n="26" />Pro tam mansueto pectore semper agam.                      </ab>
<lb rend="displayNum" n="27" />Audiat hoc Pontus. faciet quoque forsitan idem,           </div>
                                                                                       </body>
<lb rend="displayNum" n="28" />Terra sit ut propior testificanda mihi.                 </text>
<lb rend="displayNum" n="29" />At tibi, calcasti qui me, violente, iacentem,         </TEI>
<lb rend="displayNum" n="30" /> Qua licet ei! misero, debitus hostis ero.
Ovid, Ibis, Merkel & Ehwald                                                      Ovid, Ibis – apparatus, Owen
<?xml version="1.0" encoding="utf-8"?>
<TEI.2><text><body><div1 type="book" n="1" org="uniform" sample="complete"><p>       <?xml version="1.0" encoding="UTF-8"?>
<pb id="p.103" />                                                                    <?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng"
                                                                                      schematypens="http://relaxng.org/ns/structure/1.0"?>
                                                                                     <TEI
<lb rend="displayNum" n="1" />                                                        xmlns="http://www.tei-c.org/ns/1.0">
 <milestone unit="alt" n="1" />Tempus ad hoc; lustris bis iam mihi quinque peractis,  <teiHeader>
<lb rend="displayNum" n="2" />Omne fuit Musae carmen inerme meae;                      <fileDesc>
<lb rend="displayNum" n="3" />Nullaque; quae possit; scriptis tot milibus, extat         <titleStmt>
<lb rend="displayNum" n="4" />Littera Nasonis sanguinolenta legi:                         <title>Ovid: Ibis – Apparatus</title>
<lb rend="displayNum" n="5" /> Nec quemquam nostri nisi me laesere libelli,              </titleStmt>
<lb rend="displayNum" n="6" />Artificis periit cum caput Arte sua.                        <publicationStmt>
<lb rend="displayNum" n="7" />Unus — et hoc ipsum est iniuria magna — perennem            <p>An experiment</p>
                                                                                         </publicationStmt>
<lb rend="displayNum" n="8" />Candoris titulum non sinit esse mei.                       <sourceDesc>
<lb rend="displayNum" n="9" />Quisquis is est, — nam nomen adhuc utcumque tacebo —        <p><bibl>S. G. Owen, <title>P. Ovidi Nasonis Tristium Libri Quinque,
<lb rend="displayNum" n="10" /> Cogit inassuetas sumere tela manus.                         Ibis, Ex Ponto Libri Quattuor, Halieutica Fragmenta, Oxford (1915)</title></bibl></p>
<lb rend="displayNum" n="11" />Ille relegatum gelidos aquilonis ad ortus                 </sourceDesc>
                                                                                       </fileDesc>
<lb rend="displayNum" n="12" />Non sinit exilio delituisse meo;                       </teiHeader>
<lb rend="displayNum" n="13" />Vulneraque inmitis requiem quaerentia vexat,           <text>
<lb rend="displayNum" n="14" />Iactat et in toto nomina nostra foro;                   <body>
<lb rend="displayNum" n="15" /> Perpetuoque mihi sociatam foedere lecti                  <div type="apparatus">
<lb rend="displayNum" n="16" />Non patitur vivi funera flere viri.                         <ab>
<lb rend="displayNum" n="17" />Cumque ego quassa meae complectar membra carinae,            <app corresp="ibis-perseus.xml#match(//lb[@n='9'],'tacebo')">
<lb rend="displayNum" n="18" />Naufragii tabulas pugnat habere mei:                           <lem>tacebo</lem>
<lb rend="displayNum" n="19" />Et qui debuerat subitas extinguere flammas,                     <rdg wit="#F #T #X">latebit</rdg>
<lb rend="displayNum" n="20" /> Hic praedam medio raptor ab igne petit.                     </app>
                                                                                            <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'Qua')">
<lb rend="displayNum" n="21" />                                                               <lem>quod</lem>
 <milestone unit="alt" n="2" />Nititur, ut profugae desint alimenta senectae.                 <rdg wit="#G">qua</rdg>
<lb rend="displayNum" n="22" />Heu! quanto est nostris dignior ipse malis!                    <rdg wit="#P">quam</rdg>
                                                                                            </app>
<pb id="p.104" />                                                                           <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'ei!')">
                                                                                              <lem wit="#P">et</lem>
<lb rend="displayNum" n="23" />Di melius; quorum longe mihi maximus ille est,                 <rdg wit="#F #H #T #V">hei</rdg>
<lb rend="displayNum" n="24" />Qui nostras inopes noluit esse vias.                           <rdg wit="#G #X #Zamoscianus">heu</rdg>
<lb rend="displayNum" n="25" /> Huic igitur meritas grates, ubicumque licebit,              </app>
<lb rend="displayNum" n="26" />Pro tam mansueto pectore semper agam.                      </ab>
<lb rend="displayNum" n="27" />Audiat hoc Pontus. faciet quoque forsitan idem,           </div>
                                                                                       </body>
<lb rend="displayNum" n="28" />Terra sit ut propior testificanda mihi.                 </text>
<lb rend="displayNum" n="29" />At tibi, calcasti qui me, violente, iacentem,         </TEI>
<lb rend="displayNum" n="30" /> Qua licet ei! misero, debitus hostis ero.
Perseus’ Ibis:
   30     Qua licet ei! misero, debitus hostis ero.
Perseus’ Ibis with Owen’s apparatus lemmata interpolated:
   30    quod licet et misero, debitus hostis ero.
Perseus’ Ibis:
    30    Qua licet ei! misero, debitus hostis ero.
Perseus’ Ibis with Owen’s apparatus lemmata interpolated:
    30    quod licet et misero, debitus hostis ero.


“Another poem, more than 600 lines long, was written by Ovid in his
exile and has come down to our own times. Its name is not on Mr.
Owen’s title-page, but under cover of this silence, it has been slipped
into the middle of the book, — medio tutissimus Ibis, as its author
himself observed, — apparently in the hope that it may escape
notice. Well, so it shall.” – A. E. Housman
Where are we now?
Where are we now?


✤   Draft spec: http://goo.gl/8YRqe
Where are we now?


✤   Draft spec: http://goo.gl/8YRqe

✤   I'm working on a reference implementation of the draft spec as it
    stands: https://github.com/hcayless/tei-pointers
    (very little there, and not yet working, but watch this space)
Where are we now?


✤   Draft spec: http://goo.gl/8YRqe

✤   I'm working on a reference implementation of the draft spec as it
    stands: https://github.com/hcayless/tei-pointers
    (very little there, and not yet working, but watch this space)

✤   This talk: http://goo.gl/4R5zo
Where are we now?


✤   Draft spec: http://goo.gl/8YRqe

✤   I'm working on a reference implementation of the draft spec as it
    stands: https://github.com/hcayless/tei-pointers
    (very little there, and not yet working, but watch this space)

✤   This talk: http://goo.gl/4R5zo

✤   Thanks!

Weitere ähnliche Inhalte

Was ist angesagt?

Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbiaDamien Seguy
 
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011John Ford
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlordsheumann
 
Testing Code and Assuring Quality
Testing Code and Assuring QualityTesting Code and Assuring Quality
Testing Code and Assuring QualityKent Cowgill
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking Sebastian Marek
 
Php web backdoor obfuscation
Php web backdoor obfuscationPhp web backdoor obfuscation
Php web backdoor obfuscationSandro Zaccarini
 
vfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsvfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsFrank Kleine
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Kang-min Liu
 
Business Rules with Brick
Business Rules with BrickBusiness Rules with Brick
Business Rules with Brickbrian d foy
 
What's New in Perl? v5.10 - v5.16
What's New in Perl?  v5.10 - v5.16What's New in Perl?  v5.10 - v5.16
What's New in Perl? v5.10 - v5.16Ricardo Signes
 
Review unknown code with static analysis Zend con 2017
Review unknown code with static analysis  Zend con 2017Review unknown code with static analysis  Zend con 2017
Review unknown code with static analysis Zend con 2017Damien Seguy
 
Code obfuscation, php shells & more
Code obfuscation, php shells & moreCode obfuscation, php shells & more
Code obfuscation, php shells & moreMattias Geniar
 
Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!Workhorse Computing
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Contextlichtkind
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation TutorialLorna Mitchell
 

Was ist angesagt? (20)

Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbia
 
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
 
Nop2
Nop2Nop2
Nop2
 
R57.Php
R57.PhpR57.Php
R57.Php
 
I, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlords
 
Testing Code and Assuring Quality
Testing Code and Assuring QualityTesting Code and Assuring Quality
Testing Code and Assuring Quality
 
Php101
Php101Php101
Php101
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking
 
Inc
IncInc
Inc
 
Synapseindia php development tutorial
Synapseindia php development tutorialSynapseindia php development tutorial
Synapseindia php development tutorial
 
Php web backdoor obfuscation
Php web backdoor obfuscationPhp web backdoor obfuscation
Php web backdoor obfuscation
 
vfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsvfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent tests
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
Business Rules with Brick
Business Rules with BrickBusiness Rules with Brick
Business Rules with Brick
 
What's New in Perl? v5.10 - v5.16
What's New in Perl?  v5.10 - v5.16What's New in Perl?  v5.10 - v5.16
What's New in Perl? v5.10 - v5.16
 
Review unknown code with static analysis Zend con 2017
Review unknown code with static analysis  Zend con 2017Review unknown code with static analysis  Zend con 2017
Review unknown code with static analysis Zend con 2017
 
Code obfuscation, php shells & more
Code obfuscation, php shells & moreCode obfuscation, php shells & more
Code obfuscation, php shells & more
 
Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!Hypers and Gathers and Takes! Oh my!
Hypers and Gathers and Takes! Oh my!
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Context
 
Zend Certification Preparation Tutorial
Zend Certification Preparation TutorialZend Certification Preparation Tutorial
Zend Certification Preparation Tutorial
 

Ähnlich wie Rebooting TEI Pointers

Interface de Voz con Rails
Interface de Voz con RailsInterface de Voz con Rails
Interface de Voz con RailsSvet Ivantchev
 
R57php 1231677414471772-2
R57php 1231677414471772-2R57php 1231677414471772-2
R57php 1231677414471772-2ady36
 
Creating a compiler in Perl 6
Creating a compiler in Perl 6Creating a compiler in Perl 6
Creating a compiler in Perl 6Andrew Shitov
 
C A S Sample Php
C A S Sample PhpC A S Sample Php
C A S Sample PhpJH Lee
 
Theme Development and Customization
Theme Development and CustomizationTheme Development and Customization
Theme Development and CustomizationAniket Pant
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottO'Reilly Media
 
Get into the FLOW with Extbase
Get into the FLOW with ExtbaseGet into the FLOW with Extbase
Get into the FLOW with ExtbaseJochen Rau
 
Erlang with Regexp Perl And Port
Erlang with Regexp Perl And PortErlang with Regexp Perl And Port
Erlang with Regexp Perl And PortKeiichi Daiba
 
Writing Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdWriting Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdRicardo Signes
 
Overpsss API / Overpass-Turbo
Overpsss API / Overpass-TurboOverpsss API / Overpass-Turbo
Overpsss API / Overpass-TurboYu-Chin Tsai
 
Stop the noise! - Introduction to the JSON:API specification in Drupal
Stop the noise! - Introduction to the JSON:API specification in DrupalStop the noise! - Introduction to the JSON:API specification in Drupal
Stop the noise! - Introduction to the JSON:API specification in DrupalBjörn Brala
 
Crafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::ExporterCrafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::ExporterRicardo Signes
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
Let's write secure drupal code!
Let's write secure drupal code!Let's write secure drupal code!
Let's write secure drupal code!Balázs Tatár
 
Hidden treasures of Ruby
Hidden treasures of RubyHidden treasures of Ruby
Hidden treasures of RubyTom Crinson
 

Ähnlich wie Rebooting TEI Pointers (20)

Interface de Voz con Rails
Interface de Voz con RailsInterface de Voz con Rails
Interface de Voz con Rails
 
R57php 1231677414471772-2
R57php 1231677414471772-2R57php 1231677414471772-2
R57php 1231677414471772-2
 
Creating a compiler in Perl 6
Creating a compiler in Perl 6Creating a compiler in Perl 6
Creating a compiler in Perl 6
 
C A S Sample Php
C A S Sample PhpC A S Sample Php
C A S Sample Php
 
Theme Development and Customization
Theme Development and CustomizationTheme Development and Customization
Theme Development and Customization
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter Scott
 
Ruby gems
Ruby gemsRuby gems
Ruby gems
 
Get into the FLOW with Extbase
Get into the FLOW with ExtbaseGet into the FLOW with Extbase
Get into the FLOW with Extbase
 
Erlang with Regexp Perl And Port
Erlang with Regexp Perl And PortErlang with Regexp Perl And Port
Erlang with Regexp Perl And Port
 
Writing Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdWriting Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::Cmd
 
Bioinformatica p4-io
Bioinformatica p4-ioBioinformatica p4-io
Bioinformatica p4-io
 
Overpsss API / Overpass-Turbo
Overpsss API / Overpass-TurboOverpsss API / Overpass-Turbo
Overpsss API / Overpass-Turbo
 
Perl basics for Pentesters
Perl basics for PentestersPerl basics for Pentesters
Perl basics for Pentesters
 
Stop the noise! - Introduction to the JSON:API specification in Drupal
Stop the noise! - Introduction to the JSON:API specification in DrupalStop the noise! - Introduction to the JSON:API specification in Drupal
Stop the noise! - Introduction to the JSON:API specification in Drupal
 
Lettering js
Lettering jsLettering js
Lettering js
 
Crafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::ExporterCrafting Custom Interfaces with Sub::Exporter
Crafting Custom Interfaces with Sub::Exporter
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
Let's write secure drupal code!
Let's write secure drupal code!Let's write secure drupal code!
Let's write secure drupal code!
 
Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01
 
Hidden treasures of Ruby
Hidden treasures of RubyHidden treasures of Ruby
Hidden treasures of Ruby
 

Rebooting TEI Pointers

  • 1. Rebooting TEI Pointers Hugh A. Cayless, NYU Twitter: @hcayless philomousos@gmail.com
  • 2. Outline ✤ What are XPointers? ✤ Why should you care? ✤ Rebooting the TEI Pointer Guidelines ✤ Implementation and examples
  • 3. What are XPointers? ✤ http://example.com/example.xml#xpath(//lb[@n='5']) { xpointer ✤ Tacked on to a URL to indicate a section inside the document. ✤ http://example.com/example.xml#anID (also an XPointer, technically) ✤ TEI Xpointer Schemes: http://www.tei-c.org/release/doc/tei-p5-doc/en/html/SA.html#SATS
  • 4. TEI Pointers address: ✤ nodes (elements, attributes, or text nodes) ✤ points (conceptual locations between elements or inside text nodes) ✤ ranges (chunks of document between two points).
  • 6. <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> <baz>Here be dragons.</baz> </bar> </foo>
  • 7. <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> <baz>Here be dragons.</baz> </bar> </foo> I want to say something about dragons...
  • 8. <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> <baz>Here be dragons.</baz> </bar> </foo> I want to say something about dragons... <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> <baz>Here be <n xml:id="d1">dragons</n>.</baz> </bar> </foo>
  • 9. <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> <baz>Here be dragons.</baz> </bar> </foo> I want to say something about dragons... <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> <baz>Here be <n xml:id="d1">dragons</n>.</baz> </bar> </foo> Easy.
  • 11. what we need to do ✤ break out of the vicious cycle of apathy ✤ implementations! ✤ make the spec more detailed and clear
  • 12. <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> start <p>Here be dragons.</p> </bar> </foo> end
  • 13. start × <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> <p>Here be dragons.</p> </bar> </foo> end
  • 14. #range(left(/foo),string-index(//p,10)) <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> start <p>Here be dragons.</p> </bar> </foo> end
  • 15. #range(left(/foo),string-index(//p,10)) <?xml version="1.0" encoding="UTF-8"?> <foo type="barbecue"> <bar> start <p>Here be dragons.</p> </bar> </foo> end ("n ", "n ", "Here be dr")
  • 16. #range(right(//lb[@n='5']),string-index(//lb[@n='5'],5) start <lb n="5"/><unclear>Ἰσ</unclear>ά<hi rend="diaeresis">ι</hi>ς ἁλιεύς <num value="5">ε</num> end
  • 17. usage scenarios ✤ Including and transcluding text ✤ I want to import chunks of document from outside, or from another part of my document. ✤ Leveraging annotations or standoff markup during transformations ✤ I want to make standoff annotations and have their effects show up in the results
  • 18. <div type="edition"> <ab> <lb n="5"/><unclear>Ἰσ</unclear>ά<hi rend="diaeresis">ι</hi>ς ἁλιεύς <num value="5">ε</num> </ab> </div> <div type="annotations"> <ab> <name ref="#name1"><ref target="#match(//lb[@n='5'],'Ἰσάις')"/></name> </ab> </div>
  • 19. <div type="edition"> <ab> <lb n="5"/><unclear>Ἰσ</unclear>ά<hi rend="diaeresis">ι</hi>ς ἁλιεύς <num value="5">ε</num> </ab> </div> <div type="annotations"> <ab> <name ref="#name1"><ref target="#match(//lb[@n='5'],'Ἰσάις')"/></name> </ab> </div> 5 Ἰ̣σ̣άι(¨)ς ἁλιεύς ε On mouseover, we get more info about the person, name, etc., pulled from the annotation.
  • 20. Ovid, Ibis, Merkel & Ehwald Ovid, Ibis – apparatus, Owen <?xml version="1.0" encoding="utf-8"?> <TEI.2><text><body><div1 type="book" n="1" org="uniform" sample="complete"><p> <?xml version="1.0" encoding="UTF-8"?> <pb id="p.103" /> <?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" schematypens="http://relaxng.org/ns/structure/1.0"?> <TEI <lb rend="displayNum" n="1" /> xmlns="http://www.tei-c.org/ns/1.0"> <milestone unit="alt" n="1" />Tempus ad hoc; lustris bis iam mihi quinque peractis, <teiHeader> <lb rend="displayNum" n="2" />Omne fuit Musae carmen inerme meae; <fileDesc> <lb rend="displayNum" n="3" />Nullaque; quae possit; scriptis tot milibus, extat <titleStmt> <lb rend="displayNum" n="4" />Littera Nasonis sanguinolenta legi: <title>Ovid: Ibis – Apparatus</title> <lb rend="displayNum" n="5" /> Nec quemquam nostri nisi me laesere libelli, </titleStmt> <lb rend="displayNum" n="6" />Artificis periit cum caput Arte sua. <publicationStmt> <lb rend="displayNum" n="7" />Unus — et hoc ipsum est iniuria magna — perennem <p>An experiment</p> </publicationStmt> <lb rend="displayNum" n="8" />Candoris titulum non sinit esse mei. <sourceDesc> <lb rend="displayNum" n="9" />Quisquis is est, — nam nomen adhuc utcumque tacebo — <p><bibl>S. G. Owen, <title>P. Ovidi Nasonis Tristium Libri Quinque, <lb rend="displayNum" n="10" /> Cogit inassuetas sumere tela manus. Ibis, Ex Ponto Libri Quattuor, Halieutica Fragmenta, Oxford (1915)</title></bibl></p> <lb rend="displayNum" n="11" />Ille relegatum gelidos aquilonis ad ortus </sourceDesc> </fileDesc> <lb rend="displayNum" n="12" />Non sinit exilio delituisse meo; </teiHeader> <lb rend="displayNum" n="13" />Vulneraque inmitis requiem quaerentia vexat, <text> <lb rend="displayNum" n="14" />Iactat et in toto nomina nostra foro; <body> <lb rend="displayNum" n="15" /> Perpetuoque mihi sociatam foedere lecti <div type="apparatus"> <lb rend="displayNum" n="16" />Non patitur vivi funera flere viri. <ab> <lb rend="displayNum" n="17" />Cumque ego quassa meae complectar membra carinae, <app corresp="ibis-perseus.xml#match(//lb[@n='9'],'tacebo')"> <lb rend="displayNum" n="18" />Naufragii tabulas pugnat habere mei: <lem>tacebo</lem> <lb rend="displayNum" n="19" />Et qui debuerat subitas extinguere flammas, <rdg wit="#F #T #X">latebit</rdg> <lb rend="displayNum" n="20" /> Hic praedam medio raptor ab igne petit. </app> <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'Qua')"> <lb rend="displayNum" n="21" /> <lem>quod</lem> <milestone unit="alt" n="2" />Nititur, ut profugae desint alimenta senectae. <rdg wit="#G">qua</rdg> <lb rend="displayNum" n="22" />Heu! quanto est nostris dignior ipse malis! <rdg wit="#P">quam</rdg> </app> <pb id="p.104" /> <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'ei!')"> <lem wit="#P">et</lem> <lb rend="displayNum" n="23" />Di melius; quorum longe mihi maximus ille est, <rdg wit="#F #H #T #V">hei</rdg> <lb rend="displayNum" n="24" />Qui nostras inopes noluit esse vias. <rdg wit="#G #X #Zamoscianus">heu</rdg> <lb rend="displayNum" n="25" /> Huic igitur meritas grates, ubicumque licebit, </app> <lb rend="displayNum" n="26" />Pro tam mansueto pectore semper agam. </ab> <lb rend="displayNum" n="27" />Audiat hoc Pontus. faciet quoque forsitan idem, </div> </body> <lb rend="displayNum" n="28" />Terra sit ut propior testificanda mihi. </text> <lb rend="displayNum" n="29" />At tibi, calcasti qui me, violente, iacentem, </TEI> <lb rend="displayNum" n="30" /> Qua licet ei! misero, debitus hostis ero.
  • 21. Ovid, Ibis, Merkel & Ehwald Ovid, Ibis – apparatus, Owen <?xml version="1.0" encoding="utf-8"?> <TEI.2><text><body><div1 type="book" n="1" org="uniform" sample="complete"><p> <?xml version="1.0" encoding="UTF-8"?> <pb id="p.103" /> <?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" schematypens="http://relaxng.org/ns/structure/1.0"?> <TEI <lb rend="displayNum" n="1" /> xmlns="http://www.tei-c.org/ns/1.0"> <milestone unit="alt" n="1" />Tempus ad hoc; lustris bis iam mihi quinque peractis, <teiHeader> <lb rend="displayNum" n="2" />Omne fuit Musae carmen inerme meae; <fileDesc> <lb rend="displayNum" n="3" />Nullaque; quae possit; scriptis tot milibus, extat <titleStmt> <lb rend="displayNum" n="4" />Littera Nasonis sanguinolenta legi: <title>Ovid: Ibis – Apparatus</title> <lb rend="displayNum" n="5" /> Nec quemquam nostri nisi me laesere libelli, </titleStmt> <lb rend="displayNum" n="6" />Artificis periit cum caput Arte sua. <publicationStmt> <lb rend="displayNum" n="7" />Unus — et hoc ipsum est iniuria magna — perennem <p>An experiment</p> </publicationStmt> <lb rend="displayNum" n="8" />Candoris titulum non sinit esse mei. <sourceDesc> <lb rend="displayNum" n="9" />Quisquis is est, — nam nomen adhuc utcumque tacebo — <p><bibl>S. G. Owen, <title>P. Ovidi Nasonis Tristium Libri Quinque, <lb rend="displayNum" n="10" /> Cogit inassuetas sumere tela manus. Ibis, Ex Ponto Libri Quattuor, Halieutica Fragmenta, Oxford (1915)</title></bibl></p> <lb rend="displayNum" n="11" />Ille relegatum gelidos aquilonis ad ortus </sourceDesc> </fileDesc> <lb rend="displayNum" n="12" />Non sinit exilio delituisse meo; </teiHeader> <lb rend="displayNum" n="13" />Vulneraque inmitis requiem quaerentia vexat, <text> <lb rend="displayNum" n="14" />Iactat et in toto nomina nostra foro; <body> <lb rend="displayNum" n="15" /> Perpetuoque mihi sociatam foedere lecti <div type="apparatus"> <lb rend="displayNum" n="16" />Non patitur vivi funera flere viri. <ab> <lb rend="displayNum" n="17" />Cumque ego quassa meae complectar membra carinae, <app corresp="ibis-perseus.xml#match(//lb[@n='9'],'tacebo')"> <lb rend="displayNum" n="18" />Naufragii tabulas pugnat habere mei: <lem>tacebo</lem> <lb rend="displayNum" n="19" />Et qui debuerat subitas extinguere flammas, <rdg wit="#F #T #X">latebit</rdg> <lb rend="displayNum" n="20" /> Hic praedam medio raptor ab igne petit. </app> <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'Qua')"> <lb rend="displayNum" n="21" /> <lem>quod</lem> <milestone unit="alt" n="2" />Nititur, ut profugae desint alimenta senectae. <rdg wit="#G">qua</rdg> <lb rend="displayNum" n="22" />Heu! quanto est nostris dignior ipse malis! <rdg wit="#P">quam</rdg> </app> <pb id="p.104" /> <app corresp="ibis-perseus.xml#match(//lb[@n='30'],'ei!')"> <lem wit="#P">et</lem> <lb rend="displayNum" n="23" />Di melius; quorum longe mihi maximus ille est, <rdg wit="#F #H #T #V">hei</rdg> <lb rend="displayNum" n="24" />Qui nostras inopes noluit esse vias. <rdg wit="#G #X #Zamoscianus">heu</rdg> <lb rend="displayNum" n="25" /> Huic igitur meritas grates, ubicumque licebit, </app> <lb rend="displayNum" n="26" />Pro tam mansueto pectore semper agam. </ab> <lb rend="displayNum" n="27" />Audiat hoc Pontus. faciet quoque forsitan idem, </div> </body> <lb rend="displayNum" n="28" />Terra sit ut propior testificanda mihi. </text> <lb rend="displayNum" n="29" />At tibi, calcasti qui me, violente, iacentem, </TEI> <lb rend="displayNum" n="30" /> Qua licet ei! misero, debitus hostis ero.
  • 22. Perseus’ Ibis: 30 Qua licet ei! misero, debitus hostis ero. Perseus’ Ibis with Owen’s apparatus lemmata interpolated: 30 quod licet et misero, debitus hostis ero.
  • 23. Perseus’ Ibis: 30 Qua licet ei! misero, debitus hostis ero. Perseus’ Ibis with Owen’s apparatus lemmata interpolated: 30 quod licet et misero, debitus hostis ero. “Another poem, more than 600 lines long, was written by Ovid in his exile and has come down to our own times. Its name is not on Mr. Owen’s title-page, but under cover of this silence, it has been slipped into the middle of the book, — medio tutissimus Ibis, as its author himself observed, — apparently in the hope that it may escape notice. Well, so it shall.” – A. E. Housman
  • 24. Where are we now?
  • 25. Where are we now? ✤ Draft spec: http://goo.gl/8YRqe
  • 26. Where are we now? ✤ Draft spec: http://goo.gl/8YRqe ✤ I'm working on a reference implementation of the draft spec as it stands: https://github.com/hcayless/tei-pointers (very little there, and not yet working, but watch this space)
  • 27. Where are we now? ✤ Draft spec: http://goo.gl/8YRqe ✤ I'm working on a reference implementation of the draft spec as it stands: https://github.com/hcayless/tei-pointers (very little there, and not yet working, but watch this space) ✤ This talk: http://goo.gl/4R5zo
  • 28. Where are we now? ✤ Draft spec: http://goo.gl/8YRqe ✤ I'm working on a reference implementation of the draft spec as it stands: https://github.com/hcayless/tei-pointers (very little there, and not yet working, but watch this space) ✤ This talk: http://goo.gl/4R5zo ✤ Thanks!

Hinweis der Redaktion

  1. I am painfully aware that this is the last paper of the last session of the day, and that I&amp;#x2019;m all that stands between you and beer. And, moreover, that the topic I&amp;#x2019;m presenting on isn&amp;#x2019;t the most accessible one ever. I hope the dry topic will make the beer that much more refreshing afterwards\n\n
  2. \n
  3. XPointers are an extension to URLs. What&apos;s a URL? A URL is an address. It tells you where to go, but (I must emphasize) not what to do when you get there. XPointers are tacked onto a URL and address a location inside the document referenced by the URL. This is an important point, because although XPointers look very much like programming language functions, they are not functions. They don&apos;t actually dictate what happens to the things they address, they just tell you how to get there.\n\nTEI has a set of XPointer schemes, detailed at http://www.tei-c.org/release/doc/tei-p5-doc/en/html/SA.html#SATS \nWarning: this section is so abstract, you may temporarily lose the will to live while reading it. It has been the victim of a Catch-22. It is difficult enough to grasp that most people never bother to try using it, and so few people have tried using it that it has never accumulated a good set of implementations and use-cases.\n
  4. \n
  5. Well, this is a good question. If nobody ever uses them, should they even exist? I&apos;ve come to the conclusion that they do actually cover a set of edge cases that are worth dealing with and that more people are likely to run into as TEI adoption spreads.\n\nThe TEI has satisfactorily proved by example that trees make for a very useful (even though not perfect) data structure for documents of many kinds. Trees have the advantage over simpler constructs of being easy to navigate. The XML tree-structure even has a path language which can be used to address nodes in a document or retrieve values from it. With XML and XPath, we can get at pretty much any part of a TEI document that we might want. So what is the point of Pointers?\n\nWell, XPointers allow you to address unmarked pieces of a document. They let you address things like a name embedded in a chunk of text, or an apparatus lemma spanning a series of elements and partial text nodes. You may object: &quot;well, you can do that with XPath too!&quot; But in fact, technically, you can&apos;t. XPath does have a number of functions that allow you to get at bits of text (substring, string-before, string-after, and so-on), but these functions return atomic values rather than nodes in the document tree. In other words, they return the text but discard the context. &amp;#xA0;This is ok for certain modes of work, but if what you actually want to do is address the text in its context, then XPath may not work for you, because it can only address whole nodes in their context.\n
  6. Now, I mentioned earlier that these are edge cases, and they are, because if you want to say something about a chunk of text in an XML document, what you typically do is put some markup around it with an id attribute that you can point to. Easy. Done.\n\nThe XPointer use case comes in when for some reason you can&apos;t insert new elements into the target document or when you really don&apos;t want to. &amp;#xA0;This might happen if you wanted to have markup that annotates a document published by someone else, and you don&apos;t want to or can&apos;t re-host a derivative version with your own markup added. We have another use case at papyri.info, a project I work on which provides online editing of editions of ancient documents. Our markup editor only deals with marking up aspects of the text, not things like names, organizations, dates, etc. To add more types of markup to the mix would be to raise the complexity bar too high. So if we want to add that kind of markup, we&apos;ll need to do it in a standoff fashion, using something like TEI Pointers.\n\nSo the answer is, actually, that you probably don&apos;t need to care until or unless you run smack into one of these edge cases. Then you may find that you suddenly start to care a lot.\n
  7. Now, I mentioned earlier that these are edge cases, and they are, because if you want to say something about a chunk of text in an XML document, what you typically do is put some markup around it with an id attribute that you can point to. Easy. Done.\n\nThe XPointer use case comes in when for some reason you can&apos;t insert new elements into the target document or when you really don&apos;t want to. &amp;#xA0;This might happen if you wanted to have markup that annotates a document published by someone else, and you don&apos;t want to or can&apos;t re-host a derivative version with your own markup added. We have another use case at papyri.info, a project I work on which provides online editing of editions of ancient documents. Our markup editor only deals with marking up aspects of the text, not things like names, organizations, dates, etc. To add more types of markup to the mix would be to raise the complexity bar too high. So if we want to add that kind of markup, we&apos;ll need to do it in a standoff fashion, using something like TEI Pointers.\n\nSo the answer is, actually, that you probably don&apos;t need to care until or unless you run smack into one of these edge cases. Then you may find that you suddenly start to care a lot.\n
  8. Now, I mentioned earlier that these are edge cases, and they are, because if you want to say something about a chunk of text in an XML document, what you typically do is put some markup around it with an id attribute that you can point to. Easy. Done.\n\nThe XPointer use case comes in when for some reason you can&apos;t insert new elements into the target document or when you really don&apos;t want to. &amp;#xA0;This might happen if you wanted to have markup that annotates a document published by someone else, and you don&apos;t want to or can&apos;t re-host a derivative version with your own markup added. We have another use case at papyri.info, a project I work on which provides online editing of editions of ancient documents. Our markup editor only deals with marking up aspects of the text, not things like names, organizations, dates, etc. To add more types of markup to the mix would be to raise the complexity bar too high. So if we want to add that kind of markup, we&apos;ll need to do it in a standoff fashion, using something like TEI Pointers.\n\nSo the answer is, actually, that you probably don&apos;t need to care until or unless you run smack into one of these edge cases. Then you may find that you suddenly start to care a lot.\n
  9. Earlier this year, a working group on TEI Pointers was convened. The members include myself, Piotr Ba&amp;#x144;ski, Syd Bauman, Gabriel Bodard, Martin Holmes, and Laurent Romary. We&apos;ve been discussing what to do about the Pointers section in the guidelines, starting with the development of a set of use cases, and moving on to the development of a draft update to the section, which I&apos;ve been editing (with feedback from the other members). Discussions are still ongoing, and the following represents my own views, not those of the working group as a whole, though it has certainly been informed and I hope improved by their input..\n
  10. There are a variety of problems with the TEI Pointer schemes as currently defined. The first being the negative feedback loop that I identified earlier, where lack of implementations mean lack of use, which means lack of use cases, which means lack of work on implementations. We need to break that cycle by providing a reference implementation for whatever we end up recommending.\n\nSecond, the specification needs to be made more explicit and less abstract, so that it is actually possible to develop implementations. This includes detailing what exactly a TEI Pointer addresses when it indicates a point or a range, tightening up the syntax, and modifying or adding to the definitions in the specification.\n
  11. So, what is a point? This is tricky, because they don&amp;#x2019;t exist. They are a useful construct for saying where to start or stop when grabbing a chunk of document, or maybe for describing where to insert a bookmark, but they don&amp;#x2019;t correspond to anything actually in an XML document, and particularly not to anything in the XML Infoset. So points are a bit theoretical. The old specification defines them as the positions next to elements or between characters in a text node. The old specification does not make it entirely clear, but there have to be strict limitations on where points can be. They can&amp;#x2019;t be in the middle of an element (i.e. between the brackets), for example. Though perhaps they could be inside an attribute.\n
  12. Points can define the start and end of a range. So a range is the piece of document between two points. But again, we have to be careful about what that means. In the draft specification, I&amp;#x2019;ve taken a hard line that ranges can&amp;#x2019;t contain partial elements, so if you do something silly like [range-1.graffle], you don&amp;#x2019;t get the elements foo, bar, and baz at all. Instead you get a sequence that looks like (&quot;\\n &amp;#xA0;&quot;, &quot;\\n &amp;#xA0;&amp;#xA0;&amp;#xA0;&quot;, &quot;Here be&quot;). \n
  13. You only get elements when the whole element is part of the sequence. This solves a big implementation roadblock, because it&amp;#x2019;s very difficult (maybe impossible) to know how to deal with a range containing what would be not-well-formed markup. There&amp;#x2019;s no such thing as half an element node in the XML DOM, for example. By defining exactly what a range can be&amp;#x2014;basically what&amp;#x2019;s called a Sequence in XSLT 2.0&amp;#x2014;we can eliminate that obstacle to implementation.\n\nSo this is all very boring. Thanks to those of you who&amp;#x2019;ve managed to stay awake this far! It&amp;#x2019;s also a bit mad&amp;#x2014;Nobody in their right mind is going to type most of these things. We might find ways of generating them though.\n
  14. \n\nLet&amp;#x2019;s see if we can figure out how pointers might actually be useful. I noted earlier that the set of use cases I see this technology targeting are cases where you want to layer new markup on top of existing markup that you either can&amp;#x2019;t, or don&amp;#x2019;t want to change. There&amp;#x2019;s a caveat built in here: as with any URL, you are taking a risk that the thing you point at won&amp;#x2019;t always be there. If you&amp;#x2019;re using pointers with documents that change regularly, you&amp;#x2019;ll need to come up with strategies for mitigating the risk of broken links.\n\nSome usage scenarios I can think of are:\n\nIncluding and transcluding text: I want to import chunks of document from outside, or from another part of my document.\nLeveraging annotations or standoff markup during transformations\n\n
  15. I&apos;ll conclude with a couple of examples of ways I might use TEI pointers in my own work. In Papyri.info, we take a very opinionated view of how texts should be structured. These are editions of texts where the object is to present the nature of the text as observed and interpreted by its editors. So we take care to mark things like gaps in the text, unclear letters, aspects of how the scribe wrote the text, editorial supplements, etc. We do not mark names of places, people, organizations, dates, events, and so on. If we did this inline it would be too much of a mess. Nevertheless, this is something we&apos;ll want to do. We might do something like slide 13: leverage the annotation in the HTML output by using it to supply a callout with further information on mouseover.\n
  16. I&apos;ll conclude with a couple of examples of ways I might use TEI pointers in my own work. In Papyri.info, we take a very opinionated view of how texts should be structured. These are editions of texts where the object is to present the nature of the text as observed and interpreted by its editors. So we take care to mark things like gaps in the text, unclear letters, aspects of how the scribe wrote the text, editorial supplements, etc. We do not mark names of places, people, organizations, dates, events, and so on. If we did this inline it would be too much of a mess. Nevertheless, this is something we&apos;ll want to do. We might do something like slide 13: leverage the annotation in the HTML output by using it to supply a callout with further information on mouseover.\n
  17. Second, I&apos;ve started as an experiment to see how you might take the apparatus from one edition and apply it to an earlier edition. Perseus has an edition of Ovid&apos;s Ibis from 1879 that they publish, and they make the XML available. What if I wanted to take their text, but use S. G. Owen&apos;s apparatus from his 1915 Oxford Classical Text to &quot;enhance&quot; it?\n
  18. Second, I&apos;ve started as an experiment to see how you might take the apparatus from one edition and apply it to an earlier edition. Perseus has an edition of Ovid&apos;s Ibis from 1879 that they publish, and they make the XML available. What if I wanted to take their text, but use S. G. Owen&apos;s apparatus from his 1915 Oxford Classical Text to &quot;enhance&quot; it?\n
  19. Second, I&apos;ve started as an experiment to see how you might take the apparatus from one edition and apply it to an earlier edition. Perseus has an edition of Ovid&apos;s Ibis from 1879 that they publish, and they make the XML available. What if I wanted to take their text, but use S. G. Owen&apos;s apparatus from his 1915 Oxford Classical Text to &quot;enhance&quot; it?\n
  20. Second, I&apos;ve started as an experiment to see how you might take the apparatus from one edition and apply it to an earlier edition. Perseus has an edition of Ovid&apos;s Ibis from 1879 that they publish, and they make the XML available. What if I wanted to take their text, but use S. G. Owen&apos;s apparatus from his 1915 Oxford Classical Text to &quot;enhance&quot; it?\n
  21. Second, I&apos;ve started as an experiment to see how you might take the apparatus from one edition and apply it to an earlier edition. Perseus has an edition of Ovid&apos;s Ibis from 1879 that they publish, and they make the XML available. What if I wanted to take their text, but use S. G. Owen&apos;s apparatus from his 1915 Oxford Classical Text to &quot;enhance&quot; it?\n
  22. Second, I&apos;ve started as an experiment to see how you might take the apparatus from one edition and apply it to an earlier edition. Perseus has an edition of Ovid&apos;s Ibis from 1879 that they publish, and they make the XML available. What if I wanted to take their text, but use S. G. Owen&apos;s apparatus from his 1915 Oxford Classical Text to &quot;enhance&quot; it?\n
  23. As an aside, this isn&apos;t necessarily something you&apos;d want to do, except as a way of examining the scholarly tradition. A.E. Housman had nothing good to say about Owen&apos;s edition.\n
  24. So the current state of play is this: I&apos;ve been working on a draft specification, which is open for comment on Google Drive at https://docs.google.com/document/d/1JsMA-gOGrevyY-crzHGiC7eZ8XdV5H_wFTlUGzrf20w/edit# &amp;#x2014; this is under revision in my copious spare time, and I&apos;ve started (only started, mind!) building a reference implementation at https://github.com/hcayless/tei-pointers. There is really nothing to look at there yet, but I&apos;m trying to make progress on it, so watch this space!\n
  25. So the current state of play is this: I&apos;ve been working on a draft specification, which is open for comment on Google Drive at https://docs.google.com/document/d/1JsMA-gOGrevyY-crzHGiC7eZ8XdV5H_wFTlUGzrf20w/edit# &amp;#x2014; this is under revision in my copious spare time, and I&apos;ve started (only started, mind!) building a reference implementation at https://github.com/hcayless/tei-pointers. There is really nothing to look at there yet, but I&apos;m trying to make progress on it, so watch this space!\n
  26. So the current state of play is this: I&apos;ve been working on a draft specification, which is open for comment on Google Drive at https://docs.google.com/document/d/1JsMA-gOGrevyY-crzHGiC7eZ8XdV5H_wFTlUGzrf20w/edit# &amp;#x2014; this is under revision in my copious spare time, and I&apos;ve started (only started, mind!) building a reference implementation at https://github.com/hcayless/tei-pointers. There is really nothing to look at there yet, but I&apos;m trying to make progress on it, so watch this space!\n
  27. So the current state of play is this: I&apos;ve been working on a draft specification, which is open for comment on Google Drive at https://docs.google.com/document/d/1JsMA-gOGrevyY-crzHGiC7eZ8XdV5H_wFTlUGzrf20w/edit# &amp;#x2014; this is under revision in my copious spare time, and I&apos;ve started (only started, mind!) building a reference implementation at https://github.com/hcayless/tei-pointers. There is really nothing to look at there yet, but I&apos;m trying to make progress on it, so watch this space!\n