【发布时间】:2013-05-10 12:06:45
【问题描述】:
这是我的 XSD 的 <schema> 标签:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.cmu.edu/ns/blank"
targetNamespace="http://www.cmu.edu/ns/blank"
elementFormDefault="qualified">
如果我的理解是正确的,这就是它的意思:
http://www.w3.org/2001/XMLSchema 命名空间http://www.cmu.edu/ns/blank 命名空间http://www.cmu.edu/ns/blank 命名空间,因为elementFormDefault 是合格 问题1:我的理解是否正确。如果没有,有什么问题?
问题 2 看看下面提到的 XML 实例:
<people
xmlns="http://www.cmu.edu/ns/blank"
xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd"
>
<student>
<name>John</name>
<course>Computer Technology</course>
<semester>6</semester>
<scheme>E</scheme>
</student>
</people>
这里的一切都属于http://www.cmu.edu/ns/blank命名空间,包括<student>和由于elementFormDefault而包含在其中的元素。 正确吗?
问题3
现在,我想添加来自各个大学的<student>。带有前缀,例如伯克利的berk,哈佛的harv,等等。每个<student> 都有一组不同的元素。我想验证这一点。 这怎么可能?
【问题讨论】:
-
Q3 听起来不太适合用于 XML 命名空间。这就像在编程语言类型系统中定义一个
BerkStudent类和一个HarvStudent类。 -
@McDowell 是的,你是对的,但是我可以在伯克利和哈佛的 XSD 中使用
<xs:extention>并添加更多字段。这就像泛化/专业化关系:) -
您在向后考虑 - 架构不会“自动导致”实例文档中的任何内容,由您在实例文档中使用默认命名空间和前缀声明的正确组合使其与架构所期望的相匹配。
elementFormDefault是影响这些预期的因素之一。 -
@IanRoberts 由于模式实例的根属于某个命名空间,所有子元素也将属于该命名空间(即继承),除非另有说明?
-
@LittleChild 这是正常的 XML 规则,无论是否涉及架构。对于
<people xmlns="example"><student/></people>,student 元素位于example命名空间中,但对于<p:people xmlns:p="example"><student/></p:people>,它不在。
标签: xml validation xsd