首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Schematron验证XML

用Schematron验证XML
EN

Stack Overflow用户
提问于 2014-07-15 13:23:35
回答 3查看 9.6K关注 0票数 3

我试图用Schematron验证XML文件,这比XSD要复杂得多。我在谷歌上搜索了很多,最棒的是这个微软网站。但是这仅仅说明了如何用NMatrix.Schematron来验证XSD,这不是我所需要的。我有NMatrix.Schematron DLL,但我不知道如何使用它们。有人知道怎么用吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-15 13:54:54

我建议您使用使用纯XSLT的Rick的ISO Schematron的参考实现,最好是XSLT2.0,并使用一个成熟的XSLT处理器,比如Michael的撒克逊

票数 3
EN

Stack Overflow用户

发布于 2014-10-16 09:11:37

使用萨克森-他来自纽盖特会更好,因为它比Schematron现在在.NET>上支持的更多。

我使用的是Schematron.NET - Downlaod的源代码和例子,编译它或只是在示例中使用DLL。

然后,我完全删除了图片中的XSLT,因为我不需要它。但是有些东西,如选择和类似的东西是缺少的,但是--大多数--无论如何都可以使用XPath进行测试。因为它有点旧,所以它没有实现所有的特性:(

这是一个要用Schematron验证的扩展版本。

代码语言:javascript
复制
using NMatrix.Schematron;
...
Schema schematronSchema = new Schema();
schematronSchema.Load(new FileStream("C:/thefile.sch", FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
vld.AddSchema(schematronSchema);

vld.Validate(new MemoryStream(Encoding.UTF8.GetBytes(XML_String)));

我使用文件流加载,这样文件就不会被锁定,这是XSLT引擎中用于.NET的构建中常见的问题。

然后,在".sch“文件中,我认为它只是简单、整洁得多的方式来验证模式数据。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<schema xmlns="http://www.ascc.net/xml/schematron" title="Schema for Blah">
<pattern name="A descriptive name">
 <rule context="DataNodeOrElement">
   <assert test="Xpath, where Name is element and @name is attribute"> Error Message </assert>
 </rule>
</pattern>

例如。

代码语言:javascript
复制
<root>
 <version>1</version>
  <data>
   <name surname="rulez">ppumkin</name>
   <age>na</age>
   <title/>
  </data>
 </root>

<rule context="data">
   <assert test="name != ''"> No name specified </assert>
   <assert test="@surname != 'rulez'"> This is not the ppumkin I know!</assert>

   <assert test="number(age) < 110"> Not a number or not specified</assert>
   <assert test="number(age) > 18"> Your under age. Get 'outa!ahere!</assert>
</rule>

记住,只有当测试失败时才会发生错误。如果你对18岁以下的障碍感兴趣,你需要测试他们是否超过18岁,习惯起来有点奇怪。

我以前从来没有使用过Schematron,老实说,现在我把XML当作埃博拉病毒来处理--但有时我们别无选择。

Schematron.NET中的示例也向您展示了如何将XSLT1 1/XLST2 2与Schematron混合起来,以进行额外的控制和决策。

票数 5
EN

Stack Overflow用户

发布于 2014-07-15 13:57:11

有些程序,如oXygen,支持模式验证,但他们可能使用类似于RI的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24759417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档