1

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

谢谢你。

4

1 回答 1

1

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

如果您希望出现特定属性(例如title,元素xlink:href上和元素上),在模式中这样做的最简单方法是根据需要声明这些属性。例如,XHTML 1.0 strict 的架构(在http://www.w3.org/TR/xhtml1-schema/#xhtml1-strict上)声明了和都需要:atitlealtimgsrcaltimg

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

于 2012-08-17T01:00:54.830 回答