0

我必须为我的 xml(xbrl) 文件实现 schematron 验证。我已经搜索并尝试了一些库,例如基于 msdn 的 NMatrix 和 Saxon。

http://msdn.microsoft.com/en-us/library/aa468554.aspx

-NMatrix schematron 验证不验证我的 xml 我的意思是它没有给出任何异常。-Saxon 免费版不通过 sch 文件验证 xml。

我的问题是如何根据 schematron 规则实现 xml 验证。我还为其他语言 java、php 提供了开放建议。

谢谢你的帮助。

4

4 回答 4

1

有一些 XSLT 样式表可用于根据 Schematron 模式验证 XML 文档。您可以将它们与 XSLtransform 类一起使用并查看生成的文档。

1.5 版的官方样式表可以在这里找到

你也可以看看我从未使用过的Probatron ,但它的网站声明它是 schematron 的 .net 验证器。

于 2014-08-20T16:27:53.337 回答
0

我在 .Net 中找不到足够的 Schematron 验证示例代码,所以我开始像这样编写自己的验证代码。

我有XBRL基础XML文件,也SCH有验证规则文件。我正在使用 Gepsio 库来解析XBRL文档。

public bool IsDocumentInfoExists(XbrlDocument xbrlDoc)
    {

        foreach (var currentFragment in xbrlDoc.XbrlFragments)
        {
            foreach (var cnodes in currentFragment.XbrlRootNode.ChildNodes)
            {
                if (!cnodes.GetType().Name.Contains("XmlComment"))
                {
                    var glcorAccountingEntries = ((XmlElement)(cnodes));

                    if (glcorAccountingEntries.Name.Equals("gl-cor:accountingEntries"))
                    {
                        foreach (var glcorAccountingEntry in glcorAccountingEntries)
                        {
                            if (!glcorAccountingEntry.GetType().Name.Contains("XmlComment"))
                            {
                                var documentInfo = ((XmlElement)(glcorAccountingEntry));
                                if (documentInfo.Name.Equals("gl-cor:documentInfo"))
                                {
                                    return true;
                                }
                            }
                        }
                    }
                }
            }
        }
        return false;
    }
于 2014-08-26T13:24:55.333 回答
0

我需要同样的东西,我进一步调查并发现了Schematron.NET

下载文件,它有一个基本的 win 表单验证器,或者只是自己打开 DLL 项目,如果需要,阅读源代码,编译 DLL 并将其嵌入到项目中。

然后在模式中你像这样声明它。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/po-schematron" xmlns="http://example.com/po-schematron" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xsd:annotation>
    <xsd:appinfo>
      <schema xmlns="http://www.ascc.net/xml/schematron">

最后,您只需要花一些时间阅读Schematron ISO并继续验证 XML .. 即使您知道自己并不真正想要.. 但有时您不得不这样做。

于 2014-10-10T09:34:31.740 回答
0

我使用 Saxon xslt 引擎实现了自己的验证。

我基本上创建了一个 Transformer 类来包装 Saxon.Api.Processor 并通过 IMEssageListener 接口监听从它发出的消息。

然后是一个 SchematronValidator 类,它获取 schematron 表,然后通过 schematron 文件 iso_dsdl_include.xsl 传递它,然后通过 iso_abstract_expand.xsl 输出,通过 iso_svrl_for_xslt2.xsl 输出,最后给了我验证表。

然后我必须编写一些解析逻辑来检查验证输出并收集所有断言等。

于 2014-10-21T17:29:02.523 回答