Documents that reference resources on other sites are subject to all the usual problems of the Web: documents are deleted, documents move, servers crash, DNS records aren't updated fast enough, and more. The examples so far all fail completely if the resource at the end of an href attribute can't be found. However, XInclude offers authors a means to provide alternate content in the face of a missing document. Each XInclude element can contain a single xi:fallback child element. If the remote document can't be loaded, the contents of the xi:fallback element replace the xi:include element instead of the contents of the remote resource. For example:
<xi:include href="AlanTuring.xml"> <xi:fallback> Oops! Could not find Alan Turing! </xi:fallback> </xi:include>
There's no limit to what an xi:fallback element can contain. It can hold plain text, a child element, mixed content, or even another xi:include element to be resolved if the top one can't be. For example, this xi:include element tries to load the same document from three different sites:
<xi:include href="http://www.example.us/data.xml"> <xi:fallback> <xi:include href="http://www.example.fr/data.xml"> <xi:fallback> <xi:include href="http://www.example.cn/data.xml"> <xi:fallback> Could not find the document in the U.S., France, or China. </xi:fallback> </xi:include> </xi:fallback> </xi:include> </xi:fallback> </xi:include>
An xi:include element may not contain more than one xi:fallback child, and may not contain any xi:include or other child elements from the XInclude namespace. Otherwise, any children of the xi:include element not in the XInclude namespace are ignored, and do not appear in the result document after inclusion. The xi:fallback element is ignored if the resource specified by the parent xi:include element's href attribute is successfully loaded. An xi:fallback element may only appear as the child of an xi:include element. It is a fatal error for it to have any other parent.
Fallbacks are only processed for resource errors, mostly I/O errors that occur when loading the remote resource. Other problemsthe remote document is malformed when parse="xml ", an included text document contains characters that are illegal in XML, there is a syntax error in the xi:include elementare fatal errors. If any of these things happen, the processor simply gives up and reports the error.