Как объявить элемент root документа XML в схеме XSD? - PullRequest
1 голос
/ 16 февраля 2020

Я работаю над проблемой для класса XML, и я новичок в этом. Мой XSD-файл проверяется. Файл XML имеет следующую ошибку проверки: Не удается найти объявление элемента 'catalog'. Имя файла XSD - catalog.xsd, а код XSD, в котором объявлен элемент «catalog»:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

   <xs:element name="description" type="xs:string" />
   <xs:element name="date" type="xs:string" />
   <xs:attribute name="metadata" type="xs:string" />
   <xs:attribute name="cid" type="cidType" />
   <xs:attribute name="src" type="srcType" />
   <xs:attribute name="donatedBy" type="xs:string" />


   <xs:simpleType name="cidType">
      <xs:restriction base="xs:ID">
         <xs:pattern value="c\d{4}" />
      </xs:restriction>
   </xs:simpleType>

   <xs:simpleType name="srcType">
      <xs:restriction base="xs:string">
         <xs:pattern value="[a-zA-Z0-9]+.jpg" />
      </xs:restriction>
   </xs:simpleType>

   <xs:complexType name="catalog">
      <xs:sequence>
         <xs:element name="photo" minOccurs="1" maxOccurs="unbounded" />
      </xs:sequence>
   </xs:complexType>

Мне удалось устранить все другие ошибки проверки, поэтому два файла, похоже, ссылаются друг на друга должным образом. Есть ли шаг, который я пропустил? Должен ли элемент «catalog» быть объявлен по-другому?

Спасибо!

Я добавляю код XML, я подумал, что, возможно, я что-то там упустил. Имя файла для xml - каталог. xml.


<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="catalog.xsd">

   <photo cid="c1748" donatedBy="John Borelli">
      <name metadata="tunis cooper property museum">Tunis R. Cooper property</name>
      <description>
      <![CDATA[ 
         This photo was taken by John Borelli's great-grandfather. It is believed to have been taken around 1830.
         David Demarest originally purchased the site of the chair factory in 1663. This site was under the ownership 
         of the Demarest family until 1758.  The property is listed in the National and New Jersey Registers of Historic Places.
      ]]>
      </description>
      <date>circa 1830</date>
      <images>
         <img src="1748a.jpg" />
         <img src="1748b.jpg" />
      </images>
   </photo>

1 Ответ

0 голосов
/ 16 февраля 2020

Ответ на ваш главный вопрос: вы не можете. XSD по замыслу считает каждое поддерево действительного элемента действительным по своему собственному праву, и чтобы гарантировать, что это свойство сохраняется, оно не позволяет схеме сказать, что элемент E является допустимой проверкой root, когда его дочерние элементы F, G и H - нет.

Но, читая за заголовком, это не ваша проблема. Вам не нужно объявлять, что каталог является элементом root документа, вам просто нужно объявить его.

И из того, что вы показали, выглядит так, как будто вы это сделали. Таким образом, две наиболее вероятные причины ошибки:

(a) документ вашего экземпляра фактически укоренен в элементе каталога в другом пространстве имен

(b) вы на самом деле не преуспели в этом загрузка этого документа схемы и предоставление его валидатору. Вы говорите, что «исправили другие ошибки проверки», поэтому это говорит о том, что вы выбираете схему, поэтому, возможно, (а) более вероятно.

Чтобы диагностировать (а), нам понадобится просмотреть документ экземпляра. Для диагностики (б) нам нужно увидеть, как вы вызываете валидатор схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...