Объявление ссылки на внешний объект: объекты упоминаются, но не объявляются (хотя они и есть)


I am trying to reference several entities such as ampersands, hyphens, etc. To do that, I already have a URL where an .ent document is deposited. Unfortunately, I have no DTD document and assuming that there is problem because of that (although all information I need is provided in the ent document).
The URL looks like this:
<!-- 
Copyright and Table of Contents (several blocks)
-->
<!-- ==================================================================== -->
<!-- 
Comment: first block
-->
<!ENTITY xxxx            "xxxx" ><!--comment-->
(...)
<!-- 
Comment: second block
-->
<!ENTITY xxxx            "xxxx" ><!--comment-->
(...)

Итак, сущности перечислены в документе. Мой XML относится к этому так:

<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE NAME_OF_THE_CREATOR_AND_VERSION [
<!ENTITY % NAME_OF_THE_CREATOR_AND_VERSION.ent SYSTEM "URL"> %NAME_OF_THE_CREATOR_AND_VERSION.ent; ]>
(...)

Я добавил подчеркивания, чтобы улучшить читаемость.

До сих пор у меня

  • добавлен автономный = нет
  • уменьшил ссылку на <!DOCTYPE NAME SYSTEM "URL">
  • добавил объекты в XML (хотя я бы предпочел найти способ сохранить внешнюю ссылку, поскольку документ .ent содержит множество объектов).
    Последний выглядит так:
<?xml version="1.0" encoding="US-ASCII" standalone="no"?>
<!DOCTYPE entities [
   <!ENTITY hyphen "&#x02010;">
   <!ENTITY copy "&#x000A9;">
   <!ENTITY nbsp "&#x000A0;">
   <!ENTITY ndash "&#x02013;">
   <!ENTITY auml "&#x000E4;">
   <!ENTITY uuml "&#x000FC;">
   <!ENTITY deg "&#x000B0;">
   <!ENTITY Delta "&#x00394;">
   <!ENTITY minus "&#x02212;">
   <!ENTITY ensp "&#x02002;">
]>

Я проверил синтаксис XML в BaseX, notepad ++ и XML Validator от w3schools, и каждый раз (за исключением внутреннего объявления) он говорит, что на объект (например, дефис) ссылались, но не объявляли, или что есть ошибка в объявлении разметки. Между тем, когда я проверил файл ent, он сказал, что в конце документа добавлен контент, начиная с объявлений сущностей, или что было использовано недопустимое имя элемента - но это, вероятно, связано с тем, что это файл ent?

Заранее спасибо за любую помощь и советы.
Лучше,
Элеонора

EDIT: Я использую графический интерфейс BaseX в Windows 10. Я включил Parse DTD и Entities, а также внутренний анализатор XML и вырезание пробелов.


person eleonore.shellstrop    schedule 03.02.2021    source источник


Ответы (1)


Я думаю, ты хочешь

<!DOCTYPE root-element-name [
<!ENTITY % myentities SYSTEM
   "myentities.ent">
%myentities;
]>
<root-element-name>&foo; &bar;</root-element-name>

Что касается BaseX, я думаю, что его опция по умолчанию отключает внешние объекты https://docs.basex.org/wiki/Options#DTD, поэтому вам нужно установить значение true, чтобы иметь возможность использовать внешний объект, например basex.bat -c "SET DTD true" -i input.xml query.xq.

person Martin Honnen    schedule 04.02.2021
comment
Спасибо. Я попробовал то, что вы предложили, но я все еще получаю ссылку на дефис, но не объявляю сообщение об ошибке. Я установил для Parse DTD и сущностей значение «да», изменяет ли это внешние сущности, которые будут включены? Где мне включить упомянутую вами команду basex.bat...? Заранее спасибо, Элеонора - person eleonore.shellstrop; 05.02.2021
comment
basex.bat — это интерфейс командной строки для BaseX, который вы обычно используете в Windows для выполнения запросов из командной строки, например. Powershell или командная строка. Непонятно, как вы запускаете BaseX и где вы устанавливаете параметры, поэтому я не могу сказать, должен ли ваш подход работать. Возможно, отредактируйте свой вопрос и более подробно опишите, как вы используете BaseX. - person Martin Honnen; 05.02.2021
comment
Спасибо, @Martin Honnen, я добавил правку. - person eleonore.shellstrop; 05.02.2021
comment
@eleonore.shellstrop, попробуйте, работает ли он без использования внутреннего синтаксического анализатора, я думаю, что он не справляется с задачей поддержки расширенных функций DTD. - person Martin Honnen; 05.02.2021
comment
Я пробовал, и, к сожалению, это все еще не работает. Я действительно не знаю, почему. - person eleonore.shellstrop; 05.02.2021
comment
@eleonore.shellstrop, можете ли вы показать нам более подробную информацию о том, чего вы пытаетесь достичь? Вы просто используете BaseX в качестве механизма XQuery для запроса XML-файлов в файловой системе или в Интернете? Или вы используете его как систему базы данных XML? Возникает ли ошибка с XML-документами, хранящимися в базе данных? Файл объекта также находится в базе данных? - person Martin Honnen; 05.02.2021
comment
Я использую его в качестве системы базы данных, и ошибка возникает с аналогичными XML-документами в базе данных. Объект, на который делается ссылка, хранится на веб-сайте, на который затем делается ссылка в ссылке. - person eleonore.shellstrop; 06.02.2021
comment
@eleonore.shellstrop, возможно, вы захотите задать вопрос в списке рассылки BaseX, разработчики BaseX обычно присутствуют и реагируют, и я уверен, что они могут лучше сказать, ссылается ли такой сценарий на XML-документ в базе данных на внешний объект. на веб-сайте вне базы данных поддерживается. - person Martin Honnen; 06.02.2021