minOccurs maxOccurs не работает с Дита? - PullRequest
0 голосов
/ 01 апреля 2019

Я изменил minOccurs = 1 с элементом в xsd, и не добавил элемент в ditamap. Но дита хорошо работает. Нет предупреждения, нет ошибки. Примером является карта, которая представляет собой образцы dita-ot-3.3.

XSD:

   <xs:group name="bookmeta.content">
      <xs:sequence>
         <xs:group ref="linktext" minOccurs="1"/>
         <xs:group ref="searchtitle" minOccurs="1"/>
         <xs:group ref="shortdesc" minOccurs="1"/>
         <xs:group ref="author" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="source" minOccurs="1"/>
         <xs:group ref="publisherinformation" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="critdates" minOccurs="1"/>
         <xs:group ref="permissions" minOccurs="1"/>
         <xs:group ref="metadata" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="audience" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="category" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="keywords" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="prodinfo" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="othermeta" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="resourceid" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="ux-window" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="bookid" minOccurs="1"/>
         <xs:group ref="bookchangehistory" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="bookrights" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="data" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:group>

ditamap:

  <bookmeta>
    <author>Howe Tuduit</author>
    <bookid>
      <isbn>071271271X</isbn>
      <booknumber>SG99-9999-00</booknumber>
      <maintainer>
        <organization>Retro Tools</organization>
        <person/>
      </maintainer>
    </bookid>
    <bookrights>
      <copyrfirst>
        <year>2004</year>
      </copyrfirst>
      <copyrlast>
        <year>2007</year>
      </copyrlast>
      <bookowner>
        <organization>Retro Tools, Inc.</organization>
      </bookowner>
    </bookrights>
  </bookmeta>

Я думаю, что minOccurs должен работать. Выход будет неудачным.

1 Ответ

0 голосов
/ 02 апреля 2019

Вы, должно быть, изменили другой XSD-файл, отличный от ссылок DITA-OT.

Если я изменю dita-ot-3.3\plugins\org.oasis-open.dita.v1_3\schema\bookmap\xsd\bookmapMod.xsd для тестирования, сборка DITA-OT завершится неудачно со следующей ошибкой. Это ожидаемый результат.

[bookmapMod.xsd]

  <xs:group name="bookmeta.content">
     <xs:sequence>
        <xs:group ref="linktext" minOccurs="1"/>
        <xs:group ref="searchtitle" minOccurs="1"/>
        <xs:group ref="shortdesc" minOccurs="1"/>
        <xs:group ref="author" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="source" minOccurs="1"/>
        <xs:group ref="publisherinformation" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="critdates" minOccurs="1"/>
        <xs:group ref="permissions" minOccurs="1"/>
        <xs:group ref="metadata" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="audience" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="category" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="keywords" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="prodinfo" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="othermeta" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="resourceid" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="ux-window" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="bookid" minOccurs="1"/>
        <xs:group ref="bookchangehistory" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="bookrights" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="data" minOccurs="1" maxOccurs="unbounded"/>
     </xs:sequence>
  </xs:group>

[Bookmap]

<?xml version="1.0" encoding="UTF-8"?>
<bookmap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="urn:oasis:names:tc:dita:xsd:bookmap.xsd">
    <booktitle>
        <mainbooktitle>BookMapTest</mainbooktitle>
    </booktitle>
    <bookmeta>
        <author>Howe Tuduit</author>
        <bookid>
            <isbn>071271271X</isbn>
            <booknumber>SG99-9999-00</booknumber>
            <maintainer>
                <organization>Retro Tools</organization>
                <person/>
            </maintainer>
        </bookid>
        <bookrights>
            <copyrfirst>
                <year>2004</year>
            </copyrfirst>
            <copyrlast>
                <year>2007</year>
            </copyrlast>
            <bookowner>
                <organization>Retro Tools, Inc.</organization>
            </bookowner>
        </bookrights>
    </bookmeta>
    <chapter navtitle="Chapter"/>
</bookmap>

[Журнал ошибок]

СТРОИТЬ ОШИБКА D: \ DITA-OT \ dita-ot-3.3 \ plugins \ org.dita.base \ build.xml: 31: при выполнении этой строки произошла следующая ошибка: D: \ DITA-OT \ Dita-альфа-3,3 \ Plugins \ org.dita.base \ build_preprocess.xml: 62: Не удалось запустить конвейер: [DOTJ012F] [FATAL] Не удалось проанализировать ввод файл 'Файл: / C: /Users/toshi/OneDrive/Documents/test/dita/20190402-xsd/Bookmaptest.ditamap' .: Файл: / C: /Users/toshi/OneDrive/Documents/test/dita/20190402-xsd/Bookmaptest.ditamap Строка -1: найден недопустимый контент, начиная с элемента «author» Один из '{linktext}' ожидается.

Общее время: 2 секунды

Обратите внимание, что прямое изменение файла OASIS XSD не рекомендуется. Это сделано только для тестирования.

[Ответ на вывод справки HTML]

Я изменяю dita-ot-3.3 \ plugins \ org.oasis-open.dita.v1_3 \ schema \ bookmap \ xsd \ bookmapMod.xsd, как у вас, затем скомпилируйте с: dita -f htmlhelp -i D: \ dita-ot-3.3 \ docsrc \ samples \ taskbook.ditamap -o F: \ Study \ Dita \ output -v. Конечно, я изменяю ссылки на тетради с bookmap.xsd, а не DTD. Выход по-прежнему в порядке. Нет ошибок. -

Это связано с тем, что в выводе справки HTML используется "preprocess2", представленный ниже:

Предварительная обработка первой карты

Если вы измените следующую строку с «preprocess2» на «preprocess» в dita-ot-3.3 \ plugins \ org.dita.htmlhelp \ build_dita2htmlhelp.xml, вы обязательно получите ошибку проверки.

<target name="dita2htmlhelp" unless="noMap" depends="dita2htmlhelp.init,
build-init, use-init.envhhcdir, use-init.hhcdir, preprocess2,
htmlhelp.topics, htmlhelp.copy-image, copy-css">
<antcall target="dita.map.htmlhelp"/>
</target>

preprocess.init:

 [echo] *****************************************************************

 [echo] * input = D:\DITA-OT\dita-ot-3.3\docsrc\samples\taskbook.ditamap

 [echo] *****************************************************************

ditaval-слияния:

gen-list: [gen-list] Использование грамматического пула Xerces для DTD и схемы кэширование. [gen-list] Обработка file: / D: /DITA-OT/dita-ot-3.3/docsrc/samples/taskbook.ditamap Ошибка: Не удалось запустить конвейер: [DOTJ012F] [FATAL] Не удалось проанализировать ввод файл 'file: / D: /DITA-OT/dita-ot-3.3/docsrc/samples/taskbook.ditamap' .: file: / D: /DITA-OT/dita-ot-3.3/docsrc/samples/taskbook.ditamap Line 14: cvc-complex-type.2.4.a: найдено неверное содержимое, начиная с элемент «автор». Ожидается один из {{linktext} '.

...