blob: 349cdae279415c41b036076522d58a6b89459c68 [file] [log] [blame]
datatypes w = "http://whattf.org/datatype-draft"
# #####################################################################
## RELAX NG Schema for HTML 5: Phrase Markup #
# #####################################################################
## Contextual Hyperlink: <a>
a.elem.phrasing =
element a { a.inner.phrasing & a.attrs }
a.elem.flow =
element a { a.inner.flow & a.attrs }
a.attrs =
( common.attrs.basic
& common.attrs.i18n
& common.attrs.present
& common.attrs.other
& a.attrs.name?
& shared-hyperlink.attrs.download?
& shared-hyperlink.attrs.href?
& shared-hyperlink.attrs.target?
& shared-hyperlink.attrs.rel?
& shared-hyperlink.attrs.hreflang?
& shared-hyperlink.attrs.type?
& shared-hyperlink.attrs.ping?
& ( common.attrs.aria.implicit.link
| common.attrs.aria.role.button
| common.attrs.aria.role.checkbox
| common.attrs.aria.role.link
| common.attrs.aria.role.menuitem
| common.attrs.aria.role.menuitemcheckbox
| common.attrs.aria.role.menuitemradio
| common.attrs.aria.role.tab
| common.attrs.aria.role.treeitem
)?
)
a.attrs.name =
attribute name {
common.data.id # XXX not what the spec says
}
a.inner.phrasing =
( common.inner.phrasing )
a.inner.flow =
( common.inner.transparent.flow )
common.elem.phrasing |= a.elem.phrasing
common.elem.flow |= a.elem.flow
## Shared hyperlink attributes
shared-hyperlink.attrs.download =
attribute download {
string
}
shared-hyperlink.attrs.href =
attribute href {
common.data.uri
}
shared-hyperlink.attrs.target =
attribute target {
common.data.browsing-context-or-keyword
}
shared-hyperlink.attrs.rel =
attribute rel {
w:a-rel
}
shared-hyperlink.attrs.hreflang =
attribute hreflang {
common.data.langcode
}
shared-hyperlink.attrs.media =
attribute media {
common.data.mediaquery
}
shared-hyperlink.attrs.type =
attribute type {
common.data.mimetype
}
## Emphatic Stress: <em>
em.elem =
element em { em.inner & em.attrs }
em.attrs =
( common.attrs
& common.attrs.aria?
)
em.inner =
( common.inner.phrasing )
common.elem.phrasing |= em.elem
## Strong Importance: <strong>
strong.elem =
element strong { strong.inner & strong.attrs }
strong.attrs =
( common.attrs
& common.attrs.aria?
)
strong.inner =
( common.inner.phrasing )
common.elem.phrasing |= strong.elem
## Small Print and Side Comments: <small>
small.elem =
element small { small.inner & small.attrs }
small.attrs =
( common.attrs
& common.attrs.aria?
)
small.inner =
( common.inner.phrasing )
common.elem.phrasing |= small.elem
## Marked (Highlighted) Text: <mark>
mark.elem =
element mark { mark.inner & mark.attrs }
& v5only
mark.attrs =
( common.attrs
& ( common.attrs.aria.role.presentation
| common.attrs.aria.role.menuitem
)?
)
mark.inner =
( common.inner.phrasing )
common.elem.phrasing |= mark.elem
## Abbreviation: <abbr>
abbr.elem =
element abbr { abbr.inner & abbr.attrs }
abbr.attrs =
( common.attrs
# abbr.attrs.title included in common.attrs
& common.attrs.aria?
)
abbr.inner =
( common.inner.phrasing )
common.elem.phrasing |= abbr.elem
## Defining Instance: <dfn>
dfn.elem =
element dfn { dfn.inner & dfn.attrs }
dfn.attrs =
( common.attrs
# dfn.attrs.title included in common.attrs
& common.attrs.aria?
)
dfn.inner =
( common.inner.phrasing )
common.elem.phrasing |= dfn.elem
## Italic: <i>
i.elem =
element i { i.inner & i.attrs }
i.attrs =
( common.attrs
& common.attrs.aria?
)
i.inner =
( common.inner.phrasing )
common.elem.phrasing |= i.elem
## Bold: <b>
b.elem =
element b { b.inner & b.attrs }
b.attrs =
( common.attrs
& common.attrs.aria?
)
b.inner =
( common.inner.phrasing )
common.elem.phrasing |= b.elem
## Struck Text: <s>
s.elem =
element s { s.inner & s.attrs }
s.attrs =
( common.attrs
& common.attrs.aria?
)
s.inner =
( common.inner.phrasing )
common.elem.phrasing |= s.elem
## Underline: <u>
u.elem =
element u { u.inner & u.attrs }
u.attrs =
( common.attrs
& common.attrs.aria?
)
u.inner =
( common.inner.phrasing )
common.elem.phrasing |= u.elem
## Code Fragment: <code>
code.elem =
element code { code.inner & code.attrs }
code.attrs =
( common.attrs
& common.attrs.aria?
)
code.inner =
( common.inner.phrasing )
common.elem.phrasing |= code.elem
## Variable or Placeholder: <var>
var.elem =
element var { var.inner & var.attrs }
var.attrs =
( common.attrs
& common.attrs.aria?
)
var.inner =
( common.inner.phrasing )
common.elem.phrasing |= var.elem
## (Sample) Output: <samp>
samp.elem =
element samp { samp.inner & samp.attrs }
samp.attrs =
( common.attrs
& common.attrs.aria?
)
samp.inner =
( common.inner.phrasing )
common.elem.phrasing |= samp.elem
## User Input: <kbd>
kbd.elem =
element kbd { kbd.inner & kbd.attrs }
kbd.attrs =
( common.attrs
& common.attrs.aria?
)
kbd.inner =
( common.inner.phrasing )
common.elem.phrasing |= kbd.elem
## Superscript: <sup>
sup.elem =
element sup { sup.inner & sup.attrs }
sup.attrs =
( common.attrs
& common.attrs.aria?
)
sup.inner =
( common.inner.phrasing )
common.elem.phrasing |= sup.elem
## Subscript: <sub>
sub.elem =
element sub { sub.inner & sub.attrs }
sub.attrs =
( common.attrs
& common.attrs.aria?
)
sub.inner =
( common.inner.phrasing )
common.elem.phrasing |= sub.elem
## Quotation: <q>
q.elem =
element q { q.inner & q.attrs }
q.attrs =
( common.attrs
& q.attrs.cite?
& common.attrs.aria?
)
q.attrs.cite =
attribute cite {
common.data.uri
}
q.inner =
( common.inner.phrasing )
common.elem.phrasing |= q.elem
## Title of Work: <cite>
cite.elem =
element cite { cite.inner & cite.attrs }
cite.attrs =
( common.attrs
& common.attrs.aria?
)
cite.inner =
( common.inner.phrasing )
common.elem.phrasing |= cite.elem
## Generic Span: <span>
span.elem =
element span { span.inner & span.attrs }
span.attrs =
( common.attrs
& common.attrs.aria?
)
span.inner =
( common.inner.phrasing ) # REVISIT allow ol and ul?
common.elem.phrasing |= span.elem
## Bidirectional Override: <bdo>
bdo.elem =
element bdo { bdo.inner & bdo.attrs }
bdo.attrs =
( common.attrs # dir required in Schematron
& ( common.attrs.aria.role.presentation
| common.attrs.aria.role.menuitem
)?
)
bdo.inner =
( common.inner.phrasing )
common.elem.phrasing |= bdo.elem
## Bidirectional Isolate: <bdi>
bdi.elem =
element bdi { bdi.inner & bdi.attrs }
bdi.attrs =
( common.attrs
& ( common.attrs.aria.role.presentation
| common.attrs.aria.role.menuitem
)?
)
bdi.inner =
( common.inner.phrasing )
common.elem.phrasing |= bdi.elem
## Line Break: <br>
br.elem =
element br { br.inner & br.attrs }
br.attrs =
( common.attrs
& ( common.attrs.aria.role.presentation
| common.attrs.aria.role.menuitem
)?
)
br.inner =
( empty )
common.elem.phrasing |= br.elem
## Line-break opportunity: <wbr>
wbr.elem =
element wbr { wbr.inner & wbr.attrs }
wbr.attrs =
( common.attrs
& ( common.attrs.aria.role.presentation
| common.attrs.aria.role.menuitem
)?
)
wbr.inner =
( empty )
common.elem.phrasing |= wbr.elem