我正在尝试执行以下操作:
<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创建一个新文档时,我在eclipse中得到以下内容:“由于提供的模式没有全局元素,因此不存在根元素”。 yourSchema.xsd不应该从mySchema.xsd继承root元素吗?
答案 0 :(得分:0)
我认为你要找的是用<extended>
类型定义anyType
元素。试试这个架构:
<?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>