Oracle XSL процессор расширяет пространства имен - PullRequest
1 голос
/ 14 января 2010

Я генерирую и проверяю XML и столкнулся с проблемой, когда Oracle расширяет полное пространство имен из префикса. Исходный документ может выглядеть так:

<pcy>
  <tList>
    <currTrn>
      <TXN_A>1</TXN_A>
      <TXN_B>2</TXN_B>
      ...

преобразование выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sc="http://www.myCompany.com/schemaAlpha" xmlns:pl="http://www.myCompany.com/schemaBeta">
    <xsl:template match="/">
        <pcyItem>
            <pl:mainTList>
                <pl:currentTrnItem>
                    <sc:primaryTrnID>
                        <xsl:value-of select="/pcy/tList/currTrn/TXN_A"/>
                    </sc:primaryTrnID>
                    <sc:secondaryTrnID>
                        <xsl:value-of select="/pcy/tList/currTrn/TXN_B"/>
                    </sc:secondaryTrnID>
                                        ...

Правильный вывод, который я ожидаю (и который я получаю, когда использую такие программы, как JEdit - с плагином преобразования XML), выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<pcyItem xmlns:pl="http://www.myCompany.com/schemaAlpha" xmlns:sc="http://www.myCompany.com/schemaBeta">
    <pl:mainTList>
        <pl:currentTrnItem>
            <sc:primaryTrnID>1</scom:primaryTrnID>
            <sc:secondaryTrnID>2</scom:secondaryTrnID>
                        ...

То, что на самом деле производит Oracle, выглядит примерно так:

<pcyItem>
  <pl:mainTList xmlns:pl="http://www.myCompany.com/schemaAlpha">
    <pl:currentTrnItem>
      <sc:primaryTrnID xmlns:sc="http://www.myCompany.com/schemaBeta">1</sc:primaryTrnID>
      <sc:secondaryTrnID xmlns:sc="http://www.myCompany.com/schemaBeta">2</sc:secondaryTrnID>
      ...

Мне кажется, что Oracle "встраивает" или расширяет все префиксы пространства имен. Почему это происходит, и как я могу остановить его?

Ответы [ 3 ]

0 голосов
/ 15 января 2010

Еще один способ взглянуть на это: вам нужно остановить процессор Oracle, делающий это?

Примеры вывода семантически идентичны начиная с pcyItem, поэтому, по-видимому, это просто «хорошо выглядит», что касается вас. Процессор Oracle предпочитает объявлять пространства имен только в той точке, в которой они необходимы, а не делать их доступными по всему документу. Можно утверждать, что этот более конкретный обзор лучше, но я думаю, что все сводится к вкусу. Я сомневаюсь, что с этим можно что-нибудь сделать.

Все, что потребляет выходные данные преобразования, кроме человека, не заботится о том, какую форму оно читает, поэтому, вероятно, не стоит беспокоиться о слишком большом количестве.

0 голосов
/ 15 января 2010

Удалось исправить это, изменив XSL:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <pcyItem xmlns:sc="http://www.myCompany.com/schemaBeta" xmlns:pl="http://www.myCompany.com/schemaAlpha">
          ...
0 голосов
/ 14 января 2010

Просто догадываюсь, но похоже, что Oracle неявно устанавливает

exclude-result-prefixes="pl sc"

Я бы попробовал установить

exclude-result-prefixes="#default"

для переопределения возможного неявного exclude .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...