2012-03-09 16 views
1

でXMLスキーマを拡張:は、私は次のことをやろうとしているカスタム要素

基本的に
<myNamespace:foo> 
    <myNamespace:bar>hello</myNamespace:bar> 
    <myNamespace:extended> 
     <yourNamespace:anything> 
     .... 
     </yourNamespace:anything> 
    </myNamespace:extended> 
</myNamespace:foo> 

、私は特定の要素が別の名前空間からの要素を上書きすることを可能にするスキーマを設計したいです。

私はこれを試してみた:

<!-- mySchema.xsd --> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/mySchema" 
    xmlns:myNamespace="http://www.example.org/mySchema" 
    elementFormDefault="qualified"> 

    <complexType name="extendedType"> 
     <sequence> 
      <any/> 
     </sequence> 
    </complexType> 

    <element name="foo"> 
     <complexType> 
      <sequence> 
       <element name="bar" type="string"/> 
       <element name="extended" type="myNamespace:extendedType"/> 
      </sequence> 
     </complexType> 
    </element> 

<!-- yourSchema.xsd --> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/yourSchema" 
    xmlns:yourNamespace="http://www.example.org/yourSchema" 
    xmlns:myNamespace="http://www.example.org/mySchema" 
    elementFormDefault="qualified"> 

    <import namespace="http://www.example.org/mySchema" schemaLocation="mySchema.xsd"/> 

    <redefine schemaLocation="mySchema.xsd"> 
     <complexType name="extendedType"> 
       <complexContent> 
       <extension base="myNamespace:extendedType"> 
        <sequence> 
         <element name="anything"></element> 
        </sequence> 
       </extension> 
      </complexContent> 
     </complexType> 
    </redefine> 
</schema> 

が、私はyourSchema.xsdから新しいドキュメントを作成しようとすると、私は日食で、次を得る:「提供されたスキーマは、グローバルな要素を持っていないので、いかなるルート要素は存在しません」。 yourSchema.xsdはmySchema.xsdからルート要素を継承してはいけませんか?

答えて

0

anyType<extended>要素を定義することをお勧めします。このスキーマを試してみてください:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"  attributeFormDefault="unqualified"> 
    <xs:element name="foo"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="bar" type="xs:string"/> 
       <xs:element name="extended" type="xs:anyType"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
関連する問題