xsd.exe не находит объявления типа

Я пытаюсь создать файлы классов из файлов XSD, представленных на веб-сайте IRS:

https://www.irs.gov/busshops/corporations/fatca-xml-schemas-and-business-rules-for-form-8966

документы схемы можно загрузить здесь: https://www.irs.gov/pub/fatca/fatcaxml_v2.0.zip

(FATCAXML_v2.0 (25 КБ) - Основная схема для отчетности FATCA.)

В zip-архиве содержится 4 документа:

  • FatcaXML_v2.0.xsd
  • isofatcatypes_v1.1.xsd
  • oecdtypes_v4.2.xsd
  • stffatcatypes_v2.0.xsd

В первом документе, FatcaXML_v2.0.xsd, есть 3 узла xsd: import, которые, по-видимому, ссылаются на 3 других документа xsd.

При попытке сгенерировать мои классы с помощью xsd.exe против FatcaXML_v2.0.xsd я получаю несколько ошибок о том, что типы не объявляются, например:

Schema validation warning: Type 'urn:oecd:ties:stffatcatypes:v2:StringMax200_Type' is not declared. Line 259, position 5.

Однако я вижу объявление этого типа в stffatcatypes_v2.0.xsd (которое было импортировано в начало FatcaXML_v2.0.xsd):

<xsd:simpleType name="StringMax200_Type">
  <xsd:annotation>
    <xsd:documentation>Defines a string with maximum length of 200
    </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
        <xsd:minLength value="0"/>
        <xsd:maxLength value="200"/>
    </xsd:restriction>
</xsd:simpleType>

Как заставить xsd.exe распознавать эти определения типов?

заранее спасибо


person user3620475    schedule 17.11.2017    source источник
comment
Какие атрибуты schemaLocation в элементах <import >?   -  person spodger    schedule 17.11.2017
comment
‹Xsd: import namespace = urn: oecd: links: isofatcatypes: v1 schemaLocation = isofatcatypes_v1.1.xsd /› ‹xsd: import namespace = urn: oecd: links: stffatcatypes: v2 schemaLocation = stffatcatypes_d /‹ xss ›xs : import namespace = urn: oecd: tie: stf: v4 schemaLocation = oecdtypes_v4.2.xsd / ›: все файлы находятся в одной папке   -  person user3620475    schedule 17.11.2017
comment
И все схемы находятся в одной папке? В этом случае попробуйте указать каждый файл схемы в командной строке.   -  person spodger    schedule 17.11.2017
comment
Да, все файлы находятся в одной папке; Попробую указать все входные файлы одной командой   -  person user3620475    schedule 17.11.2017
comment
Хорошо, хотя, если бы они были, я бы не подумал, что вам это нужно. Тем не менее, если это сработает!   -  person spodger    schedule 17.11.2017
comment
Я не думаю, что у вас есть что-то вроде Altova XMLSpy, которое можно было бы использовать для их загрузки и проверки?   -  person spodger    schedule 17.11.2017
comment
просто в качестве побочного примечания - мне удалось сгенерировать классы python с помощью generateDS.py, поэтому, если я все еще не заставлю это работать, я заменю часть проекта, обрабатывающую xml, на скрипт python   -  person user3620475    schedule 17.11.2017
comment
@spodger man, это странно - я подозреваю, что есть проблема со схемой - похоже, есть дублирующийся дочерний элемент AddressFree для узла - но правительству нужно, чтобы я отправлял данные в этом формате, поэтому у меня нет большой гибкости исправить или изменить схему каким-либо образом. Другим организациям удалось это сделать (я слышал), поэтому я предполагаю, что это больше связано с тем, что я не делаю правильных вещей, а не из-за того, что их схема плохая. О, и я заглянул в это программное обеспечение, это намного превышает мой бюджет на это   -  person user3620475    schedule 17.11.2017
comment
Странно, что с питоном все в порядке! Какая именно у вас командная строка XSD? Я думаю, вам может потребоваться указать файлы в порядке от меньшего к большему, если вы понимаете, что я имею в виду.   -  person spodger    schedule 17.11.2017
comment
@spodger, да, я собираюсь попробовать следующее re: зависимое упорядочение - придется немного оставить его в покое; Сообщу вам, если это сработает!   -  person user3620475    schedule 17.11.2017
comment
Хорошо, удачи!!   -  person spodger    schedule 17.11.2017
comment
@spodger, ты был прав! эта команда сработала: xsd stffatcatypes_v2.0.xsd oecdtypes_v4.2.xsd isofatcatypes_v1.1.xsd FatcaXML_v2.0.xsd / dataset / out: c: \ tmp \ classout \   -  person user3620475    schedule 18.11.2017
comment
а под словом «работал» я имею в виду, что он перестал жаловаться на нестандартные типы; теперь он жалуется на дублирующийся адрес без адреса: - / ... но на этот вопрос есть ответ!   -  person user3620475    schedule 18.11.2017
comment
последнее примечание: это сработало без ошибок, несмотря на странный столбец без адреса: xsd stffatcatypes_v2.0.xsd oecdtypes_v4.2.xsd isofatcatypes_v1.1.xsd FatcaXML_v2.0.xsd / c / out: C: \ tmp \ classout (вместо этого набора данных)   -  person user3620475    schedule 18.11.2017
comment
Отлично. Я придумаю ответ.   -  person spodger    schedule 20.11.2017


Ответы (1)


Чтобы заставить XSD.exe «соблюдать» схемы, импортированные с использованием

<xsd:import namespace="importNamespace" schemaLocation="schema.xsd"/> 

объявления, схемы должны быть расположены в одной папке, и вам нужно указать их все в командной строке. Они также должны быть указаны в порядке использования от базовой схемы до родительской. Итак, если у вас есть схема parent.xsd, которая импортирует child.xsd, которая, в свою очередь, импортирует base.xsd, ваша командная строка должна быть следующей

xsd base.xsd child.xsd parent.xsd [options]

NB, возможно, схемы не обязательно должны находиться в одном месте, но если нет, я подозреваю, что для относительного расположения (относительно того, где вы запускаете XSD, который должен находиться в папке основной схемы), потребуется должны быть указаны в командной строке для каждой схемы и, вероятно, должны соответствовать атрибуту <import schemaLocation, но в данный момент я не могу это подтвердить.

person spodger    schedule 20.11.2017