XSD:如何从其他XSD导入数据类型?

时间:2010-06-30 20:45:17

标签: xsd xsd-validation

我有以下XSD的开头:

<?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:no="http://www.sychophants.com">
<xs:import namespace="http://www.sychophants.com" schemaLocation="current_obs.xsd"/>

......然后是其他一些定义...

<xs:element name="noInDatPletd" ref="no:in_dat"/>

其他组织编写的架构中存在in_dat的位置。我本质上想要做的是创建一个模式,该模式将包含在其他ogranization的XSD中定义的in_dat类型的元素。

我甚至接近这个正确吗?我对XML很陌生。

我一直在

    http://location_of_my_xsd/temp.xsd:79:9: Invalid: Undefined element 
    no{http://www.sychophants.com}:in_dat referenced from content model 

来自http://www.w3.org/2001/03/webdata/xsv,这是一个架构验证器。

感谢。

编辑: 感谢你们两位回复的人。问题似乎是另一个组织没有在其架构中定义targetNamespace属性。结果是我无法将命名空间导入到我的模式中,这意味着我无法使用提供的类型。

我必须复制/粘贴代码,这是我想要避免的......但是你猜不到你想要的一切。

2 个答案:

答案 0 :(得分:3)

我只看到一个明显错误:您使用ref="no:in_dat"来引用类型。你应该在那里使用type="no:in_dat"ref将引用一个全局元素(不应与该元素一起使用) name属性)。

除此之外,您是否已将外部架构传递给自己架构旁边的验证器?当然需要验证您的架构。

答案 1 :(得分:1)

除了将 ref = 更改为 type = 之外,您的架构定义看起来还是正确的。从错误消息中,我猜测架构验证器无法从提供的schemaLocation加载 current_obs.xsd ,这是有意义的。验证器无法验证是否存在名为 in_dat 的类型,因为它无法导入架构。

相关问题