提问人:geckels1 提问时间:10/4/2023 更新时间:10/4/2023 访问量:44
定义没有命名空间的 XSD(XML 架构)类型,但使用命名空间引用它
Defining XSD (XML Schema) type without a namespace but referring to it with namespace
问:
很抱歉,如果这个问题有点奇怪,但我是 XSD 的新手,并且有一段 XSD 代码我无法理解。代码在下面,因为没有代码的问题相当混乱。
XSD 代码定义了一个没有命名空间的新复杂类型(即默认命名空间),但元素定义使用带有命名空间的新类型。这是允许的,还是正如我目前对命名空间的理解告诉我的那样,它不是。我认为要在命名空间中使用类型,它必须在同一个命名空间中定义。但是,也许如果它在默认命名空间中定义,这就可以了吗?
<schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://api.spp.org/schema/mui/Virtual/v2" xmlns:cmn="http://api.spp.org/schema/mui/Common/v4"
xmlns:vt="http://api.spp.org/schema/mui/Virtual/v2">
...
<element name="OfferByRange" type="vt:OfferByRangeType" />
<complexType name="OfferByRangeType">
<sequence>
<element name="UseSlope" type="boolean" maxOccurs="1" minOccurs="1" />
<element maxOccurs="10" minOccurs="1" name="Point" type="cmn:MWPricePointType">
</element>
</sequence>
<attributeGroup ref="vt:OfferByRangeIdGroup" />
</complexType>
<attributeGroup name="OfferByRangeIdGroup">
<attribute name="locationName" type="cmn:LocationNameType" use="required" />
<attribute name="startHour" type="cmn:DatetimeHourType" use="required" />
<attribute name="stopHour" type="cmn:DatetimeHourType" use="required" />
</attributeGroup>
该行是指命名空间中的类型。但是命名空间中没有定义类型,让我认为这是不允许的?我只是想更好地理解XML命名空间。谢谢!<element name="OfferByRange" type="vt:OfferByRangeType" />
OfferByRangeType
vt
vt
答:
3赞
Michael Kay
10/4/2023
#1
复杂类型(与架构文档中的所有其他顶级声明一样)位于命名空间中,因为它被声明为架构文档的目标命名空间。全局组件属性中显示的名称始终位于目标命名空间中,但从其他位置引用组件时需要命名空间前缀。OfferByRangeType
http://api.spp.org/schema/mui/Virtual/v2
name
1赞
FLUXparticle
10/4/2023
#2
架构定义目标命名空间中的所有元素。在 schema 标记中定义。如您所见,它与 vt 命名空间相同。因此,这不仅是正确的。这也是常见的做法。尽管大多数人将目标命名空间称为 tns。
如果要引用自己的元素而不使用前缀(命名空间),则可以将默认命名空间定义为目标命名空间,如下所示:
xmlns="http://api.spp.org/schema/mui/Virtual/v2"
评论
0赞
geckels1
10/18/2023
我看到目标命名空间和 vt 命名空间被定义为同一个命名空间。现在有意义了。
评论
xmlns="http://www.w3.org/2001/XMLSchema"