Хобрук: Ваш путь к мастерству в программировании

Проблемы с пространством имен схемы XSD cvc-complex-type.2.4.a

Я пытаюсь прочитать файл XML, но он продолжает выдавать эту ошибку:

  • cvc-complex-type.2.4.a: Обнаружено недопустимое содержимое, начиная с элемента «контакт». Ожидается один из '{contact}'.

  • номер строки: 2; номер столбца: 68; cvc-elt.1: Не удается найти объявление элемента «контакты».]

Я обыскал сеть, чтобы найти ответы. Если я удалю свой targetNamespace, то он не жалуется на поиск элементов, а начинает жаловаться на то, что не может найти мои пользовательские типы, объявленные в пространстве имен tns.

Я проверяю это здесь: http://www.corefiling.com/opensource/schemaValidate.html

Я использую JAXB, чтобы убедиться, что документ соответствует его схеме.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    targetNamespace="http://www.example.com/ContactsSchema"
    xmlns:tns="http://www.example.com/ContactsSchema">

    <xs:element name="contacts" type="tns:Contacts" />

    <xs:complexType name="Contacts">
        <xs:sequence>
            <xs:element name="contact" type="tns:Contact" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" />
    </xs:complexType>

    <xs:complexType name="Contact">
        <xs:sequence>
            <xs:element name="id" type="xs:long"/>
            <xs:element name="firstName" type="xs:string" />
            <xs:element name="lastName" type="xs:string" />
            <xs:element name="firstName" type="xs:string" />
            <xs:element name="address" type="tns:Address" />
            <xs:element name="favorite" type="xs:boolean" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Address">
        <xs:sequence>
            <xs:element name="street" type="xs:string" />
            <xs:element name="city" type="xs:string" />
            <xs:element name="state" type="xs:string" />
            <xs:element name="zip" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contacts xmlns="http://www.oracle.com/ContactsSchema" name="Test">
    <contact id="1">
        <firstName>Herman</firstName>
        <lastName>Munster</lastName>
        <address>
            <street>1313 Mockingbird Lane</street>
            <city>Camelot</city>
            <state>NJ</state>
            <zip>15490</zip>
        </address>
        <favorite>true</favorite>
    </contact>
    <contact id="2">
        <firstName>Al</firstName>
        <lastName>Bundy</lastName>
        <address>
            <street>9764 Jeopardy Lane</street>
            <city>Chicago</city>
            <state>IL</state>
            <zip>60629</zip>
        </address>
        <favorite>false</favorite>
    </contact>
</contacts>

  • контакт != tns:контакт в предположении 16.01.2014

Ответы:


1

По мнению @Michael, вы должны согласовать целевое пространство имен вашего XSD с пространством, используемым вашим образцом XML. Давайте предположим, что XML правильный, а XSD неправильный... поскольку проблем больше, чем просто несоответствие пространства имен...

  • Ваш XSD описывает идентификатор как элемент, а образец XML показывает атрибут.
  • Ваш XSD показывает firstName после lastName, что, скорее всего, является опечаткой; тем не менее, его необходимо удалить, чтобы он соответствовал XML.

Это фиксированный XSD, соответствующий вашему XML:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    targetNamespace="http://www.oracle.com/ContactsSchema"
    xmlns:tns="http://www.oracle.com/ContactsSchema">

    <xs:element name="contacts" type="tns:Contacts" />

    <xs:complexType name="Contacts">
        <xs:sequence>
            <xs:element name="contact" type="tns:Contact" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" />
    </xs:complexType>

    <xs:complexType name="Contact">
        <xs:sequence>
            <xs:element name="firstName" type="xs:string" />
            <xs:element name="lastName" type="xs:string" />
            <xs:element name="address" type="tns:Address" />
            <xs:element name="favorite" type="xs:boolean" />
        </xs:sequence>
            <xs:attribute name="id" type="xs:long"/>
    </xs:complexType>

    <xs:complexType name="Address">
        <xs:sequence>
            <xs:element name="street" type="xs:string" />
            <xs:element name="city" type="xs:string" />
            <xs:element name="state" type="xs:string" />
            <xs:element name="zip" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>
15.01.2014
  • Извините за путаницу с идентификатором, я изначально предполагал, что это будет элемент в xml... и для этого второго firstName, да... полностью пропустил это. Однако я обманул и использовал Eclipse для создания xml из схемы и выяснил большинство проблем. Я предполагаю, что мне нужно это в xml: xsi:schemaLocation="http://www.oracle.com/ContactsSchema ContactsSchema.xsd" 16.01.2014
  • @Mr.Polywhirl, что касается it begins to complain about how it cannot find my custom types declared in the tns namespace... установки пространства имен XML по умолчанию (в файле XSD, т.е. xmlns), равного targetNamespace, в элементе схемы... считается лучшей практикой, избавляющей вас от необходимости использовать a tns, и, кроме того, это значительно упрощает обращение и чтение XSD... 16.01.2014

  • 2

    Ваша схема предназначена для пространства имен http://www.example.com/ContactsSchema, но ваш экземпляр находится в пространстве имен http://www.oracle.com/ContactsSchema.

    15.01.2014
    Новые материалы

    Управление DOM для чайников вроде меня
    Одной из первых вещей, которую мы рассмотрели, когда начали изучать Javascript во Flatiron, была модель DOM. Кто он? Чем он занимается? Он больше машина, чем человек? Ну да довольно много. ДОМ..

    Что такое структура данных?
    Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

    мои январские чтения по программированию
    Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

    Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
    Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

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

    Введение в машинное обучение для обнаружения аномалий (часть 1)
    Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

    Начало работы с Pulumi в Digital Ocean
    Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..