c#.net平台上的xml schematron验证
我必须为我的xml(xbrl)文件实现schematron验证。我已经搜索并尝试了一些库,例如基于msdn的NMatrix和Saxon -NMatrix schematron验证没有验证我的xml,我的意思是它没有给出任何异常。 -Saxon免费版不支持通过sch文件验证xml 我的问题是如何基于schematron规则实现xml验证。 我还为其他语言java、php提供了开放式建议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
感谢您的帮助。有一些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实现。检查我的答案