<path>

<path> defines any line passing through two or more points within a surface element. [11.1 Digital Facsimiles 11.2.2 Embedded Transcription]
Moduletranscr — Representation of Primary Sources
Attributesatt.global (@xml:id, @n, @xml:lang, @xml:base, @xml:space) (att.global.rendition (@rend, @style, @rendition)) (att.global.linking (@corresp, @synch, @sameAs, @copyOf, @next, @prev, @exclude, @select)) (att.global.analytic (@ana)) (att.global.facs (@facs)) (att.global.change (@change)) (att.global.responsibility (@cert, @resp)) (att.global.source (@source)) att.typed (@type, @subtype) att.written (@hand) att.coordinated (points, @start, @ulx, @uly, @lrx, @lry)
pointsidentifies a line within the container or bounding box specified by the parent element by means of a series of two or more pairs of numbers, each of which gives the x,y coordinates of a point on the line.
Derived fromatt.coordinated
Status Optional
Datatype 2–∞ occurrences of teidata.point separated by whitespace
Member of
Contained by
transcr: line surface zone
May containEmpty element
Note

Although the simplest form of a path is a straight line between two points, a line with more than two points may bend at any point. The order of coordinates in points is significant, because the line follows the coordinate sequence.

To specify a closed polygon, use the zone element rather than the path element.

Example
<surface ulx="0uly="0lrx="443lry="272">
 <graphic url="facs-fig3.jpg"/>
 <path points="74,73 171,244"/>
 <path points="71,203 173,116"/>
</surface>
Schematron

<sch:rule context="tei:path[@points]">

<!-- For a <path> element, we should ensure that the last coordinate does not repeat the first coordinate, otherwise we have a closed polygon, not a path. -->
<sch:let name="firstPair"
 value="tokenize( normalize-space( @points ), ' ')[1]"/>

<sch:let name="lastPair"
 value="tokenize( normalize-space( @points ), ' ')[last()]"/>

<sch:let name="firstX"
 value="xs:float( substring-before( $firstPair, ',') )"/>

<sch:let name="firstY"
 value="xs:float( substring-after( $firstPair, ',') )"/>

<sch:let name="lastX"
 value="xs:float( substring-before( $lastPair, ',') )"/>

<sch:let name="lastY"
 value="xs:float( substring-after( $lastPair, ',') )"/>

<sch:report test="$firstX eq $lastX and $firstY eq $lastY">The first and
last elements of this path are the same. To specify a closed polygon, use
the zone element rather than the path element. </sch:report>
</sch:rule>
Content model
<content>
 <empty/>
</content>
Schema Declaration
<rng:element name="path">
 <rng:ref name="att.global.attributes"/>
 <rng:ref name="att.global.rendition.attributes"/>
 <rng:ref name="att.global.linking.attributes"/>
 <rng:ref name="att.global.analytic.attributes"/>
 <rng:ref name="att.global.facs.attributes"/>
 <rng:ref name="att.global.change.attributes"/>
 <rng:ref name="att.global.responsibility.attributes"/>
 <rng:ref name="att.global.source.attributes"/>
 <rng:ref name="att.typed.attributes"/>
 <rng:ref name="att.written.attributes"/>
 <rng:ref name="att.coordinated.attribute.start"/>
 <rng:ref name="att.coordinated.attribute.ulx"/>
 <rng:ref name="att.coordinated.attribute.uly"/>
 <rng:ref name="att.coordinated.attribute.lrx"/>
 <rng:ref name="att.coordinated.attribute.lry"/>
 <rng:optional>
  <rng:attribute name="points">
   <rng:list>
    <rng:ref name="teidata.point"/>
    <rng:ref name="teidata.point"/>
    <rng:zeroOrMore>
     <rng:ref name="teidata.point"/>
    </rng:zeroOrMore>
   </rng:list>
  </rng:attribute>
 </rng:optional>
 <rng:empty/>
</rng:element>
element path
{
   att.global.attributes,
   att.global.rendition.attributes,
   att.global.linking.attributes,
   att.global.analytic.attributes,
   att.global.facs.attributes,
   att.global.change.attributes,
   att.global.responsibility.attributes,
   att.global.source.attributes,
   att.typed.attributes,
   att.written.attributes,
   att.coordinated.attribute.start,
   att.coordinated.attribute.ulx,
   att.coordinated.attribute.uly,
   att.coordinated.attribute.lrx,
   att.coordinated.attribute.lry,
   attribute points { list { teidata.point, teidata.point, teidata.point* } }?,
   empty
}