XML - статьи

         

Деление XML-документов на фрагменты


Когда сохраняете XML-документ, вы иногда не хотите отображать каждый XML-элемент в столбцах реляционной таблицы. Вместо этого, вы можете захотеть сохранить некоторые XML-фрагменты в XML CLOB или XMLType. Следующий пример иллюстрирует подход в использование XSLT для создания таких XML-фрагментов и вставки этих же XML-фрагментов в один столбец XMLType-таблицы, используя XSU. В примере добавляемый XML-документ представлен как: <Contact_List> <Contact> <User_id>jwang</User_id> <First_Name>Jinyu</First_Name> <Last_Name>Wang</Last_Name> <Title>Senior Product Manager</Title> <Description>Jinyu manages the <PRODUCT>Oracle XML Developer's Kit</PRODUCT> product.</Description> </Contact> </Contact_List>

Элемент <Description> содержит смешанный контент, который мы не хотим отображать (to map) в несколько столбцов таблицы. Таблицы contact_tbl определяется, как показано далее: CREATE TABLE contact_tbl( contactid VARCHAR2(15) PRIMARY KEY, firstname VARCHAR2(100), lastname VARCHAR2(200), midname VARCHAR2(50), description CLOB);

Для отображения элемента <Description> в столбец description, используя XSU, вам нужно задействовать следующую setCDATA.xsl таблицу стилей XSL: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output cdata-section-elements="CODE"/> <!-- Identity transformation --> <xsl:template match="*|@*|comment()|processing-instruction()| text()"> <xsl:copy> <xsl:apply-templates select="*|@*|comment()|processing-instruction()| text()"/> </xsl:copy> </xsl:template> <xsl:template match="Description"> <xsl:element name="Description"> <xsl:copy-of select="@*|comment()|processing-instruction()"/> <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> <xsl:apply-templates select="*|./*/@*|./*/comment()|./*/ processing-instruction()|text()"/> <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text> </xsl:element> </xsl:template> </xsl:stylesheet>

Это XSLT-преобразование трансформирует входящий XML-документ и включит все дочерние элементы <Description> в одну секций CDATA, так что каждая секция CDATA может быть сохранена с помощью XSU в столбце description.

Вы можете модифицировать таблицу стилей XSL для вашего приложения, специфицируя различные match-атрибуты по следующему шаблону:

<xsl:template match="Description">… </ xsl:template>

XPath в match-атрибуте специфицирует корневой элемент для сохранения XML-фрагмента.



Содержание раздела