Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#.net平台上的xml schematron验证_C#_.net_Xml_Validation_Xbrl - Fatal编程技术网

c#.net平台上的xml schematron验证

c#.net平台上的xml schematron验证,c#,.net,xml,validation,xbrl,C#,.net,Xml,Validation,Xbrl,我必须为我的xml(xbrl)文件实现schematron验证。我已经搜索并尝试了一些库,例如基于msdn的NMatrix和Saxon -NMatrix schematron验证没有验证我的xml,我的意思是它没有给出任何异常。 -Saxon免费版不支持通过sch文件验证xml 我的问题是如何基于schematron规则实现xml验证。 我还为其他语言java、php提供了开放式建议 感谢您的帮助。有一些XSLT样式表可用于根据Schematron模式验证XML文档。您可以将它们与XSLtra

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

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

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


感谢您的帮助。

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

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


您还可以查看我从未使用过它,但它的网站声明它是schematron的.net验证程序。

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

<?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">
我有基于
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;
    }

我需要同样的东西,我进一步调查发现

下载该文件,它有一个基本的win forms验证程序,或者只需自己打开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">


最后,您只需要花一些时间阅读并开始验证XML。。即使你知道你真的不想。。但有时您必须这样做。

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

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

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


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

tnx用于replay,但我不喜欢.net库用于该主题。Probatron似乎非常死气沉沉,功能不正常。我找到了Schematron的.net实现。检查我的答案