生成xsd文件的问题因为引用了另一个模式中的元素

时间:2015-09-04 06:47:17

标签: xml xsd

我在从架构生成xsd文件时遇到一些问题,因为它是对另一个架构中的元素的引用。你们任何人都知道如何解决这个问题?这是我试图从中创建xsd的模式。

    <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="urn:ean.ucc:2" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:ean.ucc:2" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import />
  <xs:element name="message">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="entityIdentification" />
        <xs:element name="transaction">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="entityIdentification" />
              <xs:element ref="command" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="documentCommand">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="documentCommandHeader" />
        <xs:element ref="documentCommandOperand" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

你可以看到它引用了很多其他元素。我创建此模式的方法是使用vs2013中的工具从XML文件创建模式。

希望你们知道如何解决这个问题,谢谢!

1 个答案:

答案 0 :(得分:0)

您需要阅读并理解XML命名空间如何工作以及它们与两个模式之间的关系如何相关,当一个模式使用另一个模式时。

This article是这种理解的一个极好的起点;虽然使用的工具是付费的,但我不是以任何方式宣传或附属。

相关位:

  

CommonTypes.xsd

<?xml version="1.0" encoding="utf-16"?>
<xs:schema targetNamespace="http://NamespaceTest.com/CommonTypes" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

  <xs:complexType name="AddressType">
    <xs:sequence>
      <xs:element name="Line1" type="xs:string" />
      <xs:element name="Line2" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="PriceType">
    <xs:restriction base="xs:decimal">
      <xs:fractionDigits value="2" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="PaymentMethodType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="VISA" />
      <xs:enumeration value="MasterCard" />
      <xs:enumeration value="Cash" />
      <xs:enumeration value="Amex" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
     

CustomerTypes.xsd

<?xml version="1.0" encoding="utf-16"?>
<xs:schema     xmlns:cmn="http://NamespaceTest.com/CommonTypes" 
               targetNamespace="http://NamespaceTest.com/CustomerTypes" 
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               elementFormDefault="qualified">
    <xs:import schemaLocation="CommonTypes.xsd" 
               namespace="http://NamespaceTest.com/CommonTypes"/>
  <xs:complexType name="CustomerType">
    <xs:sequence>
      <xs:element name="Name" type="xs:string" />
      <xs:element name="DeliveryAddress" type="cmn:AddressType" />
      <xs:element name="BillingAddress" type="cmn:AddressType" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>