1

2つのXmlファイルがあります。1番目のファイルはすべてのノードを持っているのでmasterと呼ぶことができ、2番目のファイルにはほんの少しの情報しかありません。両方のファイルをサポートする単一のxsdを作成するにはどうすればよいですか。

ファイル1:

     <Information ID="08" >
<description>office information</description>
<officeName>SBV</officeName>
<A id="234"> 
    <name>xyz</name>
    < age>23</age> 
    <dept>SE</dept>
</A> 
<B id="244"> 
    <name>lkj</name>
    < age>27</age> 
    <dept>Sales</dept>
</B>
<C id="264"> 
    <name>opi</name>
    < age>34</age> 
    <dept>Manufacture</dept>
</C> 
<D id="774"> 
    <name>yui</name>
    < age>25</age> 
    <dept>Production</dept>
</D>
</Information>

File2:
    <Information >
<description>Worker information</description>
<A id="234"> 
    <name>xyz</name>
    < age>23</age> 
    <dept>WP</dept>
</A> 
<B id="244"> 
    <name>lkj</name>
    < age>27</age> 
    <dept>WP</dept>
</B>
</Information>
4

1 に答える 1

1

これは可能なスキーマであり、開始点と見なす必要があります。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Information">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="description" type="xs:string" />
        <xs:element minOccurs="0" name="officeName" type="xs:string" />
        <xs:element name="A">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string" />
              <xs:element name="age" type="xs:unsignedByte" />
              <xs:element name="dept" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedByte" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element name="B">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string" />
              <xs:element name="age" type="xs:unsignedByte" />
              <xs:element name="dept" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedByte" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="C">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string" />
              <xs:element name="age" type="xs:unsignedByte" />
              <xs:element name="dept" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedShort" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="D">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string" />
              <xs:element name="age" type="xs:unsignedByte" />
              <xs:element name="dept" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedShort" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="ID" type="xs:unsignedByte" use="optional" />
    </xs:complexType>
  </xs:element>
</xs:schema>

私の場合、QTAssistant(私はそれに関連付けられています)を使用して、投稿した2つのXMLドキュメントをポイントすることでXSDを自動的に作成しました。

これは私が持っているものです(両方を検証します):

ここに画像の説明を入力してください

次のステップは、生成されたXSDを「合理化」することです。たとえば、要素A、B、C、およびDのコンテンツモデルを見ると、すべて同じものを共有しています。実際にそうであれば、基本的に再利用されるグローバル型宣言を持つことができます。または、CとDが「両方またはなし」の組み合わせで表示される必要がある場合もあります。その場合、追加の調整によって正確にそれが達成される可能性があります。以下は、上記のコメントに基づいて手動で修正されたスキーマであり、それがどのように見えるかについてのアイデアを提供します。両方のXSDがXMLを検証することに注意してください。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Information">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="description" type="xs:string"/>
                <xs:element minOccurs="0" name="officeName" type="xs:string"/>
                <xs:element name="A" type="atype"/>
                <xs:element name="B" type="atype"/>
                <xs:sequence minOccurs="0">
                    <xs:element name="C" type="atype"/>
                    <xs:element name="D" type="atype"/>
                </xs:sequence>
            </xs:sequence>
            <xs:attribute name="ID" type="xs:unsignedByte" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="atype">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="age" type="xs:unsignedByte"/>
            <xs:element name="dept" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:int" use="required"/>
    </xs:complexType>
</xs:schema>

今では、後者が「ソース」の点でよりコンパクトであることがわかります。ただし、コンテンツモデルは非常に似ています。

ここに画像の説明を入力してください

于 2013-03-25T17:49:45.247 に答える