Можно ли включить ссылку DOCTYPE на DTD внутри XML-файла манифеста Repo?

Я написал XML-файл манифеста для репо (или git-repo, Gerrit Repo, Google Repo, в зависимости от того, как вы хотите его назвать). Чтобы проверить мой синтаксис, я попытался сгенерировать файл определения типа документа (DTD), чтобы он соответствовал текстовому документу формата манифеста репо. Когда я включаю <!DOCTYPE manifest SYSTEM "manifest.dtd"> В моем XML-файле манифеста репо молча не может получить данные из репозиториев.

Можно ли включить ссылку DOCTYPE на DTD внутри XML-файла манифеста Repo, и репо все еще работает?

На самом деле я проверяю, возможно, я что-то сделал неправильно в моем синтаксисе, или репо имеет некоторые ограничения в своих возможностях синтаксического анализа XML. Без других изменений манифест, который я написал, работает, когда строка DOCTYPE опущена.

Я относительно уверен, что синтаксис XML и DTD правильный, как я могу назвать xmllint в файле, когда присутствует строка DOCTYPE, и посмотрите, как он проверяет XML на соответствие DTD. Когда я впервые запустил цикл lint, он поймал пару опечаток, и это именно то, что я хотел бы сделать, определив файл DTD.

Вот этот файл DTD:

<!ELEMENT manifest (notice?,
                    remote*,
                    default?,
                    manifest-server?,
                    remove-project*,
                    project*,
                    extend-project*,
                    repo-hooks?,
                    include*)>

<!ELEMENT notice (#PCDATA)>

<!ELEMENT remote EMPTY>
    <!ATTLIST remote name         ID    #REQUIRED>
    <!ATTLIST remote alias        CDATA #IMPLIED>
    <!ATTLIST remote fetch        CDATA #REQUIRED>
    <!ATTLIST remote pushurl      CDATA #IMPLIED>
    <!ATTLIST remote review       CDATA #IMPLIED>
    <!ATTLIST remote revision     CDATA #IMPLIED>

<!ELEMENT default EMPTY>
    <!ATTLIST default remote      IDREF #IMPLIED>
    <!ATTLIST default revision    CDATA #IMPLIED>
    <!ATTLIST default dest-branch CDATA #IMPLIED>
    <!ATTLIST default sync-j      CDATA #IMPLIED>
    <!ATTLIST default sync-c      CDATA #IMPLIED>
    <!ATTLIST default sync-s      CDATA #IMPLIED>

<!ELEMENT manifest-server EMPTY>
    <!ATTLIST manifest-server url CDATA #REQUIRED>

<!ELEMENT project (annotation*,
                   project*,
                   copyfile*,
                   linkfile*)>
    <!ATTLIST project name        CDATA #REQUIRED>
    <!ATTLIST project path        CDATA #IMPLIED>
    <!ATTLIST project remote      IDREF #IMPLIED>
    <!ATTLIST project revision    CDATA #IMPLIED>
    <!ATTLIST project dest-branch CDATA #IMPLIED>
    <!ATTLIST project groups      CDATA #IMPLIED>
    <!ATTLIST project sync-c      CDATA #IMPLIED>
    <!ATTLIST project sync-s      CDATA #IMPLIED>
    <!ATTLIST project upstream    CDATA #IMPLIED>
    <!ATTLIST project clone-depth CDATA #IMPLIED>
    <!ATTLIST project force-path  CDATA #IMPLIED>

<!ELEMENT annotation EMPTY>
    <!ATTLIST annotation name  CDATA #REQUIRED>
    <!ATTLIST annotation value CDATA #REQUIRED>
    <!ATTLIST annotation keep  CDATA "true">

<!ELEMENT copyfile EMPTY>
    <!ATTLIST copyfile src  CDATA #REQUIRED>
    <!ATTLIST copyfile dest CDATA #REQUIRED>

<!ELEMENT linkfile EMPTY>
    <!ATTLIST linkfile src  CDATA #REQUIRED>
    <!ATTLIST linkfile dest CDATA #REQUIRED>

<!ELEMENT extend-project EMPTY>
    <!ATTLIST extend-project name   CDATA #REQUIRED>
    <!ATTLIST extend-project path   CDATA #IMPLIED>
    <!ATTLIST extend-project groups CDATA #IMPLIED>

<!ELEMENT remove-project EMPTY>
    <!ATTLIST remove-project name  CDATA #REQUIRED>

<!ELEMENT repo-hooks EMPTY>
    <!ATTLIST repo-hooks in-project   CDATA #REQUIRED>
    <!ATTLIST repo-hooks enabled-list CDATA #REQUIRED>

<!ELEMENT include EMPTY>
    <!ATTLIST include name CDATA #REQUIRED>

Я пишу манифест для рабочей области Yocto, поэтому минимальный демонстрационный файл manifest.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest SYSTEM "manifest.dtd">
<manifest>
  <remote name="yoctop" fetch="git://git.yoctoproject.org/"/>
  <remote name="oe" fetch="git://github.com/openembedded"/>
  <default sync-j="4" revision="krogoth"/>
  <project name="poky" remote="yoctop" path="./"/>
  <project name="meta-openembedded" remote="oe" path="meta-openembedded"/>
</manifest>

Установив строку DOCTYPE, я обнаружил, что версия репозитория v1.12.37 молча дает сбой при инициации и последующей синхронизации. Без линии DOCTYPE вы получаете базовую рабочую область Yocto.

Для того, чтобы репо было счастливым, вам нужно иметь манифест в репозитории Git.

0 ответов

Другие вопросы по тегам