<xsl:template match='PLANET' name='writer'>

  <xsl:choose>

   <xsl:when test='NAME'>

    <sql:insert table='planets'

     xsl:extension-element-prefixes='sql'>

     <sql:column name='Name' select='NAME'/>

     <sql:column name='Mass' select='MASS'/>

     <sql:column name='Radius' select='RADIUS'/>

     <sql:column name='Day' select='DAY'/>

    </sql:insert>

   </xsl:when>

   <xsl:otherwise>

   <sql:insert table='planets'

    xsl:extension-element-prefixes='sql'>

    <sql:column name='Name' select='' ''/>

    <sql:column name='Mass' select='' ''/>

    <sql:column name='Radius' select='' ''/>

    <sql:column name='Day' select='' ''/>

   </sql:insert>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

</xsl:stylesheet>

Эта таблица стилей правильно добавляет три записи в базу данных planets.mdb: по одной новой записи для каждой из планет. Как я говорил, здесь нельзя использовать готовый исполняемый файл saxon.exe, нужно применять класс Java com.icl.saxon.StyleSheet. Сначала нужно включить в classpath файл saxon.jar:

C:>set classpath=.;c:saxonsaxon.jar

После этого я могу передать в класс com.icl.saxon.StyleSheet файл planets.xml и таблицу стилей из листинга 10.11:

C:>java com.icl.saxon.StyleSheet planets.xml saxonsql.xsl

Теперь все сделано — данные планет вставлены в planets.mdb. Результаты применения этой таблицы стилей показаны на рис. 10.4, где я открыл planets.mdb в Microsoft Access. Таким образом, мы рассмотрели преобразование из XML в реляционную базу данных.

Рис. 10.4. Применение расширений SQL Saxon

Еще один аспект XSLT, в котором вам потребуется программирование, это поддержка XSLT на серверах. В качестве демонстрации далее я преобразую planets.xml при помощи planets.xsl с использованием активных серверных страниц (Active Server Pages, ASP) фирмы Microsoft, серверных страниц Java (Java Server Pages, JSP) фирмы Sun и сервлетов (servlet) Java, выполняющихся на web-серверах и возвращающих результирующий документ браузеру пользователя.

За недостатком места мы не можем подробно рассмотреть эти технологии, и если вы с ними не знакомы, вы можете получить дополнительную информацию в Интернете (как всегда, URL могут измениться):

• ASP. http://msdn.microsoft.com/workshop/c- frame.htm#/workshop/server/Default.asp (руководство и документация по ASP фирмы Microsoft);

• JSP. http://java.sun.com/products/jsp/ (главная страница Sun, посвященная JSP);

• Сервлеты. http://java.sun.com/products/servlet/ (главная страница Sun, посвященная сервлетам).

Применение XSLT с активными серверными страницами

Активные серверные страницы (Active Server Pages, ASP) выполняются на серверах Microsoft Windows NT или 2000, поэтому в ближайшем примере для преобразования planets.xml при помощи planets.xsl и возврата результата в виде документа HTML я воспользуюсь процессором Microsoft MSXML.

Это все то же преобразование, которое нам уже много раз встречалось, — создание HTML-таблицы данных о планетах — но на этот раз преобразование будет выполнено на web-сервере, который затем отправит его пользователю. В начале сценария ASP я установил тип содержимого MIME результирующего документа в «text/html», поэтому он будет трактоваться как HTML:

<%@LANGUAGE='VBScript'%>

<%

 Response.ContentType = 'text/html'

 .

 .

 .

Затем, во многом аналогично предыдущим примерам в этой главе с JavaScript, я создаю два объекта документа MSXML, один для документа XML, а другой — для документа XSL:

<%@LANGUAGE='VBScript'%>

<%

 Response.ContentType = 'text/html'

 Dim docXML

 Dim docXSL

 Set docXML = Server.CreateObject('MSXML2.DOMDocument.3.0')

 Set docXSL = Server.CreateObject('MSXML2.DOMDocument.3.0')

 .

 .

 .

Процедура загрузки этих документов на сервере во многом похожа на процедуру с использованием JavaScript, за тем исключением, что здесь правильные пути файлов получаются при помощи метода MapPath объекта Server. В данном случае я поместил planets.xml и planets.xsl в тот же каталог, что и сценарий ASP, поэтому документы загружаются так:

<%@LANGUAGE='VBScript'%>

<%

 Response.ContentType = 'text/html'

 Dim docXML

 Dim docXSL

 Set docXML = Server.CreateObject('MSXML2.DOMDocument.3.0')

 Set docXSL = Server.CreateObject('MSXML2.DOMDocument.3.0')

 docXML.ValidateOnParse = True

 docXSL.ValidateOnParse = True

 docXML.load Server.MapPath('planets.xml')

 docXSL.load Server.MapPath('planets.xsl')

 .

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату