XML 模式 - 是否可以在整个文档中只允许某个元素出现一次?
我想扩展 XHTML 以将其用作模板语言。我有一个标记标签,就像
<mylang:content/>
我希望此标记标签出现在 div
或 p
可以出现的位置,但在整个文档中只出现一次。我认为 XML Schema 不可能做到这一点,但也许某些 XML Schema 专家知道得更清楚。
当允许包含元素无限制地出现时,是否可以在整个文档中只允许某个元素出现一次?
I want to extend XHTML to use it as a template language. I have a marker tag like
<mylang:content/>
I want this marker tag to appear where div
or p
can appear, but only once in the complete document. I think it is not possible with XML Schema, but maybe some XML Schema guru knows better.
Is it possible to allow a certain element only once in the whole document when the containing element is allowed to appear unbounded?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您知道根元素是 ,那么我认为您可以在 doc 元素上定义一个约束
,这表示所有 mylang:content 后代必须具有不同的字符串值;但由于元素被限制为空,如果每个元素都必须是不同的,那么只能有一个元素。
当然,在 XSD 1.1 中,断言变得更加容易。
If you know that the root element will be , then I think you can define a constraint on the doc element
This says that all mylang:content descendants must have distinct string values; but since the element is constrained to be empty, if every element must be distinct then there can only be one element.
In XSD 1.1 of course it becomes much easier with assertions.
完整示例
注意:
- 如果您在架构中添加 targetNamespace,唯一约束会突然停止工作。这是因为 xs:unique、xs:key 和 xs:keyref 不使用默认命名空间。你必须像这样改变你的模式:
Full Example
Beware of:
- if you add a targetNamespace in your schema, the unique constraint suddenly stops working. This is because xs:unique, xs:key and xs:keyref dont use default namespace. you have to change your schema like this: