Вопрос

Используя Document DTD, я сделал следующее:

файл.xsl:

<!DOCTYPE xsl:stylesheet[
  <!ENTITY red "rgb(255,0,0)">
]>

<xsl:stylesheet>
   [...]
   <xsl:attribute name="color">&red;</xsl:attribute>
   [...]
</xsl:stylesheet>

Я хотел изменить все на XML-схему.Итак, я попробовал:

файл.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="red" type="xs:token" fixed="rgb(255,0,0)" />
</xsd:schema>

файл.xsl:

<xsl:stylesheet
    xmlns:defs="http://www.w3.org/2001/XMLSchema-instance"
    defs:noNamespaceSchemaLocation="file.xsd">

    [...]
    <xsl:attribute name="color"><defs:red/></xsl:attribute>
    [...]
</xsl:stylesheet>

Теперь парсинг файла через Xalan red не транслируется как в версии DTD.Где моя ошибка?Файлы схемы не читаются в процессе анализа?

Это было полезно?

Решение

В fixed Атрибут в определении элемента не указывает синтаксическому анализатору выполнить замену текста.Это просто означает, что значение элемента всегда должно быть одинаковым.

Фактически, я считаю, что ваш XSLT создает XML, который не будет проверяться на соответствие вашей схеме, поскольку значение <defs:red> элемент не "rgb(255,0,0)".Даже если вы использовали default вместо fixed, это не замена текста.Это просто означает, что, если значение не указано, при запросе значения в экземпляре DOM вы обнаружите, что для него установлено значение «rgb(255,0,0)".

Другие советы

Использование схем для объявления структурных правил (а не DTD) не препятствует использованию сущностей.

Способ использования ссылок на сущности для замены объявленного содержимого не меняется.

Ссылки на сущности не обязательно объявлять только внутри файлов DTD.Вы можете объявить их встроенными в свои XML-файлы.

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY red "rgb(255,0,0)">
]>
<foo>
  <bar color="&red;" /> 
</foo>

http://www.ibm.com/developerworks/xml/library/x-tipentref.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top