以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  如何在一个XML文档中引用不同schema文件声明的元素  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=24491)


--  作者:chenhm66
--  发布时间:11/21/2005 9:12:00 AM

--  如何在一个XML文档中引用不同schema文件声明的元素
使用Altova XMLSpy2006工具;
一个"persons.xsd"内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="persons">
    <xs:complexType>
 <xs:sequence>
    <xs:element name="person">
    <xs:complexType>
 <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:any></xs:any> 
 </xs:sequence>
 </xs:complexType>    
    </xs:element> 
 </xs:sequence>
 </xs:complexType>
 </xs:element>
</xs:schema>
一个“children.xsd”内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="children">
    <xs:complexType>
 <xs:sequence>
    <xs:element name="childrenname" type="xs:string" maxOccurs="unbounded"/> 
 </xs:sequence>
 </xs:complexType> 
 </xs:element>
</xs:schema>
现在想在一个“family.xml”中使用这两个文件中声明的元素,该怎么做?
比如用“children.xsd”中的chilldren扩展"persons.xsd"中的<any>?
--  作者:98900969r
--  发布时间:11/21/2005 11:37:00 AM

--  
xs:import (可用于不同命名空间)。xs:include (用于同一命名空间)。
--  作者:lubing
--  发布时间:11/21/2005 4:59:00 PM

--  
不错~~~~~~~~~~
--  作者:chenhm66
--  发布时间:11/23/2005 10:00:00 AM

--  
谢谢,不过,能说明白一点吗?
--  作者:98900969r
--  发布时间:11/30/2005 3:16:00 PM

--  
才明白过来你怎么会冒出这么个问题,原来是w3schools的例子。w3schools有不少好东西,可惜这个地方省略了一个重要细节------声明目标命名空间。下面是从http://www.w3schools.com/schema/schema_complex_any.asp 拷下来的。这个例子想说明,可以用children元素代替person中声明的any元素:

<?xml version="1.0" encoding="ISO-8859-1"?>

<persons xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com children.xsd">
<person>
<firstname>Hege</firstname>
<lastname>Refsnes</lastname>
<children>
  <childname>Cecilie</childname>
</children>
</person>
<person>
<firstname>Stale</firstname>
<lastname>Refsnes</lastname>
</person>
</persons>

对这个例子,family.xsd应该声明targetNamespace为 http://www.microsoft.com,而children.xsd应该声明targetNamespace为 http://www.w3schools.com 。只有这样,实例xml文件中引用两个xsd的下面这一句才有用:
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com children.xsd"



--  作者:厦门乞丐
--  发布时间:12/5/2005 11:26:00 AM

--  
family.xsd应该声明targetNamespace为 http://www.microsoft.com,而children.xsd应该声明targetNamespace为 http://www.w3schools.com 。

你所说的targetNamespace是什么意思啊?


--  作者:98900969r
--  发布时间:12/5/2005 4:50:00 PM

--  
targetNamespace 是目标命名空间。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
48.828ms