gpt4 book ai didi

xsd - 包括/导入具有命名空间的本地模式

转载 作者:行者123 更新时间:2023-12-04 17:04:16 27 4
gpt4 key购买 nike

这是一个模式文件,midi.xsd定义类型,note ,用于存储 MIDI 音符值:

<?xml version="1.0" encoding="utf-8"?>

<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="note">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="127"/>
</xs:restriction>
</xs:simpleType>

</xs:schema>

这是另一个模式文件, octaves.xsd使用 midi.xsd帮助定义要在包含 Octave 音程数据的 XML 文件上强制执行的布局:
<?xml version="1.0" encoding="utf-8"?>

<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:include schemaLocation="midi.xsd"/>

<xs:element name="octaves">
<xs:complexType>
<xs:sequence>
<xs:element name="octave">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />

<xs:element name="midi">
<xs:complexType>
<xs:sequence>

<xs:element name="value" type="xs:integer" />
<xs:element name="from" type="note" />
<xs:element name="to" type="note" />

</xs:sequence>
</xs:complexType>
</xs:element>

</xs:sequence>

<xs:attribute name="index" type="xs:integer" />

</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

这很好,并且完全按照您的预期工作,只是我有另一个要求:我想要 note位于自己的命名空间中, midi , 以便
<xs:element name="from" type="note" />

变成
<xs:element name="from" type="midi:note" />

尽我所能,我无法让它发挥作用。我的尝试包括使用 targetNamespace各个地方的属性, import元素,并自由使用 xmlns:midi="..." ,但无济于事。我会在这里发布这些尝试之一,如果它不是那么令人畏惧的话。

有好心人能指出我正确的方向吗? 我很确定问题在于 midi.xsd是本地文件 ;它从来没有,也永远不会,托管在网络服务器上。

最佳答案

更改 midi.xsd成为:

<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetnamespace="/my/midi/namespace">

然后改 octaves.xsd说:
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:midi="/my/midi/namespace">

<xs:import namespace="/my/midi/namespace" schemaLocation="midi.xsd"/>

...

<xs:element name="from" type="midi:note" />

注意使用 xs:import而不是 <xs:include>两者非常不同——你用 import用于引入其他命名空间,以及 include用于将其他架构文件内联包含到当前命名空间中。

另请注意 /my/midi/namespace可以是你想要的任何东西,它是一个任意标识符。

I'm pretty sure the problem is to do with the fact that midi.xsd is a local file



不,不相关。

关于xsd - 包括/导入具有命名空间的本地模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9760014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com