XSD 对于仅包含文本内容的任何元素?

XSD for any element with text content only?

为此 XML 创建 XSD:

  <items name="home">
    <chicken>Foo</chicken>
    <nuggets>Bar</nuggets>
    <moo>Hello World</moo>
     ....
  </item>

我不知道 items 将包含哪些元素,只是该值应该是一个字符串(没有其他节点)。

只有这样才能使用<any processContents="skip" />吗?

XSD1.0

您可以使用 <xsd:any processContents="skip"/> 允许 items 下的任何元素,但您将无法进一步强制执行有关这些元素的内容模型的任何内容。 (你不能说那些子元素在它们的内容模型中只能有文本。)

您可以使用 <xsd:any processContents="strict"/><xsd:any processContents="lax"/> 并仅控制您可以预见在 XSD 中定义的那些子元素的内容模型。

另见

  • processContents strict vs lax vs skip for xsd:any

XSD1.1

如果您希望控制未明确声明的子元素的内容模型,您可以将 <xsd:any processContents="skip"/><xsd:assert test="*[not(*)]"/> 结合使用 items 以坚持items 没有自己的子元素。

另见

  • How to force child element to have a value in XSD?