再利用可能な“ US State”を作成する方法XMLスキーマを入力しますか?

StackOverflow https://stackoverflow.com/questions/227434

  •  03-07-2019
  •  | 
  •  

質問

複数のアドレスを含むXMLスキーマがあります:

<xs:element name="personal_address" maxOccurs="1">
  <!-- address fields go here -->
</xs:element>
<xs:element name="business_address" maxOccurs="1">
  <!-- address fields go here -->
</xs:element>

各住所要素内に、「米国州」を含めます。列挙:

<xs:simpleType name="state">
    <xs:restriction base="xs:string">
        <xs:enumeration value="AL" />
        <xs:enumeration value="AK" />
        <xs:enumeration value="AS" />
                ....
            <xs:enumeration value="WY" />
        </xs:restriction>
</xs:simpleType>

「米国の州」の書き方は?一度列挙し、各住所要素で再利用しますか?これがn00bの質問である場合、事前に謝罪します-XSDを書いたことはありません。

最初のスタブは次のとおりです。

<xs:element name="business_address" maxOccurs="1">
  <!-- address fields go here -->
  <xs:element name="business_address_state" type="state" maxOccurs="1"></xs:element>
</xs:element>
役に立ちましたか?

解決

あなたは正しい道を進んでいると思います。 XML名前空間と関係があると思います。次を試してください:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/foo"
    xmlns:tns="http://www.example.org/foo"
    elementFormDefault="qualified">
    <xs:element name="business_address">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="business_address_state"
                    type="tns:state" maxOccurs="1" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="state">
        <xs:restriction base="xs:string">
            <xs:enumeration value="AL" />
            <xs:enumeration value="AK" />
            <xs:enumeration value="AS" />
            <xs:enumeration value="WY" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

タイプは state

だけでなく tns:state であることに注意してください

そして、これはあなたがそれを使用する方法です:

<?xml version="1.0" encoding="UTF-8"?>
<business_address xmlns="http://www.example.org/foo"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/foo foo.xsd ">
    <business_address_state>AL</business_address_state>
</business_address>

このXMLは、XSDのtargetNamespaceと同じデフォルト名前空間を使用することに注意してください

他のヒント

名前空間は、スキーマを整理し、競合を防ぐのに役立ちますが、 再利用を可能にするのは上記の名前空間ではなく、 &lt; xs:schema&gt;の直接の子としての型の配置です。ルート それがグローバルタイプになります。 (ネームスペース修飾子なしのネームスペース内、およびtns:修飾子付きのtnsネームスペースが表示される任意の場所から使用できます。)

「Garden of Eden」に従ってスキーマを構築することを好みます。要素と型の両方の再利用を最大化するアプローチ(および、データベースに保存されているデータディクショナリなどから慎重に作成された一意の型/要素の外部論理参照を容易にすることもできます。

「ガーデンオブエデン」スキーマパターンは最大の再利用を提供し、ほとんどの作業を伴います。この投稿の最後に、ブログシリーズで取り上げられている他のパターンへのリンクを掲載しました。

&#8226; エデンの園アプローチ http: //blogs.msdn.com/skaufman/archive/2005/05/10/416269.aspx

すべての要素をグローバルに定義することにより、モジュラーアプローチを使用し、Venetian Blindアプローチのように、すべての型定義がグローバルに宣言されます。各要素はノードの直接の子としてグローバルに定義され、そのtype属性は名前付きの複合型の1つに設定できます。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="TargetNamespace" xmlns:TN="TargetNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="BookInformation" type="BookInformationType"/>
    <xs:complexType name="BookInformationType">
        <xs:sequence>
            <xs:element ref="Title"/>
            <xs:element ref="ISBN"/>
            <xs:element ref="Publisher"/>
            <xs:element ref="PeopleInvolved" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="PeopleInvolvedType">
        <xs:sequence>
            <xs:element name="Author"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Title"/>
    <xs:element name="ISBN"/>
    <xs:element name="Publisher"/>
    <xs:element name="PeopleInvolved" type="PeopleInvolvedType"/>
</xs:schema>
このアプローチの利点は、スキーマが再利用できることです。要素と型の両方がグローバルに定義されているため、両方を再利用できます。このアプローチは、再利用可能なコンテンツの最大量を提供します。 欠点は、スキーマが冗長であることです。 これは、特に拡張性とモジュール性に関して、スキーマ要素とタイプの範囲、および他のスキーマでのそれらの使用について何も仮定しない余裕がある一般的なライブラリを作成する場合に適切な設計になります。


すべての異なるタイプと要素には単一のグローバル定義があるため、これらの標準的なパーティクル/コンポーネントは、データベース内の識別子と1対1で関連付けることができます。また、一見、テキストのXSDパーティクル/コンポーネントとデータベース間の関連付けを維持するのは面倒な継続的な手動タスクのように思えるかもしれませんが、実際にはSQL Server 2005はステートメントを介して標準スキーマコンポーネント識別子を生成できます

CREATE XML SCHEMA COLLECTION

http://technet.microsoft.com/en-us/library /ms179457.aspx

逆に、標準粒子からスキーマを構築するために、SQL Server 2005は

を提供します
SELECT xml_schema_namespace function

http://technet.microsoft.com/en-us/library /ms191170.aspx

ca&#183; non&#183; i&#183; cal     数学に関連します。 (方程式、座標などの)         「最も単純な形式または標準形式」          http://dictionary.reference.com/browse/canonical

その他、構築は簡単ですが、再利用可能性が低い/「非正規化/冗長」が多いスキーマパターンには次が含まれます

&#8226; ロシア人形のアプローチ http:/ /blogs.msdn.com/skaufman/archive/2005/04/21/410486.aspx

スキーマには、ルート要素という1つのグローバル要素があります。他のすべての要素と型は、それぞれの型がその上の型に適合するため、名前が徐々に深く入れ子になっています。このデザインの要素はローカルで宣言されているため、importステートメントまたはincludeステートメントで再利用できません。

&#8226; サラミスライスアプローチ

scroll top