我有一个像这样的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字段。即如果我提供空值,那么它应该抛出模式验证错误。
答案 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
元素的模式中引用它。