فضاهای نام (XML Namespaces)
«فضای نام (Namespace)» جلوی تداخل اسم ها را می گیرد. وقتی دو برنامه XML عنصرهای همنام دارند، با فضای نام آن ها را از هم جدا می کنیم؛ مثل برچسب کلاس روی دفترها.
تداخل نام چیست؟
گاهی دو سند، عنصر همنام دارند؛ اما معنی شان فرق دارد. بنابراین، پردازش سخت می شود.
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
نکته: هر دو اسمشان «table» است؛ اما موضوعشان فرق دارد.
حل تداخل با پیشوند
با پیشوند، اسم ها یکتا می شوند. سپس هر پیشوند به یک فضای نام وصل می شود.
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
ویژگی xmlns و تعریف فضای نام
با ویژگی «xmlns» پیشوند را به یک URI وصل کن. این URI فقط شناسه یکتا است.
<root>
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
نکته: می توانی xmlns را روی ریشه هم تعریف کنی تا همه فرزندان استفاده کنند.
<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="https://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
فضای نام پیش فرض
می توانی فضای نام پیش فرض بگذاری تا دیگر پیشوند ننویسی.
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table xmlns="https://www.w3schools.com/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
کاربرد واقعی: XSLT و فضاهای نام
در XSLT، پیشوند «xsl» به فضای نام XSLT وصل می شود. سپس الگوها اجرا می شوند.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
هشدار: URI فقط شناسه است. الزاماً صفحه وب فعال نیست.
گام های عملی
- برای هر منبع، پیشوند مشخص کن.
- با xmlns پیشوند را به URI وصل کن.
- در صورت نیاز، فضای نام پیش فرض تعیین کن.
برای ادامه، صفحه ویژگی ها و سینتکس XML را ببین. همچنین در عناصر XML ساختار را مرور کن. لینک داخلی با عبارت فضاهای نام XML نیز راهنماست.
جمع بندی سریع
- فضای نام جلوی تداخل نام را می گیرد.
- xmlns پیشوند را به URI وصل می کند.
- URI فقط شناسه یکتاست.
- می توانی فضای نام پیش فرض بگذاری.
- XSLT هم از فضای نام استفاده می کند.