объявление XML, помещаемое в результирующий документ, обычно включает версию XML (что обязательно) и информацию о кодировке (хотя формально информация о кодировке в документах XML не обязательна). Если задан атрибут standalone
, результирующий документ должен включать объявление отдельного документа с тем же значением, что и значение у атрибута standalone
.
При использовании атрибута doctype-system
процессор создает объявление типа документа непосредственно перед первым элементом. В этом случае имя, следующее за <! DOCTYPE>
, будет именем корневого элемента. Заметьте, что если вы также используете атрибут doctype-public
, процессор XSLT выведет «PUBLIC
», вслед за ним открытый идентификатор и затем системный идентификатор. Если вы не используете атрибут doctype- public
, процессор выведет «SYSTEM
» и вслед за ним системный идентификатор. Теоретически атрибут doctype-public
должен игнорироваться, если не задан также атрибут doctype-system
, хотя большинство процессоров, кажется, не следуют этому правилу. Мы увидим, как работать с атрибутами doctype-public
и doctype-system
в этой главе при преобразовании XML в XHTML.
Наконец, для метода вывода XML значением по умолчанию для атрибута media-type
является «text/xml
».
Вы уже встречали в этой книге многие XML-XML преобразования. Например, преобразование из главы 4 просто копировало один документ XML в другой. Обратите внимание на метод вывода, который установлен в XML:
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='xml'/>
<xsl:template match='@*|node()'>
<xsl:copy>
<xsl:apply-templates select='@*|node()'/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Этот пример был приведен в начале главы, в нем planets.xml
реорганизован на основе плотности планет:
<?xml version='1.0' encoding='UTF-8'?>
<DATA>
<DENSITY>
<VALUE>.983</VALUE>
<NAME>Mercury</NAME>
<MASS>.0553</MASS>
<DAY>58.65</DAY>
<RADIUS>1516</RADIUS>
</DENSITY>
<DENSITY>
<VALUE>.943</VALUE>
<NAME>Venus</NAME>
<MASS>.815</MASS>
<DAY>116.75</DAY>
<RADIUS>3716</RADIUS>
</DENSITY>
<DENSITY>
<VALUE>1</VALUE>
<NAME>Earth</NAME>
<MASS>1</MASS>
<DAY>1</DAY>
<RADIUS>2107</RADIUS>
</DENSITY>
</DATA>
Вот таблица стилей (листинг 6.3), создающая это преобразование.
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='xml' indent='yes'/>
<xsl:template match='PLANETS'>
<DATA>
<xsl:apply-templates/>
</DATA>
</xsl:template>
<xsl:template match='PLANET'>
<DENSITY>
<VALUE>
<xsl:value-of select='DENSITY'/>
</VALUE>
<xsl:apply-templates/>
</DENSITY>
</xsl:template>
<xsl:template match='NAME'>
<NAME>
<xsl:value-of select='.'/>
</NAME>
</xsl:template>
<xsl:template match='MASS'>
<MASS>
<xsl:value-of select='.'/>
</MASS>
</xsl:template>
<xsl:template match='RADIUS'>
<RADIUS>
<xsl:value-of select='.'/>
</RADIUS>
</xsl:template>
<xsl:template match='DAY'>
<DAY>
<xsl:value-of select='.'/>
</DAY>
</xsl:template>