📄 dtd_el_vs_attr.asp
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XML Elements vs. Attributes</title>
<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="Keywords" content="xml,tutorial,html,dhtml,css,xsl,xhtml,javascript,asp,ado,vbscript,dom,sql,colors,soap,php,authoring,programming,training,learning,beginner's guide,primer,lessons,school,howto,reference,examples,samples,source code,tags,demos,tips,links,FAQ,tag list,forms,frames,color table,w3c,cascading style sheets,active server pages,dynamic html,internet,database,development,Web building,Webmaster,html guide" />
<meta name="Description" content="Free HTML XHTML CSS JavaScript DHTML XML DOM XSL XSLT RSS AJAX ASP ADO PHP SQL tutorials, references, examples for web building." />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<link rel="stylesheet" type="text/css" href="../stdtheme.css" />
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "../../https@ssl./default.htm" : "../../www./default.htm");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-3855518-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</head>
<body>
<a name="top"></a>
<table cellpadding="0" cellspacing="0" width="100%" bgcolor="#808080">
<tr>
<td width="234" valign="top">
<a href="../default.htm"><img src="../images/w3default80.jpg" border="0" alt="W3Schools" /></a>
</td>
<th valign="middle" align="left" class="right">
<iframe style="background-color:#808080" src="../banners/bannerframe.asp@adpartner=xmlspy" height="90" width="728"
marginwidth="0" marginheight="0" frameborder="0" scrolling="no">
Your browser does not support inline frames or is currently configured not to display inline frames.
</iframe>
<br /></th>
</tr>
</table>
<table style="margin-left:1px" width="800px" border="0" cellpadding="0" cellspacing="2">
<tr>
<td width="137" class="content" valign="top"><br />
<a class="left" href="../default.asp" target="_top">
<img src="../images/homeicon.gif" border="0" alt="home" /></a>
<a class="left" href="../default.asp" target="_top">
<b>HOME</b></a>
<br /><br />
<b>DTD Tutorial</b><br />
<a class="left" target="_top" href="default.asp" >DTD HOME</a><br />
<a class="left" target="_top" href="dtd_intro.asp" >DTD Introduction</a><br />
<a class="left" target="_top" href="dtd_building.asp" >DTD Building Blocks</a><br />
<a class="left" target="_top" href="dtd_elements.asp" >DTD Elements</a><br />
<a class="left" target="_top" href="dtd_attributes.asp" >DTD Attributes</a><br />
<a class="left" target="_top" href="dtd_el_vs_attr.asp" style='font-weight:bold;'>DTD Elements vs Attr</a><br />
<a class="left" target="_top" href="dtd_entities.asp" >DTD Entities</a><br />
<a class="left" target="_top" href="dtd_validation.asp" >DTD Validation</a><br />
<a class="left" target="_top" href="dtd_examples.asp" >DTD Examples</a><br />
<a class="left" target="_top" href="dtd_summary.asp" >DTD Summary</a><br />
<br />
<b>Selected Reading</b><br />
<a class="left" target="_top" href="../browsers/browsers_stats.asp">Web Statistics</a><br />
<a class="left" target="_top" href="../site/site_glossary.asp">Web Glossary</a><br />
<a class="left" target="_top" href="../hosting/default.asp">Web Hosting</a><br />
<a class="left" target="_top" href="../quality/default.asp">Web Quality</a><br /><br />
<a class="left" target="_top" href="../forum/default.asp">W3Schools Forum</a><br /><br />
<a class="left" target="_top" href="../about/about_helping.asp">Helping W3Schools</a><br /><br />
<script type="text/javascript"><!--
google_ad_client = "pub-3440800076797949";
/*LeftLinkUnit*/
google_ad_slot = "4854527104";
google_ad_width = 120;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="../../pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
<td valign="top">
<table style="border: 1px solid gray" width="100%" bgcolor="#FFFFFF" border="0" cellpadding="5" cellspacing="0">
<tr>
<td>
<h1>XML Elements vs. Attributes</h1>
<a href="dtd_attributes.asp"><img alt="back" border="0" src="../images/btn_previous.gif" width="100" height="20" /></a>
<a href="dtd_entities.asp"><img alt="next" border="0" src="../images/btn_next.gif" width="100" height="20" /></a>
<hr />
<p class="intro">In XML, there are no rules about when to use attributes, and when to
use child elements.</p>
<hr />
<h2>Use of Elements vs. Attributes</h2>
<p><b>Data can be stored in child elements or in attributes.</b></p>
<p>Take a look at these examples:</p>
<table border="1" width="100%" class="ex" cellspacing="0">
<tr><td>
<pre><person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person></pre>
</td></tr>
</table>
<br />
<table border="1" width="100%" class="ex" cellspacing="0">
<tr><td>
<pre><person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person></pre>
</td></tr>
</table>
<p>In the first example sex is an attribute. In the last, sex is a child
element. Both examples provide the same information.</p>
<p>There are no rules about when to use attributes, and when to
use child elements. My experience is that attributes are handy in HTML, but in XML you should try to avoid
them. Use child elements if the information feels like data.</p>
<hr />
<h2>My Favorite Way</h2>
<p><b>I like to store data in child elements.</b></p>
<p>The following three XML documents contain exactly the same information:
</p>
<p>A date attribute is used in the first example:
</p>
<table width="100%" border="1" class="ex" cellspacing="0"><tr><td>
<pre><note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note></pre>
</td></tr></table>
<p>A date element is used in the second example:</p>
<table width="100%" border="1" class="ex" cellspacing="0"><tr><td>
<pre><note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note></pre>
</td></tr></table>
<p>An expanded date element is used in the third: (THIS IS MY FAVORITE):</p>
<table width="100%" border="1" class="ex" cellspacing="0"><tr><td>
<pre><note>
<date>
<day>12</day>
<month>11</month>
<year>2002</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> </pre>
</td></tr></table>
<br />
<hr />
<h2>Avoid using attributes?
</h2>
<p><b>Should you avoid using attributes?</b>
</p>
<p>Some of the problems with attributes are:
</p>
<ul>
<li>attributes cannot contain multiple values (child elements can)</li>
<li>attributes are not easily expandable (for future changes)</li>
<li>attributes cannot describe structures (child elements can)</li>
<li>attributes are more difficult to manipulate by program code</li>
<li>attribute values are not easy to test against a DTD</li>
</ul>
<p>If you use attributes as containers for data, you end up with documents that are
difficult to read and maintain. Try to use <b> elements</b> to
describe data. Use attributes only to provide
information that is not relevant to the data.</p>
<p>Don't end up like this (this is not how XML should be used):</p>
<table width="100%" border="1" class="ex" cellspacing="0"><tr><td>
<pre><note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note> </pre>
</td></tr></table>
<br />
<hr />
<h2>An Exception to my Attribute Rule</h2>
<p><b>Rules always have exceptions.</b></p>
<p>My rule about attributes has one exception:</p>
<p>Sometimes I assign ID references to elements. These ID
references can be used to access XML elements in much the same way as the NAME or
ID attributes in HTML. This example demonstrates this:</p>
<table width="100%" border="1" class="ex" cellspacing="0"><tr><td>
<pre><messages>
<note id="p501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="p502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not!</body>
</note>
</messages></pre>
</td></tr></table>
<p>
The ID in these examples is just a counter, or a unique identifier, to identify
the different notes in the XML file, and not a part of the note data.</p>
<p>
What I am trying to say here is that metadata (data about data) should be stored
as attributes, and that data itself should be stored as elements.</p>
<hr />
<a href="dtd_attributes.asp"><img alt="back" border="0" src="../images/btn_previous.gif" width="100" height="20" /></a>
<a href="dtd_entities.asp"><img alt="next" border="0" src="../images/btn_next.gif" width="100" height="20" /></a>
<br />
<hr />
<!-- **** SPOTLIGHTS 1 **** -->
<iframe src="../banners/aspallframe.asp" height="110" width="485"
marginwidth="0" marginheight="0" frameborder="0" scrolling="no">
Your browser does not support inline frames or is currently configured not to display inline frames.
</iframe>
<hr />
<!-- **** SPOTLIGHTS 2 **** -->
<h2><a target="_blank" href="../../www.altova.com/ref/@s=w3s_spotlight&q=xmlspy">
Altova
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -