/ / добавяне на атрибут xpath-default-namespace към последния компилиран / трансформиран xml файл на schematron - xslt, xpath, schematron

добавяне на атрибут xpath-default-namespace към окончателния компилиран / трансформиран файл schematron xslt - xslt, xpath, schematron

Аз трябва да генерират schematron файлове за различниxml файлови схеми, използвайки наличната информация под елементите appinfo (правя трансформация xsl, за да генерирам схеми на schemantron, които се компилират отново по-късно).

Правилата за xpath, които се изискват за схеми за схеми, са написани под този appinfo елемент. Тези правила обаче не съдържат префикс на пространство за имена. По този начин не мога да използвам схемата "НЧ" маркер за добавяне на пространство за имена към компилирания окончателен xslt файл.

Решението би било добавяне на XPath-подразбиране-пространство от имена атрибут на окончателно съставен xslt. За съжаление не можах да намеря маркер за добавяне на атрибут xpath-default-namespace.

Има ли някакво решение за този случай? Благодаря.

Отговори:

1 за отговор № 1

Очевидно няма налична опция за задаване на a xpath-default-namespace, В допълнение към трансформирането на генерирания XSLT, друга опция би била да модифицира / разшири схемата XSLT, за да генерира желания изход, така че да можете да го генерирате в един пропуск.

  1. Създайте стилова таблица, която импортира iso_schematron_skeleton_for_saxon.xsl

Замяна на шаблона, който генерира element to insert thexpath-default-namespace` атрибут:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"
xmlns:iso="http://purl.oclc.org/dsdl/schematron"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"
version="2.0"
>
<xsl:import href="iso_schematron_skeleton_for_saxon.xsl"/>
<!-- Using XSLT 2 -->
<xsl:template
match="iso:schema[@queryBinding="xslt2" or @queryBinding ="xpath2"]"
priority="10">
<axsl:stylesheet
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:saxon="http://saxon.sf.net/">
<!-- insert the default namespace attribute -->
<xsl:attribute name="xpath-default-namespace" select=""http://your/default/namespace/goes/here""/>
<xsl:apply-templates
select="iso:ns" />
<!-- Handle the namespaces before the version attribute: reported to help SAXON -->
<xsl:attribute name="version">2.0</xsl:attribute>

<xsl:apply-templates select="." mode="stylesheetbody"/>
<!-- was xsl:call-template name="stylesheetbody"/ -->
</axsl:stylesheet>
</xsl:template>
</xsl:stylesheet>
  1. Променете iso_svrl_for_xslt2.xsl да импортирате вашите приоритетни стилове:

Променете пътя за импортиране на вашето превъзхождащо XSLT:

<!-- Select the import statement and adjust the path as
necessary for your system.
-->
<xsl:import href="iso_schematron_skeleton_for_saxon_with_default_namespace.xsl"/>

1 за отговор № 2

Тъй като XSLT е XML файл, можете да трансформирате компилирания / трансформирания XSLT schematron и да го вмъкнете @xpath-default-namespace себе си:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="/*">
<xsl:copy>
<xsl:attribute name="xpath-default-namespace" select=""http://your/default/namespace""/>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>