-
Notifications
You must be signed in to change notification settings - Fork 0
/
universal-root.xml
121 lines (98 loc) · 3.79 KB
/
universal-root.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?xml version='1.0' encoding='UTF-8'?>
<?xml-model
title = ''
type = 'application/xml'
schematypens= 'http://relaxng.org/ns/structure/1.0'
href = 'http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng'
?>
<section
xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xl="http://www.w3.org/1999/xlink"
version="5.0"
role="pattern">
<info>
<title>Universal Root</title>
<abstract>
<para>Provide a single root element that contains an option of multiple elements. Often used
for different transaction types within a single document type.</para>
</abstract>
</info>
<section>
<title>Problem</title>
<para>There are several different types of document that need to be processed. Providing a
single root element allows for all of the different types of document to be defined by a
single DTD. When a processor receives this document, it will know which type of document
to expect by inspecting the child element of the root element.</para>
</section>
<section>
<title>Context</title>
<para>Universal Root is useful when a system has several different, but related, document
types to be processed. A transactional processor would be an example of such a
system.</para>
</section>
<section>
<title>Forces</title>
<para>Having multiple, distinct document types can increase the maintenance burden of a
system. Document types that may be related, but are declared in separate files can start
to stray from commonalities that can be taken advantage of.</para>
</section>
<section>
<title>Solution</title>
<para>Create a document type that has a single root element.</para>
</section>
<section>
<title>Examples</title>
<programlisting language="dtd"><![CDATA[
<!ELEMENT Transaction
(AddAddress | RemoveAddress | UpdateAddress)>
<!ELEMENT AddAddress
(AddressBookEntry)>
<!ELEMENT RemoveAddress
(AddressID)>
<!ELEMENT UpdateAddress
(AddressID, AddressBookEntry)>
<Transaction>
<AddAddress>
<AddressBookEntry> ... </AddressBookEntry>
</AddAddress>
</Transaction>
]]></programlisting>
<para>In this example an online address book application is being developed. There are
several transactions that can take place, like adding new entries, deleting entries,
updating entries.</para>
</section>
<section>
<title>Discussion</title>
<para>This allows a way for several related types of documents to be grouped into a single
document type structure. A processing system will always know which DTD to expect, but
can still handle the documents differently based on the first nested element type. This
makes sharing common definitions between the different document easy.</para>
<para>This is also a way that multiple XML document can be gathered into a single larger
document. For example a log file might consist of several fragments, for example:</para>
<programlisting language="xml"><![CDATA[
<Log>
<Time>Jan 15, 1999 10:58AM</Time>
<Event>Startup</Event>
</Log>
<Log>
<Time>Jan 15, 1999 11:02AM</Time>
<Event>Message Received from Bob</Event>
</Log>
…
]]></programlisting>
<para>Since there is no root element in the file it cannot be processed "as is".
To process this, one can prepend a start tag, for example "<LogFile>",
in front of the file, and append the end tag "</LogFile>" to the end of
the file to be able to process it as a single XML document.</para>
</section>
<section>
<title>Related Patterns</title>
<para><link xl:href="/patterns/doc-roots/multi-root.xml">Multi Root Document Types</link> and <link xl:href="/patterns/doc-roots/multi-doc-types.xml">Multiple Document Types</link> are alternatives to this
pattern.</para>
</section>
<section>
<title>Known Uses</title>
<para>…</para>
</section>
</section>