Лучшим решением было бы изменить устаревшие данные, добавив отсутствующие метаданные.
Экземпляр измененного словаря "datamodel" может выглядеть примерно так:
<datamodel xmlns:nm="my:new.meta">
<customer>
<firstName type="string"
nm:nillable="false"
nm:minOccurs="1"
nm:maxOccurs="1"
/>
<lastName type="string"
nm:nillable="false"
nm:minOccurs="1"
nm:maxOccurs="1"
/>
<age type="int" nm:nillable="true"/>
</customer>
</datamodel>
Помещение новых свойств в отдельное пространство имен - это хороший способ легко отличить их от уже поддерживаемых свойств. Обычно использование атрибутов в пространстве имен не рекомендуется, поэтому, если этого следует избежать, можно использовать подэлементы (принадлежащие новому пространству имен) вместо атрибутов. Если новые атрибуты принадлежат другому пространству имен, это может привести к тому, что устаревшая схема проверки не отклонит их.
Если по каким-либо причинам невозможно изменить устаревшие данные, я бы рекомендовал не включать новые свойства в саму таблицу стилей XSLT (это вполне возможно, например, для определения этого как содержимого глобальной <xsl:variable>
), но для предоставления этих новых свойств в виде отдельного файла XML или набора из одного или нескольких файлов XML.
Любой файл XML может быть доступен динамически во время преобразования XSLT с помощью функции document () XSLT. Экземпляр файла XML с новыми свойствами может выглядеть так:
<newProperties xmlns:nm="my:new.meta">
<customer>
<firstName nm:nillable="false"
nm:minOccurs="1"
nm:maxOccurs="1"
/>
<lastName nm:nillable="false"
nm:minOccurs="1"
nm:maxOccurs="1"
/>
<age nm:nillable="true"/>
</customer>
</newProperties>
Надеюсь, это помогло.
Приветствия
Димитр Новатчев