如何在我自己的xml架构中使用继承(即xs:extension)?

时间:2011-09-15 10:29:59

标签: xml xsd

我正在尝试在Visual Studio中创建自己的xml架构。但我不能创建任何复杂类型,如Rectangle类型,也不能创建可继承类型,如Shape。 schema.xsd如下,我得到的错误是:

  1. 此架构中无法引用“命名空间”。 [第6行xs:扩展基数=“形状”>

  2. 未定义的complexType'Shape'用作复杂类型扩展的基础[第6行]

  3. 内容:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema 
        attributeFormDefault="unqualified" 
        elementFormDefault="qualified" 
        xmlns:xs  ="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="MySchema">
    
    <xs:complexType name="Rectangle">
     <xs:complexContent>
       <xs:extension base="Shape">
         <xs:sequence>
          <xs:element minOccurs="0" name ="X" type="xs:int"/>
          <xs:element minOccurs="0" name ="Y" type="xs:int"/>
          <xs:element minOccurs="0" name ="Width" type="xs:int"/>
          <xs:element minOccurs="0" name ="Height" type="xs:int"/>
        </xs:sequence>
       </xs:extension>
     </xs:complexContent>
    
    </xs:complexType>
    <xs:complexType name="Shape">
      <xs:sequence>
        <xs:element name="Complexity" type="xs:string"/>
      </xs:sequence>  
    </xs:complexType>
    

2 个答案:

答案 0 :(得分:4)

您需要将前缀绑定到目标命名空间:

xmlns:m="MySchema"

并在对模式中定义的组件的引用中使用它

base="m:Shape"

答案 1 :(得分:3)

要解决Namespace '' is not available to be referenced in this schema.您可以设置默认的''命名空间,而无需更改文件的其余部分:

添加此xmlns="MySchema"

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema  
    attributeFormDefault="unqualified"  
    elementFormDefault="qualified"  
    xmlns:xs  ="http://www.w3.org/2001/XMLSchema"  
    xmlns="MySchema"
    targetNamespace="MySchema"> 
...