在xsd中为<a attributes=""><img/></a>编写模式

时间:2012-06-29 04:27:45

标签: xsd pattern-matching xsd-validation

我正在尝试为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>  

谢谢。

1 个答案:

答案 0 :(得分:1)

XSD pattern facet用于使用正则表达式约束简单类型的“词法空间”(即表示该类型实例的文字字符串集)。它不会帮助您要求某些元素必须具有属性。

如果您希望特定属性存在(例如titlexlink:href a元素,titlealt img在元素中,最简单的方法是根据需要声明这些属性。例如,(http://www.w3.org/TR/xhtml1-schema/#xhtml1-strict)XHTML 1.0严格的模式声明src上需要altimg

<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架构,可以强制执行这样的约束(即使像我这样的一些观察者发现它有点奇怪)。