cv c -elt.1: не удается найти объявление элемента games - PullRequest
0 голосов
/ 08 мая 2020

Я следую основному c книжному обучению XML. Точное следование книге и редактирование XML слегка дало мне эту ошибку:

cvc-elt.1: Cannot find the declaration of element 'games'. 

XML:

<?xml version="1.0" encoding="utf-8"?>

<games
  xmlns="http://tempuri.org/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://tempuri.org game.xsd">
  <game>
    <title>Red Dead Redeption Two</title>
    <platform>Xbox One</platform>
    <desc>Red Dead Redeption Two is a western action adventure game</desc>
    <img>Cover.png</img>
  </game>
</games>

XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema
targetNamespace="http://tempuri.org"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema games.xsd">

  <xs:element name="games">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="game" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="title" type="xs:string"/>
              <xs:element name="platform" type="xs:string"/>
              <xs:element name="desc" type="xs:string"/>
              <xs:element name="img" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

1 Ответ

0 голосов
/ 08 мая 2020

XSD

Измените

xmlns:xs="http://www.w3.org/2001/XMLSchema games.xsd"

на

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

, потому что последнее является фактическим определением пространства имен XMLSchema, а первое, похоже, ошибочно попытаться следовать форме атрибута schemaLocation.

Удалите следующее:

xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"

, потому что пространство имен XSD по умолчанию не должно быть http://tempuri.org/XMLSchema.xsd и потому что mstns объявление префикса пространства имен не требуется.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema
    targetNamespace="http://tempuri.org"
    elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="games">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="game" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="title" type="xs:string"/>
              <xs:element name="platform" type="xs:string"/>
              <xs:element name="desc" type="xs:string"/>
              <xs:element name="img" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XML

Замените

xmlns="http://tempuri.org/"

на

xmlns="http://tempuri.org"

, чтобы соответствовать как targetNamespace в XSD и schemaLocation в XML.

<?xml version="1.0" encoding="utf-8"?>
<games
  xmlns="http://tempuri.org"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://tempuri.org games.xsd">
  <game>
    <title>Red Dead Redeption Two</title>
    <platform>Xbox One</platform>
    <desc>Red Dead Redeption Two is a western action adventure game</desc>
    <img>Cover.png</img>
  </game>
</games>

После внесения вышеуказанных изменений ваш XML будет успешно проверен на соответствие вашему XSD.

...