Ошибка при проверке XML на XSD - PullRequest
5 голосов
/ 26 июня 2011

Я получил простой XML-файл, который я хочу проверить на XSD. Когда я проверяю с помощью некоторого случайного валидатора, я всегда получаю следующую ошибку:

Обнаружен недопустимый контент, начиная с элемента «Сущности». Ожидается одна из '{Entities}'.

Вот XML:

<BusinessModel xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Entities>
    <Entity Name="Customer">
        <Attribute Name="Forename" Type="String" />
        <Attribute Name="Surname" Type="String" />
        <Attribute Name="Birthday" Type="Date" />
    </Entity>
</Entities>
</BusinessModel>

Как и XSD:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://schemas.testxyzxyz.de/xyz/BusinessModel"
        xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel">

<xsd:element name="BusinessModel" type="BusinessModelType" />

<xsd:complexType name="BusinessModelType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="Entities" type="EntitiesType" />
    </xsd:choice>
</xsd:complexType>

<xsd:complexType name="EntitiesType">
    <xsd:sequence>
        <xsd:element name="Entity" type="EntityType" maxOccurs="unbounded" />
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="AttributeType">
    <xsd:attribute name="Name" type="xsd:string" use="required" />
    <xsd:attribute name="Type" type="xsd:string" use="required" />
</xsd:complexType>

<xsd:complexType name="EntityType">
    <xsd:sequence>
        <xsd:element name="Attribute" type="AttributeType" maxOccurs="unbounded" minOccurs="1" />
    </xsd:sequence>
        <xsd:attribute name="Name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:schema>

Ищите эту проблему часами, а я до сих пор не нахожу ошибки. Можете ли вы определить мне правильное направление? ;)

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

XML-представление компонентов схемы объявления элементов :

{целевое пространство имен}

Если присутствует form и его фактическое значение равно qualified, или если form отсутствует и фактическое значение составляет elementFormDefault на <schema> предком является qualified, тогда фактическое значение targetNamespace [атрибута] родительского <schema> информационного элемента элемента или отсутствует , если его нет, в противном случае отсутствует .

Поскольку значение по умолчанию elemeFormDefault равно unqualified, если не указано иное, локальные элементы должны быть неквалифицированными.

Поскольку вы установили xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel", Entities стал квалифицированным. Исправление должно установить elementFormDefault="qualified" как писал @polishchuk.

0 голосов
/ 26 июня 2011

Попробуйте эту схему:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.testxyzxyz.de/xyz/BusinessModel" xmlns:b="http://schemas.testxyzxyz.de/xyz/BusinessModel">
  <xsd:element name="BusinessModel" type="b:BusinessModelType" />
  <xsd:complexType name="BusinessModelType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="Entities" type="b:EntitiesType" />
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="EntitiesType">
    <xsd:sequence>
      <xsd:element name="Entity" type="b:EntityType" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="AttributeType">
    <xsd:attribute name="Name" type="xsd:string" use="required" />
    <xsd:attribute name="Type" type="xsd:string" use="required" />
  </xsd:complexType>
  <xsd:complexType name="EntityType">
    <xsd:sequence>
      <xsd:element name="Attribute" type="b:AttributeType" maxOccurs="unbounded" minOccurs="1" />
    </xsd:sequence>
    <xsd:attribute name="Name" type="xsd:string" use="required" />
  </xsd:complexType>
</xsd:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...