Не удается найти объявление элемента 'назначений' - PullRequest
3 голосов
/ 20 сентября 2009

Итак, я начинаю с XML и схем, и я столкнулся с этим сегодня, и я не смог понять это.

Я получаю сообщение об ошибке,

Ln 5 Col 2: Не удается найти объявление элемента «присваивания».

Я считаю, что я объявил элемент, но, возможно, я что-то упустил и не сделал.

Это мой XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<assignments
    xmlns="http://www.w3.org/2001/XMLSchema-instance"
    SchemaLocation="A3.xsd"
>
    <assignment id="a1">
        <name>Schemas</name>
        <page>110</page>
    </assignment>

    <assignment id="a2">
        <name>Namespaces</name>
        <page>258</page>
        <files>names.xml</files>
        <files>names.dtd</files>
    </assignment>

    <assignment id="a3">
        <name>RELAX NG</name>
        <page>305</page>
        <files>account.xml</files>
        <files>customers.xml</files>
        <files>finance.xsd</files>
    </assignment>

</assignments>

Это мой файл схемы:

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:target="http://www.levijackson.net/web340/ns" 
    targetNamespace="http://www.levijackson.net/web340/ns" elementFormDefault="qualified"
>
<element name="assignments" type="target:TypeAssignments"></element>

<complexType name="TypeAssignments">
    <sequence>
        <element name="assignment" type="target:assignmentInfo"></element>
    </sequence>
    <attribute name="id" type="string" use="required"/>
</complexType>

<complexType name="assignmentInfo">
    <sequence>
            <element name="name" type="string"></element>
            <element name="page" type="target:TypePage"></element>
            <element name="file" type="target:TypeFile" minOccurs="0" maxOccurs="unbounded"></element>
    </sequence>
</complexType>

<simpleType name="TypePage">
    <restriction base="integer">
        <minInclusive value="50" />
        <maxInclusive value="498" />
    </restriction>
</simpleType>

<simpleType name="TypeFile">
    <restriction base="string">
        <enumeration value=".xml" />
        <enumeration value=".dtd" />
        <enumeration value=".xsd" />
    </restriction>
</simpleType>

</schema>

Поскольку я все еще учусь, не стесняйтесь указывать на любые другие ошибки, которые я мог совершить, не связанные с этой проблемой.

Спасибо
Леви

Ответы [ 3 ]

2 голосов
/ 26 сентября 2009

Решение этой проблемы состояло в том, что я не объявлял «назначения» своего основного элемента как сложный элемент , я фактически не объявлял его как что-либо вообще.

Итак, взяв эту строку из моего файла схемы:

<element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"></element>

и изменим это на:

<element name="assignments">
    <complexType>
        <sequence>
            <element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"></element>
        </sequence>
    </complexType>
</element>

Элемент был правильно определен, спасибо всем за помощь.

Леви

0 голосов
/ 22 сентября 2009

В вашем экземпляре документа, как указано выше, вы определяете атрибут xmlns в элементе <assignments> и нигде не определяете пространство имен. Это означает, что пространство имен <assignments> и всех его потомков установлено на "http://www.w3.org/2001/XMLSchema-instance".

Однако в вашем документе схемы указано значение targetNamespace, равное "http://www.levijackson.net/web340/ns".. Поскольку элементы в вашем экземпляре документа не имеют этого пространства имен, проверка не пройдена.

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

<assignments
    xmlns="http://www.levijackson.net/web340/ns"
0 голосов
/ 20 сентября 2009

Попробуйте следующее. Я взял некоторые дополнительные детали элемента схемы, но с небольшой настройкой должно работать что-то вроде следующего:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">        
  <xs:element name="assignments" type="TypeAssignments" />    
  <xs:complexType name="TypeAssignments">
    <xs:sequence>
      <xs:element name="assignment" type="assignmentInfo" 
          minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>        
  </xs:complexType>

  <xs:complexType name="assignmentInfo">
    <xs:sequence>
      <xs:element name="name" type="xs:string" />
      <xs:element name="page" type="TypePage" />
      <xs:element name="files" type="xs:string"  minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required" />
  </xs:complexType>   

  <xs:simpleType name="TypePage">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="50" />
      <xs:maxInclusive value="498" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TypeFile">
    <xs:restriction base="xs:string">
      <xs:enumeration value=".xml" />
      <xs:enumeration value=".dtd" />
      <xs:enumeration value=".xsd" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

Примечания :

  1. Атрибут ID был перемещен с TypeAssignments на assignmentInfo.
  2. Все типы и имена элементов имеют префикс пространства имен xs
  3. Я добавил атрибуты minOccurs и maxOccurs для элементов присваивания. В противном случае в назначениях допускается только один элемент назначения.
  4. Я автоматически закрывал ваши элементы, используя "/>" вместо "" Не обязательно, но чуть меньше набирал.

В общем, я не так сильно изменил, поэтому у вас есть правильная идея.

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