XSD 限制
是否可以使用 XSD 将节点名称限制为枚举,然后基于此枚举添加另一个限制?
例如,我有这个 xml:
<a>
<b name="string" value="hello">
<b name="integer" value="123">
</a>
我希望“b”节点具有枚举 {“string”,“integer”} 中的名称属性。 然后,如果它是“字符串”,我希望该“值”属性是 xs:string 的类型, 如果它是“整数”,我希望该“值”属性是 xs:integer 类型。
Is it possible using XSD to restrinct node names to enumeration, and then based on this enumeration add another restrictions?
In example, I have this xml:
<a>
<b name="string" value="hello">
<b name="integer" value="123">
</a>
I want "b" nodes have name attribute from enumeration { "string", "integer" }.
Then if it's "string" I want that "value" attribute to be type of xs:string,
and if it's "integer" I want that "value" attribute to be type of xs:integer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不可以。您不能在 XSD 中执行此操作。 本质上,您有 2 个不同类型的 。 这违反了元素一致性规则。
您有几个选项,
No. You can't do this in XSD. In essence, you have 2 <b>s with different types. This violates the Element Consistency rule.
You have a few options,
您可以进行某些限制,例如您可以限制
name
属性的值来自给定列表 - 但您无法表达“如果名称是字符串,则值的类型”之间的这种关系必须是 XML 架构中的 xs:string"。您必须使用其他技术(例如 Schematron),或者在您的应用程序代码。
马克
You can do certain limit, e.g. you can limit that the values of your
name
attribute come from a given list - but you cannot express these kind of relations between "if name is string, then the type of value must be xs:string" in the XML schema.You'll have to either use some other technique (like Schematron), or check this in your app code.
Marc
不。但是您将名称视为类型 - 并且 XML 模式确实对由字符串值确定的元素的
complexType
有一定的支持。 但是,您必须在 XML 文档中使用属性名称“xsi:type”,因此它看起来像这样:恐怕这是 XML Schema 能做的最好的事情了。 官方入门手册中有更多详细信息(不幸的是,这可能非常令人困惑):
http://www.w3.org/TR/xmlschema-0/#UseDerivInInstDocs< /a>
No. But you're treating name like a type - and XML Schema does have some support for the
complexType
of an element being determined by a string value. However, you have to use the attribute name "xsi:type" in your XML document, so it would look like this:That's the best that XML Schema can do I'm afraid. More details in the official primer (which can be pretty confusing, unfortunately):
http://www.w3.org/TR/xmlschema-0/#UseDerivInInstDocs