Невозможно сгенерировать классы, так как элементы верхнего уровня со сложным типом не найдены.

Я пытаюсь создать классы из файла xsd с помощью xsd.exe, но получаю следующее:

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

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2008 sp1 (http://www.altova.com) by (EMBRACE) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://comp.com/service/model/extension" targetNamespace="http://comp.com/service/model/extension">
    <xs:complexType name="attachment">
        <xs:sequence>
            <xs:element name="fileIdentifier" type="xs:string" minOccurs="0"></xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="metadataSystem">
        <xs:sequence>
            <xs:element name="activityId" type="xs:string" minOccurs="0"></xs:element>
            <xs:element name="from" type="xs:long" minOccurs="0"></xs:element>
            <xs:element name="href" type="xs:string" minOccurs="0"></xs:element>
            <xs:element name="performers" type="xs:long" minOccurs="0"></xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

Где у меня есть эти элементы верхнего уровня? Если я добавлю:

<xs:element name="attachment" type="attachment" />

Я получаю это:

Отсутствует тип "вложение"


Этот вопрос не помогает, добавление тега элемента вызывает новую ошибку.


person Sergey Rubtsov    schedule 10.08.2016    source источник
comment
Я видел этот вопрос, но добавление тега элемента мне не помогает.   -  person Sergey Rubtsov    schedule 10.08.2016
comment
Я думаю, что это не совсем дубликат, по крайней мере, не с этим еще одним вопросом, потому что также есть проблема с объявлением элемента верхнего уровня.   -  person Ghislain Fourny    schedule 10.08.2016


Ответы (1)


При объявлении элемента к типу нужно обращаться по его полному имени, то есть префикс ns1, привязанный к целевому пространству имен, отсутствовал перед attachment в атрибуте type.

Это распространенный источник путаницы, поскольку объявление типов (атрибут name) всегда выполняется только с локальным именем, а часть пространства имен всегда является целевым пространством имен схемы, когда она доступна.

<xs:element name="attachment" type="ns1:attachment" />

Префикс можно опустить только в том случае, если пространство имен типа объявлено как пространство имен по умолчанию с атрибутом xmlns.

person Ghislain Fourny    schedule 10.08.2016
comment
Пожалуйста. Если вы хотите узнать больше, это может оказаться полезным, поскольку в stackoverflow появилась новая функция документации: stackoverflow.com /документация/xml/1593/ - person Ghislain Fourny; 10.08.2016