想要将Schema拆分为公共部分+“私有”部分。如何?

时间:2010-01-07 15:00:03

标签: xml xsd

我有一个架构文件,我想分成两部分。一个具有公共字段,另一个具有JAXB(2.1)中用于可重用性的特定字段。怎么做?

<?xml version="1.0" encoding="UTF-8" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="content">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="idPaciente"/>
        <xs:element ref="fechaCita"/>
      </xs:sequence>
      <xs:attribute name="user" type="xs:string" use="required" />
      <xs:attribute name="authorityId" type="xs:string" use="required" />
      <xs:attribute name="userName" type="xs:string" use="required" />
      <xs:attribute name="profileId" type="xs:string" use="required" />
      <xs:attribute name="sessionId" type="xs:string" use="required" />
      <xs:attribute name="country" type="xs:string" use="required" />
      <xs:attribute name="method" type="xs:string" use="required" />
      <xs:attribute name="language" type="xs:string" use="required" />
    </xs:complexType>   </xs:element>

  <xs:element name="idPaciente" type="xs:string"/>   <xs:element name="fechaCita" type="xs:string"/>

</xs:schema>

序列中的两个元素都是不常见的字段,而其他元素是公共部分。怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:0)

在不知道您的要求的情况下很难提供建议。如果要使用或不使用这两个特定元素验证文档,或者可以将特定字段放在不同的名称空间中,则可以将序列声明为可选(MinOccurance =“0”)。

BTW - 无论如何你应该声明/使用命名空间,当我在这方面懒得时,我常常面对丑陋的副作用......

答案 1 :(得分:0)

我不确定我是否理解这个问题,但会“延伸”解决您的问题?

  <xsd:complexType name="AbstractType" abstract="true">
    <xsd:sequence>
      <xsd:element name="common1" type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="common2" type="xsd:string" minOccurs="1" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="MyType">
    <xsd:complexContent>
      <xsd:extension base="AbstractType">
        <xsd:sequence>
          <xsd:element name="uncommon1" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="uncommon2" type="xsd:string" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>