Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Символьные сущности в схеме


Автор: Се ля ви 12.6.2009, 09:40
В DTD была возможность создания символьных сущностей. Например, я в своих документах определял следующий набор:
Код
<?xml version="1.0" encoding="UTF-8"?>
    <!-- ... -->
    <!ENTITY nbsp "&#160;">
    <!ENTITY sect "&#167;">
    <!ENTITY copy "&#169;">
    <!ENTITY laquo "&#171;">
    <!ENTITY raquo "&#187;">
    <!ENTITY reg "&#174;">
    <!ENTITY mdash "&#8212;">
    <!ENTITY lsquo "&#8216;">
    <!ENTITY rsquo "&#8217;">
    <!ENTITY ldquo "&#8220;">
    <!ENTITY rdquo "&#8221;">
    <!ENTITY trade "&#8482;">

Сейчас перехожу на схемы, и использую автоматический конвертер из Altova XML Spy. Когда конвертируется этот фрагмент, сущности просто исчезают - они не доступны потом при создании документов и найти хоть что-то отдалённо-похожее в результирующей схеме не удаётся. По-видимому, от них просто отказались... :(((

Кто-нибудь можт подсказать, что сталось с символьными сущностями в XML Schema и какую альтернативу создатели-стандартизаторы предлагают им?

Автор: Се ля ви 16.6.2009, 19:57
Жаль, что никто не нашёл решения... :(

Мне это нужно было, вообще-то, для преобразований в XHTML.
Нашёлся кой-кокой обходной путь. Adobe Dreamweaver подсказал - в нём когда создаёшь XSLT-документ, он вначале сразу же помещает вот такоеобъявление:
Код
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet  [
    <!ENTITY nbsp   "&#160;">
    <!ENTITY copy   "&#169;">
    <!ENTITY reg    "&#174;">
    <!ENTITY trade  "&#8482;">
    <!ENTITY mdash  "&#8212;">
    <!ENTITY ldquo  "&#8220;">
    <!ENTITY rdquo  "&#8221;"> 
    <!ENTITY pound  "&#163;">
    <!ENTITY yen    "&#165;">
    <!ENTITY euro   "&#8364;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="/">
    <!-- ... -->
</xsl:template>
</xsl:stylesheet>

Этот !DOCTYPE вначале, соответственно, можно расширить ещё XHTML-сущностями при желании, хоть все их в него вставить.

Но это не до конца решает проблему - скорее, латает её в некотором частном случае, так что - всё ещё актуально.

Автор: diadiavova 19.6.2009, 07:50
В Visual Studio есть инструмент для генерации схемы из XML документа, если к нему подключен DTD, то схема генерится из него. Я как-то тоже заморочился этой проблемой и не найдя ничего в документации по схемам попробовал сгенерировать в студии схему из документа с DTD, содержащим ENTITY. Студия просто выдала сообщение, что невозможно сгенерить схему, потому что там содержатся ENTITY. Так что, видимо в схеме способов определить их, действительно нет  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)