我认为允许任何元素名称作为子元素有效是个好主意。
我想到的是这样的事情
<attributes>
<foo>
<screenName>Foo thing</screenName>
<value>1234</value>
</foo>
<bar>
<screenName>Bar thing</screenName>
<value>abcd</value>
</bar>
</attributes>
有问题的元素(foo和bar)是最终用户可以自由添加的东西的属性。我打算拥有的元素名称是原始属性名称的清理版本。
虽然我希望这些元素的名称是动态的。我仍然希望所有这些都遵循模式(在此示例中:具有必填字段screenName和value)。
据我所知(I had a look at this),XSD中的“任何”事物本质上是一个“黑洞”,你可以毫无限制地扔掉任何东西。
如果我在我的示例中为'foo'和'bar'定义XSD架构,则设置限制的唯一方法。由于可能属性的数量(数千),我不想明确定义所有属性,但我仍然希望有这些限制。
这可以在XSD中定义吗?
答案 0 :(得分:1)
不能直接表达; xsd:any
表示任何标记,无法进一步限制。人们必须检查XSD之外的代码。
能直接通过xsd:assert
表达:
<xs:assert test="every $e in *
satisfies (exists($e/screenName) and exists($e/value))"/>