Я считаю, что мне нужно DTD для определения схемы и XSLT, если я хочу отображать его в браузере и чтобы он выглядел «красиво». Но я не уверен, что еще мне нужно, чтобы иметь четко определенный XML-документ, который можно запрашивать с помощью XQuery и отображать в веб-браузере.





Строго говоря, вам ничего не нужно. XML работает даже без определения схемы.
Определение схемы (в XSD, RelaxNG или DTD) помогает различным инструментам, работающим с XML, поскольку они могут проверить, соответствует ли структура XML тому, что вы хотите.
Перевод XSLT в HTML хорош, если XML содержит информацию, которую вы хотите просмотреть в браузере. Впрочем, в этом нет необходимости.
Чтобы запросить XML с помощью XPath или XQuery, вам понадобится процессор XPath или XQuery.
Чтобы XML-документ мог быть запрошен с помощью XQquery, вам не нужно определять DTD или XSD. Целью DTD или XSD является определение строгой структуры XML-документа и обеспечение проверки перед использованием.
Современные браузеры очень хорошо интерпретируют файлы XML и показывают дерево DOM. Если необходимо расширенное форматирование XML для отображения в браузере, необходимо создать файл преобразования XSLT, а затем добавить в исходный документ XML директиву, указывающую на файл XSLT. Браузер выбирает эту директиву и использует встроенный XSLT-процессор для получения вывода, который затем интерпретируется браузером.
info.xml
<?xml version = "1.0" encoding = "iso-8859-1"?>
<?xml-stylesheet type = "text/xsl" href = "info.xslt"?>
<info>
<appName>My App</appName>
<version>1.0.129</version>
<buildTime>10-09-2008 12:44:03</buildTime>
</info>
info.xslt
<?xml version = "1.0" encoding = "iso-8859-1"?>
<xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<head>
<title>Application</title>
<style type = "text/css">
body { font-family: Lucida Console; }
#outer { text-align: left; }
#name {
font-weight: bold;
font-size: 1.2em;
}
#logo {
float: left;
padding-right: 20px;
padding-bottom: 200px;
}
</style>
</head>
<body>
<xsl:apply-templates select = "info" />
</body>
</html>
</xsl:template>
<xsl:template match = "info">
<img id = "logo" src = "image.png" />
<div id = "outer">
<div id = "name">
<xsl:value-of select = "appName"/>
</div>
<div id = "version">
<xsl:value-of select = "version"/>
</div>
<div id = "date">
<xsl:value-of select = "buildTime"/>
</div>
</div>
</xsl:template>
</xsl:stylesheet>