每个人
我有一个 xsd 模式 (cft.xsd),它描述了一个非常通用的顶级结构:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cft="http://www.foo.com/xsd/cft" targetNamespace="http://www.foo.com/xsd/cft" elementFormDefault="qualified">
<xsd:complexType name="dirType">
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element name="dir" type="cft:dirType"/>
<xsd:element name="txt">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="Name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9a-zA-Z_]+\.txt"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="xml">
<xsd:complexType>
<xsd:sequence maxOccurs="1" minOccurs="1">
<xsd:any/>
</xsd:sequence>
<xsd:attribute name="Name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9a-zA-Z_]+\.xml"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
<xsd:element name="root" type="cft:dirType"/>
</xsd:schema>
还有第二个模式 (dictionary.xsd),它将描述需要在 <cft:xml> 节点中的内容:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:l="http://www.foo.com/xsd/dictionary" xmlns:cft="http://www.foo.com/xsd/cft" targetNamespace="http://www.foo.com/xsd/dictionary" elementFormDefault="qualified">
<xsd:element name="root">
<xsd:simpleType>
<xsd:attribute name="Version" type="xsd:string" use="required"/>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
这样文件就会是这样的:
<cft:root xmlns:cft="http://www.foo.com/xsd/cft" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.foo.com/xsd/cft cft.xsd">
<cft:xml Name="dictionary.xml">
<root xmlns="http://www.foo.com/xsd/dictionary" Version="17.0"/>
</cft:xml>
</cft:root>
我的问题是: 1. 我如何在 dictionary.xsd 中指定,在那里定义的 <root> 元素只能嵌套在 <cft:xml> 元素中 - 那是 <cft:root> 元素的子元素 -这有它的名称属性“dictionary.xml” 2. 如何限制 cft.xsd 中的 <cft:xml> 元素,使其唯一的元素名为 <root> 来自与 cft不同的命名空间?
提前致谢!