Оказывается, мне не нужно было ничего делать со встроенным фрагментом. Конечная точка смогла понять пространство имен по умолчанию для встроенных документов (но если кто-то захочет ответить на это, я не буду возражать).
Единственное изменение, которое мне нужно было сделать, чтобы ответить Майклу, было добавить объявление пространства имен в тег "envelope". (Ни в коем случае Мишель не мог знать, что для завершения процесса понадобилось другое пространство имен.)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"
xmlns:client="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"
xmlns:ns2="http://mismo.org/aus/"
xmlns:ns1="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/fha:TOTALRequest-Response-Keys">
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:f17="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"
xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard">
<soapenv:Body>
<xsl:apply-templates select="fha:TOTALRequest-Response/client:process"/>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
<xsl:template match="client:*">
<xsl:element name="fha:{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
там какие-либо общие рекомендации или обходные решения для организации или перераспределения шаблонных членских определений через несколько файлов?
Да; не делать.
спецификация C++ разрешает компилятору быть в состоянии "видеть" весь шаблон (определение объявления и ) при инстанцировании, и (из-за сложностей любой реализации), большинство компиляторов сохраняет это требование. Результат - то, что #inclusion любого шаблонного заголовка должен также #include любой и весь источник, требуемый инстанцировать шаблона.
самый легкий способ иметь дело с этим состоит в том, чтобы вывести все в заголовок, встроенный, где возможно, исключительный в случае необходимости.
, Если Вы действительно рассматриваете это как недопустимое оскорбление, общая опция состоит в том, чтобы разделить шаблон на обычную пару заголовка/реализации, и затем #include файл реализации в конце заголовка.
функция C++ "экспорта" может или не может обеспечить другое обходное решение. Функция плохо поддерживается и плохо определяется; хотя это в принципе должно разрешить некоторую раздельную компиляцию шаблонов, это не обязательно устраняет требование что компилятор быть в состоянии видеть все шаблонное тело.
Через сколько файлов? Если Вы просто хотите отделиться, определения классов от реализации тогда пробуют эта статья в часто задаваемых вопросах C++. Это о единственном способе, которым я знаю этого работы в данный момент, но некоторые IDE (CDT Eclipse, например) не свяжут этот метод правильно, и можно получить много ошибок. Однако при записи собственных make-файлов или использовании Visual C++ это всегда работало на меня:-)
Когда/если Ваш компилятор поддерживает C++ 0x, extern
, ключевое слово может использоваться для разделения объявлений шаблона от определений.
См. здесь для краткого объяснения.
кроме того, разделите 6.3, "Разделительная Модель", из Шаблоны C++: полное руководство David Vandevoorde и Nicolai M. Josuttis описывает другие опции.