Тип XML-схемы не объявлен или отсутствует
Я боролся с этим в течение последнего дня и читаю множество других постов здесь на SO, которые все дают один и тот же совет для моей проблемы. Однако этот совет не работает для меня. Я использую файлы xsd для формата CDA из HL7, чтобы попытаться сгенерировать мои классы (к сожалению, файлы слишком велики для размещения здесь). Вот соответствующие части схемы:
<xs:schema targetNamespace="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif" xmlns="urn:hl7-org:v3" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="POCD_MT000040.ClinicalDocument" type="ClinicalDocument"/> <!-- error message points to the "<xs:element" on this line -->
<xs:complexType name="POCD_MT000040.ClinicalDocument">
<xs:sequence>
<xs:element name="realmCode" type="CS" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="typeId" type="POCD_MT000040.InfrastructureRoot.typeId"/>
<xs:element name="templateId" type="II" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="id" type="II"/>
<xs:element name="code" type="CE"/>
<!-- many more elements follow -->
</xs:sequence>
</xs:complexType>
Я нашел десятки сообщений здесь на SO от людей, сообщающих о подобных сообщениях. Все они говорят, что проблема либо в том, что пространство имен по умолчанию отсутствует, либо для complexType требуется сопровождающее объявление "xs:element". Как видите, у меня есть оба. Так почему же это происходит?
Я должен добавить, что я пытался использовать XmlSpy для генерации классов из xsd с сообщением об одной и той же ошибке. Тем не менее, мои конкретные инструменты из.NET. Я получил ту же ошибку от Visual Studio, xsd.exe и xml2code.
Любые мысли или идеи будут с благодарностью!
1 ответ
РЕШЕНИЕ. Сокращение кода до абсолютного минимума (на запрос) помогло мне выявить проблему. Решением было сделать так, чтобы текст в "type" в объявлении элемента xs: соответствовал "name" в объявлении xs:complexType. Внесение этого изменения позволило инструменту xsd.exe сгенерировать классы из файла.xsd.
<xs:element name="POCD_MT000040.ClinicalDocument" type="ClinicalDocument"/>
<xs:complexType name="ClinicalDocument"> <!-- took out "POCD_MT00040." -->
<xs:sequence>
<xs:element name="realmCode" type="CS" minOccurs="0" maxOccurs="unbounded"/>
<!-- many more elements follow -->
</xs:sequence>
</xs:complexType>