cvc-elt.1.a: не удается найти объявление элемента 'commentaires' - PullRequest
0 голосов
/ 27 сентября 2018

Я хотел бы проверить свой XML-код с помощью XSD.Сначала я создал его без пространства имен, и он работал правильно.Тем не менее, я хотел бы иметь пространство имен, но здесь все сложно.Действительно, с помощью приведенного ниже кода, когда я попытаюсь проверить свой XML, все, что я добавлю в качестве элементов, будет считаться «правильным» моим программным обеспечением (Editix), даже когда это должно быть неверно (например, написать строку вместо даты).

Может ли кто-нибудь помочь мне, пожалуйста?

Вот мой код XML:

<commentaires xsi:SchemaLocation="benoit@agroparistech.fr DM-commentaires.xsd"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com="benoit@agroparistech.fr">

<com:commentaire id-commentaire="ID1">
    <com:date>
        2018-03-13
    </com:date>
    <com:auteur>
        Jean Dupont
    </com:auteur>
    <com:texte>
        La cuisine était délicieuce, je ne peux que vous conseiller l'entremet à la fraise!
    </com:texte>
</com:commentaire>
</commentaires>

А вот код XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="benoit@agroparistech.fr" xmlns="benoit@agroparistech.fr" elementFormDefault="qualified">

<xs:element name="auteur" type="xs:string"/>
<xs:element name="date" type="xs:date"/>
<xs:element name="texte" type="xs:string"/>

<xs:attribute name="id-commentaire" type="xs:string"/>


<xs:element name="commentaire">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="date"/>
            <xs:element ref="auteur"/>
            <xs:element ref="texte"/>
        </xs:sequence>
        <xs:attribute ref="id-commentaire" use="required"/>
    </xs:complexType>
</xs:element>

<xs:element name="commentaires">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="commentaire" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

1 Ответ

0 голосов
/ 27 сентября 2018

Исправления:

  1. Изменить xsi:SchemaLocation на xsi:schemaLocation.Дело имеет значение.
  2. Поместите commentaires в целевое пространство имен.
  3. Поместите id-commentaire в целевое пространство имен.
  4. Измените значение пространства имен с адреса электронной почты на URI.(Это необязательно, но предпочтительнее.)

Исправленные, действительные XML и XSD:

XML

<com:commentaires xsi:schemaLocation="http://agroparistech.fr/commentaires DM-commentaires.xsd"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:com="http://agroparistech.fr/commentaires">

  <com:commentaire com:id-commentaire="ID1">
    <com:date>
      2018-03-13
    </com:date>
    <com:auteur>
      Jean Dupont
    </com:auteur>
    <com:texte>
      La cuisine était délicieuce, je ne peux que vous conseiller l'entremet à la fraise!
    </com:texte>
  </com:commentaire>
</com:commentaires>

XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://agroparistech.fr/commentaires"
           xmlns="http://agroparistech.fr/commentaires"
           elementFormDefault="qualified">

  <xs:element name="auteur" type="xs:string"/>
  <xs:element name="date" type="xs:date"/>
  <xs:element name="texte" type="xs:string"/>

  <xs:attribute name="id-commentaire" type="xs:string"/>

  <xs:element name="commentaire">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="date"/>
        <xs:element ref="auteur"/>
        <xs:element ref="texte"/>
      </xs:sequence>
      <xs:attribute ref="id-commentaire" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="commentaires">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="commentaire" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>
...