XML与XSD:如何关联2个及以上XSD模式并在XML中使用?
如何在XML中关联并使用多个XSD模式
嘿,这个问题我太熟了!结合你给出的枪械商店XML示例,我一步步给你拆解怎么关联多个XSD并使用它们:
核心方法:利用xsi:schemaLocation属性
xsi:schemaLocation属性允许你同时绑定多个命名空间与对应的XSD文件,格式非常简单:每个绑定组由「命名空间URL + 空格 + XSD文件路径/URL」组成,多个组之间用空格分隔就行。
1. 先声明所有需要的命名空间
首先在根元素(比如你的<gun:shop>)里添加额外的命名空间声明。比如假设我们还要引入一个「枪械配件」的命名空间acc,对应的XSD是example_schema2.xsd,那先加上这行:
xmlns:acc="https://www.gun-shop.com/accessories"
2. 在xsi:schemaLocation中添加多个XSD绑定
修改原有的xsi:schemaLocation,把新的命名空间和XSD路径加进去。比如:
xsi:schemaLocation="https://www.gun-shop.com/ example_schema1.xsd https://www.gun-shop.com/accessories example_schema2.xsd"
注:换行只是为了可读性,实际可以写在同一行,用空格分隔即可。
3. 同时使用不同命名空间的元素
现在你就能在XML里同时用两个XSD定义的元素了。比如给枪械加对应的配件:
<?xml version="1.0" encoding="UTF-8"?> <gun:shop xmlns:gun="https://www.gun-shop.com/" xmlns:acc="https://www.gun-shop.com/accessories" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.gun-shop.com/ example_schema1.xsd https://www.gun-shop.com/accessories example_schema2.xsd"> <gun:guns> <gun:gun name="Revolver" price="1250$" max_ammo="7" /> <gun:gun name="M4A1" price="3250$" max_ammo="30" /> <gun:gun name="9mm Pistol" price="450$" max_ammo="12" /> </gun:guns> <!-- 使用acc命名空间的元素,对应example_schema2.xsd的定义 --> <acc:accessories> <acc:accessory name="Silencer" gun_model="M4A1" price="250$" /> <acc:accessory name="Holster" gun_model="9mm Pistol" price="50$" /> </acc:accessories> </gun:shop>
额外注意事项
- 命名空间和XSD的对应关系必须严格匹配,不能搞混顺序
- 如果XSD在本地,要确保文件路径正确(和XML同目录就直接写文件名,否则写相对/绝对路径)
- 如果有默认命名空间(不带前缀的元素),也可以在
schemaLocation里添加默认命名空间的XSD绑定,比如:xmlns="https://www.gun-shop.com/base" xsi:schemaLocation="https://www.gun-shop.com/base example_base_schema.xsd https://www.gun-shop.com/ example_schema1.xsd"
内容的提问来源于stack exchange,提问作者rapid88
相关产品推荐
相关产品推荐

