2012-03-12 112 views
2

我不是一个大的XSD专家..所以我用XSD.EXE快速生成一些XSD,我需要再调整他们一点(minOccur等)。xsd.exe生成两个文件,如何将它们合并为一个?

但现在它已经创建了两个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> 

谢谢!

+0

会发生什么,当你(一)删除'XS:从主文件import',和(b)只用元素替换来自第二个文件的声明(即完整的'xs:element'标签)? – 2012-03-12 21:52:56

+0

@JimGarrison那么就不会产生/验证“的xmlns =“瓮:IETF:PARAMS:XML:NS:XMPP协议捆绑”在绑定元素属性 – 2012-03-12 22:24:47

回答

1

考虑到的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用于生成文件的源...

+0

谢谢,实际上需要它以产生原始的更多的例子。 XML,以便那些可以被验证,但他们需要符合原有的XSD ..我想我将不得不保持他们俩然后感谢解释和替代解决方案与警告:) – 2012-03-12 22:23:30

相关问题