1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
4 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
5 <link rel="SHORTCUT ICON" href="/favicon.ico">
6 <style type="text/css"><!--
7 TD {font-family: Verdana,Arial,Helvetica}
8 BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
9 H1 {font-family: Verdana,Arial,Helvetica}
10 H2 {font-family: Verdana,Arial,Helvetica}
11 H3 {font-family: Verdana,Arial,Helvetica}
12 A:link, A:visited, A:active { text-decoration: underline }
14 <title>Entities or no entities</title>
16 <body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
17 <table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr>
19 <a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo"></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo"></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo"></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo"></a></div>
21 <td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center">
22 <h1>The XML C library for Gnome</h1>
23 <h2>Entities or no entities</h2>
24 </td></tr></table></td></tr></table></td>
26 <table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr>
27 <td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td>
28 <table width="100%" border="0" cellspacing="1" cellpadding="3">
29 <tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr>
30 <tr><td bgcolor="#fffacd">
31 <form action="search.php" enctype="application/x-www-form-urlencoded" method="GET">
32 <input name="query" type="TEXT" size="20" value=""><input name="submit" type="submit" value="Search ...">
35 <li><a href="index.html">Home</a></li>
36 <li><a href="intro.html">Introduction</a></li>
37 <li><a href="FAQ.html">FAQ</a></li>
38 <li><a href="docs.html">Documentation</a></li>
39 <li><a href="bugs.html">Reporting bugs and getting help</a></li>
40 <li><a href="help.html">How to help</a></li>
41 <li><a href="downloads.html">Downloads</a></li>
42 <li><a href="news.html">News</a></li>
43 <li><a href="XMLinfo.html">XML</a></li>
44 <li><a href="XSLT.html">XSLT</a></li>
45 <li><a href="python.html">Python and bindings</a></li>
46 <li><a href="architecture.html">libxml architecture</a></li>
47 <li><a href="tree.html">The tree output</a></li>
48 <li><a href="interface.html">The SAX interface</a></li>
49 <li><a href="xmldtd.html">Validation & DTDs</a></li>
50 <li><a href="xmlmem.html">Memory Management</a></li>
51 <li><a href="encoding.html">Encodings support</a></li>
52 <li><a href="xmlio.html">I/O Interfaces</a></li>
53 <li><a href="catalog.html">Catalog support</a></li>
54 <li><a href="library.html">The parser interfaces</a></li>
55 <li><a href="entities.html">Entities or no entities</a></li>
56 <li><a href="namespaces.html">Namespaces</a></li>
57 <li><a href="upgrade.html">Upgrading 1.x code</a></li>
58 <li><a href="threads.html">Thread safety</a></li>
59 <li><a href="DOM.html">DOM Principles</a></li>
60 <li><a href="example.html">A real example</a></li>
61 <li><a href="contribs.html">Contributions</a></li>
62 <li><a href="xmlreader.html">The Reader Interface</a></li>
63 <li><a href="tutorial/index.html">Tutorial</a></li>
64 <li><a href="guidelines.html">XML Guidelines</a></li>
66 <a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a>
71 <table width="100%" border="0" cellspacing="1" cellpadding="3">
72 <tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr>
73 <tr><td bgcolor="#fffacd"><ul>
74 <li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li>
75 <li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li>
76 <li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li>
77 <li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li>
78 <li><a href="ftp://xmlsoft.org/">FTP</a></li>
79 <li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li>
80 <li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
81 <li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li>
82 <li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li>
83 <li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml&product=libxml2">Bug Tracker</a></li>
86 <table width="100%" border="0" cellspacing="1" cellpadding="3">
87 <tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr>
88 <tr><td bgcolor="#fffacd"><ul>
89 <li><a href="APIchunk0.html">Alphabetic</a></li>
90 <li><a href="APIconstructors.html">Constructors</a></li>
91 <li><a href="APIfunctions.html">Functions/Types</a></li>
92 <li><a href="APIfiles.html">Modules</a></li>
93 <li><a href="APIsymbols.html">Symbols</a></li>
96 </td></tr></table></td>
97 <td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd">
98 <p>Entities in principle are similar to simple C macros. An entity defines an
99 abbreviation for a given string that you can reuse many times throughout the
100 content of your document. Entities are especially useful when a given string
101 may occur frequently within a document, or to confine the change needed to a
102 document to a restricted area in the internal subset of the document (at the
103 beginning). Example:</p>
104 <pre>1 <?xml version="1.0"?>
105 2 <!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
106 3 <!ENTITY xml "Extensible Markup Language">
110 7 </EXAMPLE></pre>
111 <p>Line 3 declares the xml entity. Line 6 uses the xml entity, by prefixing
112 its name with '&' and following it by ';' without any spaces added. There
113 are 5 predefined entities in libxml allowing you to escape characters with
114 predefined meaning in some parts of the xml document content:
115 <strong>&lt;</strong> for the character '<', <strong>&gt;</strong>
116 for the character '>', <strong>&apos;</strong> for the character ''',
117 <strong>&quot;</strong> for the character '"', and
118 <strong>&amp;</strong> for the character '&'.</p>
119 <p>One of the problems related to entities is that you may want the parser to
120 substitute an entity's content so that you can see the replacement text in
121 your application. Or you may prefer to keep entity references as such in the
122 content to be able to save the document back without losing this usually
123 precious information (if the user went through the pain of explicitly
124 defining entities, he may have a a rather negative attitude if you blindly
125 substitute them as saving time). The <a href="html/libxml-parser.html#XMLSUBSTITUTEENTITIESDEFAULT">xmlSubstituteEntitiesDefault()</a>
126 function allows you to check and change the behaviour, which is to not
127 substitute entities by default.</p>
128 <p>Here is the DOM tree built by libxml for the previous document in the
130 <pre>/gnome/src/gnome-xml -> ./xmllint --debug test/ent1
137 INTERNAL_GENERAL_ENTITY xml
138 content=Extensible Markup Language
141 <p>And here is the result when substituting entities:</p>
142 <pre>/gnome/src/gnome-xml -> ./tester --debug --noent test/ent1
147 content= Extensible Markup Language</pre>
148 <p>So, entities or no entities? Basically, it depends on your use case. I
149 suggest that you keep the non-substituting default behaviour and avoid using
150 entities in your XML document or data if you are not willing to handle the
151 entity references elements in the DOM tree.</p>
152 <p>Note that at save time libxml enforces the conversion of the predefined
153 entities where necessary to prevent well-formedness problems, and will also
154 transparently replace those with chars (i.e. it will not generate entity
155 reference elements in the DOM tree or call the reference() SAX callback when
156 finding them in the input).</p>
158 <span style="background-color: #FF0000">WARNING</span>: handling entities
159 on top of the libxml SAX interface is difficult!!! If you plan to use
160 non-predefined entities in your documents, then the learning curve to handle
161 then using the SAX API may be long. If you plan to use complex documents, I
162 strongly suggest you consider using the DOM interface instead and let libxml
163 deal with the complexity rather than trying to do it yourself.</p>
164 <p><a href="bugs.html">Daniel Veillard</a></p>
165 </td></tr></table></td></tr></table></td></tr></table></td>
166 </tr></table></td></tr></table>