Xsltpro c "соблюдает" порядок и содержимое, указанные в DTD? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь выяснить, правильно ли я объявляю свои элементы DTD в документе xml. Из всего, что я могу сказать, ни xsltpro c, ни xmllint не обнаруживают ошибки достоверности в следующем документе:

<!DOCTYPE basic-dtd [
        <!ENTITY title "The Book of Love">
        <!ENTITY author "Jeffrey Halcomb">

        <!ELEMENT basic-dtd (title,author,subject,checked-out)>                                                                                                                   
        <!ELEMENT title (#PCDATA)>
        <!ELEMENT author (#PCDATA)>
        <!ELEMENT checked-out EMPTY>
]>

<basic-dtd>
        <author>&author;</author>
        <title>&title;</title>
        <subject>A treatise on love as a driving elemental force in nature</subject>
        <checked-out>Yes</checked-out>
</basic-dtd>

В моей инструкции doctype я (как мне кажется) указал:

  • правильный порядок элементов в элементе basi c -dtd: заголовок, автор, тема и извлечение.
  • элемент 'извлечен' не должен содержать никаких данных (PCDATA, CDATA, или дочерние элементы)

И все же, когда я запускаю следующую таблицу стилей для этого xml (xsltpro c basi c -dtd.xsl basi c -dtd. xml), он не сообщает об ошибках / предупреждениях.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >                                                                                                  
        <xsl:output omit-xml-declaration="no" indent="yes"/>
        <xsl:strip-space elements="*"/>
        <xsl:template match="/basic-dtd">
          <xsl:copy-of select="."/>
        </xsl:template>
</xsl:stylesheet>

Аналогично, когда я запускаю xmllint (xmllint --noent basi c -dtd. xml) - он не сообщает об ошибках.

xsltpro c и xmllint (с --noent) обрабатывают сущности и выдают ошибку, если используется неизвестная сущность.

Использую ли я apple-процессор для преобразования / печати оранжевого - xml (неправильный инструмент для работы), или это известная функция?

Спасибо,

Том

1 Ответ

0 голосов
/ 07 апреля 2020

Я не помню, чтобы xsltpro c делал проверку.

Попробуйте использовать --valid аргумент командной строки с xmllint .

Также есть возможность использования XSLT-процессора с поддержкой схемы / dtd, например Saxon PE /HE.

...