2011-12-10 6 views
0

basic.xsdファイルで、一部の属性にmyAttributeの一部の要素を定義しているとします。myElementxsd:stringとします。インポート後にxsd文字列を制限する

今、私は私のspecial.xsdでこのbasic.xsdをインポートし、値のみaまたはbを許可する、myAttributeの定義を厳格化したいと思います。 anotherSpecial.xsdの他の実装者は、可能な値をloremipsumに制限したいかもしれません。

どうすればいいですか?属性を抽象的にすることはできますか?

答えて

2

属性または要素を「再定義」することはできません。あなたの属性がグローバルに定義された単純な型であることを確認する必要があります。属性がグローバルであるかどうかにかかわらず、それは差をつけません。要素とは異なり、属性は抽象としてマークすることはできません。

文字どおり、basic.xsdの要素に関連付けられている属性の値のドメインを変更する必要があります。これは私がそれを行うだろうかです:

basic.xsd

<?xml version="1.0" encoding="utf-8" ?> 
<!--XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com)--> 
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="myElement"> 
     <xsd:complexType> 
      <xsd:simpleContent> 
       <xsd:extension base="xsd:string"> 
        <xsd:attribute name="myAttribute" type="tmyAttribute"/> 
       </xsd:extension> 
      </xsd:simpleContent> 
     </xsd:complexType> 
    </xsd:element> 

    <xsd:simpleType name="tmyAttribute"> 
     <xsd:restriction base="xsd:string"/> 
    </xsd:simpleType> 
</xsd:schema> 

有効なサンプルXML:special.xsdに対して検証する際

<?xml version="1.0" encoding="utf-8" ?> 
<!--XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com)--> 
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:redefine schemaLocation="basic.xsd"> 
     <xsd:simpleType name="tmyAttribute"> 
      <xsd:restriction base="tmyAttribute"> 
       <xsd:enumeration value="a"/> 
       <xsd:enumeration value="b"/> 
      </xsd:restriction> 
     </xsd:simpleType>  
    </xsd:redefine> 
</xsd:schema> 

をspecial.xsd

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) --> 
<myElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" myAttribute="myAttribute1" xmlns="http://tempuri.org/XMLSchema.xsd">myElement1</myElement> 

、上記のXMLは現在無効です。サンプルXMLのmyAttribute属性の値をaに変更してください。

このXSDを使用しているユーザーが再定義に問題がある場合、たとえば次のようになります。 XSDをコードにバインドするツールを使用すると、xsd:redefineを使わずにspecial.xsdをとり、それと同等の形式に自動的に変換できるXML Schemaリファクタリングツールを見ていきます。あなたが実際にやっていることは、special.xsdにある "intelectual property"をbasic.xsdとは別に保つことです。 basic.xsdへの変更は自動的に維持され、XSDを何度も "再コード化"する必要なく、special.xsdのコンシューマに表示されます。