Могу ли я использовать xinclude и сущности в одном и том же XML-файле?
Я работаю в DocBook 5.0, создавая среду для написания / редактирования / производства. Я проверяю свой XML на соответствие версии схемы DB5 DB5.
Чтобы сделать мою среду проще в использовании, мне нравится разбивать мои книги на несколько файлов, используя xinclude, чтобы вставить главы книги в файл книги. Прекрасно работает в моем XSLT.
Мне нравится использовать системные объекты, чтобы моим нетехническим авторам / редакторам было проще использовать некоторые специальные символы. Я установил файл сущностей с простыми в использовании именами для некоторых общих специальных символов (например: &emDash; for -).
Мне показалось, что я где-то читал, что нельзя использовать обе сущности и xinclude в одном и том же XML-файле. Я только попробовал это, хотя, и это проверяет и преобразовывает хорошо. Это нормально? Есть ли проблема здесь, которую я не вижу? Вот как я объявляю все свои вещи вверху файла книги:
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<!DOCTYPE book [
<!ENTITY % entities SYSTEM "utilities/entities/entities.ent">
%entities;
]>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf" version="5.0" xml:id="book">
Спасибо за любую помощь!
1 ответ
Вы пишете: "Я думал, что где-то читал, что нельзя использовать обе сущности и xinclude в одном и том же XML-файле".
Сначала ответ педанта языка:
Спецификация XInclude не запрещает использование сущностей; неясно, что он мог бы согласованно делать это, потому что он определен как работающий на уровне информационного набора, а не на уровне потока символов XML. И спецификация XML не запрещает использование XInclude при использовании сущностей. Так что ни одна из определяющих спецификаций для двух функций, которые вас интересуют, не запрещает этого.
Некоторые другие спецификации, пытающиеся определить профиль использования, могут запретить использование обеих сущностей и XInclude одновременно; Я ничего не знаю, но это мало что значит. Однако, если к вам применимы какие-либо подобные профили, я ожидаю, что вы о них узнаете.
Поскольку XInclude иногда рассматривается как способ сделать ненужные сущности (ну, по крайней мере, внешние сущности), некоторые энтузиасты XInclude вполне могут считать использование сущностей вместе с XInclude плохим вкусом; это будет иметь значение для вас, если вам случится работать с любыми людьми, которые чувствуют это так и заботятся о том, что они думают, но в противном случае вы можете свободно помахать им и заняться своей работой. (Я подозреваю, что если вы читали что-то из того, что вы помните, это было утверждение о том, что автор считал хорошей практикой или хорошим вкусом; это, безусловно, не утверждение о том, что законно или технически возможно).
Во-вторых, практический ответ: некоторые процессоры и цепочки инструментов поддерживают использование объектов, объявленных во внешнем подмножестве DTD, некоторые поддерживают XInclude, некоторые поддерживают оба. Проверьте инструменты, которые вам интересны; если они все работают с данными так, как вы хотели бы их создать, у вас нет проблем.