我正在尝试为xsd中的元素应用模式。
元素是XHTML类型。
我想要应用这样的模式。
<a attributes="some set of attributes"><img attributes="some set of attribtes"/></a>
规则:
<a> tag with attributes followed by <img> with attributes.
示例有效数据:
<a xlink:href="some link" title="Image" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/1999/xhtml">
<img alt="No Image" title="No Image" xlink:href="soem path for image" xlink:title="Image" xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" />
</a>
无效:
<a>data<img/></a>--Data Present, no attributes
<a><img>abcd</img></a>--data Present, No attributes
<a><img/></a>---No attributes
任何人都可以建议如何为此编写模式。
<xsd:restriction base="xs:string">
<xs:pattern value="Need help"/>
</xsd:restriction>
谢谢。
答案 0 :(得分:1)
XSD pattern
facet用于使用正则表达式约束简单类型的“词法空间”(即表示该类型实例的文字字符串集)。它不会帮助您要求某些元素必须具有属性。
如果您希望特定属性存在(例如title
和xlink:href
a
元素,title
和alt
img
在元素中,最简单的方法是根据需要声明这些属性。例如,(http://www.w3.org/TR/xhtml1-schema/#xhtml1-strict)XHTML 1.0严格的模式声明src
上需要alt
和img
:
<xs:element name="img">
<xs:complexType>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="src" use="required" type="URI"/>
<xs:attribute name="alt" use="required" type="Text"/>
...
</xs:complexType>
</xs:element>
如果你想要的只是要求使用某些属性,但是你不关心哪个,XSD不能简化任务:在XSD 1.0中没有方便的方法说“我不关心哪个属性出现,但必须有一个”。你可以通过在XSD 1.1中使用断言,或者除了你的XSD架构之外使用Schematron架构,可以强制执行这样的约束(即使像我这样的一些观察者发现它有点奇怪)。