.xsd スキーマをアセンブリにコンパイルし、Biztalk またはその他のアプリケーションに (BTSCompile ビルド アクションを使用して) 展開するのと同じ方法で、schematron アセンブリを作成することは可能ですか?
たとえば、HL7v3 スキーマから構築された通常のアセンブリがあり、スキーマをアセンブリから XmlSchema として読み込み、それを使用して XML を検証するアプリがあります。この場合はうまく機能します。
これが私が話していることの基本的な考え方です:
public static XmlSchema LoadSchema(System.Type schemaType)
{
if (schemaType == null)
{
throw new NullReferenceException("schemaType cannot be null. Pass a valid object type.");
}
XmlSchema schema = new XmlSchema();
try
{
// Grabbing an Assembly that is loaded for the type we're after.
Assembly schemaAssembly = Assembly.GetAssembly(schemaType);
foreach (Type type in schemaAssembly.GetTypes())
{
if (typeof(SchemaBase).IsAssignableFrom(type) && !type.IsNested && type.Name == schemaType.Name)
{
schema = (Activator.CreateInstance(type) as SchemaBase).Schema;
break;
}
}
}
catch (Exception ex)
{
throw new Exception("Could not Load Schema assembly.", ex);
}
return schema;
}
ただし、スキーマトロンに対して同じことをしようとすると、BTSCompile ビルド アクションを使用してコンパイルすることができません。これは、アセンブリ内のスキーマを「見る」ことができるようにするために必要であると想定しています。
私が使用している Schematron ファイルは、今のところ基本的に次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<schema xmlns="http://www.ascc.net/xml/schematron" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ascc.net/xml/schematron http://www.ascc.net/xml/schematron/schematron1-5.xsd" xmlns:hl7="urn:hl7-org:v3">
<title>Schematron Rule Definitions</title>
<ns uri="urn:hl7-org:v3" prefix="hl7"/>
<ns uri="http://www.w3.org/2001/XMLSchema-instance" prefix="xsi"/>
<!-- Rules that pertain to multiple sections of the CDA -->
<pattern name="Header - Test">
<rule context="/">
<assert test="hl7:ClinicalDocument">
ClinicalDocument must be the root node with the namespace urn:hl7-org:v3.
</assert>
</rule>
</pattern>
</schema>
コンパイルしようとしたときに表示されるエラーは次のとおりです。
The root element of a W3C XML Schema should be <schema> and its namespace should be 'http://www.w3.org/2001/XMLSchema'.
それで、私がもちろん言うことをするとき:
The 'title' element is not supported in this context
それらは有効な xml スキーマ要素ではないためです。だから今私の質問はこれです:私がここでやろうとしていることをする方法はありますか? 私は XML スキーマにあまり精通していないので、見落としている単純なものかもしれません。