XHTML字段的模式验证

时间:2016-05-09 09:09:21

标签: marklogic marklogic-8

我有一个像这样的xml实体,

a:news-article xmlns:c="http://abc/core" xmlns:f="http://abc/fields" xmlns:a="http://abc/assets" xmlns:r="http://abc/refdata">
  <c:id>xyz</c:id>
  <c:type>asset</c:type>
  <c:created-on>2016-03-17T08:26:27.764Z</c:created-on>
  <c:released-on>1985-11-03T00:00:00Z</c:released-on>
  <c:expires-on>2009-12-12T00:00:00Z</c:expires-on>
  <f:short-headline>
    <c:content><c:l10n xml:lang="en">
    <p>
      Carbide technology for South Korean project
    </p>
      </c:l10n></c:content>
    <c:resources/>
  </f:short-headline>
</a:news-article>

在这个XML中,是一个XHTML字段。我需要使用模式验证来验证此类XHTML字段。即如果我提供空值,那么它应该抛出模式验证错误。

1 个答案:

答案 0 :(得分:1)

每个命名空间都需要单独的模式。

在“http://abc/core”命名空间的XSD中,您可能需要一种模式来检查元素的内容是否为非空:

    <xs:element name="id">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern value="\S+"/>
                </xs:restriction>
            </xs:simpleType>
    </xs:element>

然后,您需要将该架构导入到“根”架构中(在您的示例中,我假设“a:”前缀表示根架构),如下所示:

<xs:import namespace="http://abc/core"

的schemaLocation = “core.xsd”/&GT;

最后在正确的位置引用外部命名空间中的元素:

    <xs:element name="authors">
        <xs:complexType>
          <xs:sequence>news-article
            <xs:element ref="c:id"/>
            <xs:element ref="c:type"/>
            <!-- ... -->
          </xs:sequence>
        </xs:complexType>
     </xs:element>

如果要确保p元素非空,则需要按照与上面相同的模式编写自己的模式 - 声明p的非空模式和在c:l10n元素的模式中引用它。