The foreign element allows the introduction of non-DITA content, for example, MathML, SVG, or Rich Text Format (RTF). The foreign element or a specialization can contain more than one type of non-DITA content or a mix of DITA and non-DITA content. Specialization of the foreign element generally is implemented as a domain, but architects looking for more control over the content can implement foreign vocabularies as structural specializations.
Processors should attempt to display foreign content unless otherwise instructed. If the processor cannot render the content, it MAY issue a warning.
The enabler of the foreign vocabulary must provide the processing and override the base processing for foreign.
- If foreign contains more than one alternative content element, they should all be processed. In the case of desc they should be concatenated in a similar way to section, but with no title (analogous to div in HTML).
- If alternate content is desired, specialize the desc element to contain it. This specialization of desc should be used within the element specialized from foreign. Such alternate content must of course be valid wherever the foreign specialization is valid.
- If no desc, object, or image element is found within an instance of the foreign element, the base processing can emit a warning about the absence of processable content.
- The base processing for object might emit the content of foreign as a file at the location specified by the data attribute of the object element. The object element should have a data attribute or a foreign sub-element but not both. In the event that an object element contains both a data attribute and an foreign sub-element the processing system should ignore one of them.
See appendix for information about this element in OASIS document type shells.
SVG Example within a p element
<p>... as in the formula <svg> <svg:svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"> <ellipse cx="300" cy="150" rx="200" ry="80" style="fill:rgb(200,100,50); stroke:rgb(0,0,100);stroke-width:2"/> </svg:svg> </svg>. </p>
MathML Example within an object element
<p>... as in the formula <object> <desc>4 + x</desc> <mathml> <m:math display="block"> <m:mrow> <m:mo>sum</m:mo> <m:mn>4</m:mn> <m:mo>+</m:mo> <m:mi>x</m:mi> </m:mrow> </m:math> </mathml> </object>. </p>