0

对于我们希望使用基于 REST 的服务共享 XML 对象的项目,我们希望共享由具有我们定义的类型的对象组成的组合对象。我们希望能够使用 URI 通过引用传递它们。

假设我有以下 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    targetNamespace="http://www.abc.com/custom"
    xmlns:custom="http://www.abc.com/custom">

<xsd:complexType name="collectionType">
   <xsd:sequence>
      <xsd:element name="abc" type="xs:string"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="root">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                 <xsd:element name="innerCollection" type="collectionType"/>
            </xsd:sequence>
        </xsd:complexType>
</xsd:element>

我可以这样做吗:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Schema information -->
<custom:root>
   <custom:innerCollection ref="http://example.org/innerCollectionA" />
</custom:root>

其中“ http://example.org/innerCollectionA ”返回:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Schema information -->
<custom:innerCollection>
     <custom:abc>
          Inner Collection A
     </custom:abc>
</custom:innerCollection>
4

1 回答 1

0

要通过引用共享 XML Schema 定义xsd:import如果定义在它们自己的命名空间中(或者xsd:include如果在同一个命名空间中),请使用:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.abc.com/custom"
            xmlns:custom="http://www.abc.com/custom"
            xmlns:collection="http://www.abc.com/collection">

  <xsd:import namespace="http://www.abc.com/collection" schemaLocation="collection.xsd"/>

  <xsd:element name="root">
    <xsd:complexType mixed="true">
      <xsd:sequence>
        <xsd:element name="innerCollection" type="collection:collectionType"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

请注意,它collection.xsd可以是导致共享定义的任何 URI,例如:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.abc.com/collection">

  <xsd:complexType name="collectionType">
    <xsd:sequence>
      <xsd:element name="abc" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

</xsd:schema>

要在 XML 实例之间共享 XML 实例,请根据您的要求选择以下方法:

  1. XML 包含
  2. XLink
  3. 在要引用其他 XML 实例的地方使用简单的xsd:anyURI属性。应用程序决定何时/是否取消引用。
于 2013-09-23T13:24:33.680 回答