xsd.exe генерирует два файла, как их объединить в один? - PullRequest
2 голосов
/ 13 марта 2012

Я не большой специалист по XSD .. поэтому я использую xsd.exe для быстрого создания необходимого xsd, а затем немного его настраиваю (minOccur и т. Д.).

Но теперь этосоздал два XSD-файла, основной и дополнительный, где он определяет сложный тип.Как я мог сделать их вместе?Я пытался некоторое время, но продолжаю получать ошибки компиляции.

Вот как они выглядят:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:app1="urn:ietf:params:xml:ns:xmpp-bind">
  <xs:import namespace="urn:ietf:params:xml:ns:xmpp-bind" schemaLocation="Binding_app1.xsd" />
  <xs:element name="iq">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="app1:bind" />
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" />
      <xs:attribute name="type" type="xs:string" />
      <xs:attribute name="to" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="iq" />
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

и

<?xml version="1.0" standalone="yes"?>
<xs:schema targetNamespace="urn:ietf:params:xml:ns:xmpp-bind" xmlns:mstns="urn:ietf:params:xml:ns:xmpp-bind" xmlns="urn:ietf:params:xml:ns:xmpp-bind" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:app1="urn:ietf:params:xml:ns:xmpp-bind">
  <xs:element name="bind">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="resource" type="xs:string" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Спасибо!

1 Ответ

2 голосов
/ 13 марта 2012

Учитывая XSD и предполагая, что вы пытаетесь проверить существующий XML, вы не можете преобразовать в один файл. Существует только одно пространство имен, которое может быть описано XSD-файлом, а вы показываете два.

Единственный способ сделать это - поместить все в одно пространство имен, а затем просто скопировать содержимое импортированного файла в файл импорта; удалите любую внешнюю ссылку (xsd: import), и это должно сделать это. Однако в этом случае вы не сможете проверить, что использовалось для начала ...

Вот как будет выглядеть одно пространство имен XSD:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XSR Module (http://www.paschidev.com)-->
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:app1="urn:ietf:params:xml:ns:xmpp-bind">
    <xs:element name="iq">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="bind"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:string"/>
            <xs:attribute name="type" type="xs:string"/>
            <xs:attribute name="to" type="xs:string"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="iq"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

    <xs:element name="bind"> 
        <xs:complexType> 
            <xs:sequence> 
                <xs:element name="resource" type="xs:string" minOccurs="0"/> 
            </xs:sequence> 
        </xs:complexType> 
    </xs:element>
</xs:schema> 

Не могу не подчеркнуть, что этот XSD не будет проверять источник, который вы использовали с XSD.exe для генерации файлов ...

...