5

SQL Server 2008 では、型指定された XML 列/変数を定義することにより、既存の XML スキーマ コレクションに対して XML を検証できます。DECLARE @TypedXml XML(MyXmlSchemaCollection)

ただし、私が見る限り、XML スキーマ コレクションは、列/変数を定義する時点で認識されている必要があります。

実行時に指定された XML スキーマを使用して XML を検証する方法はありますか?

例えば:

DECLARE @Xml XML
SET @Xml = 
N'<person>
    <firstname>Ming</firstname>
    <lastname>The Merciless</lastname>
</person>'

DECLARE @Xsd XML
SET @Xsd =
N'<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
      <xs:element name="dateofbirth" type="xs:date"/>
    </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>'

DECLARE @Valid BIT
SET @Valid = (SELECT dbo.f_ValidateXmlAgainstXsd(@Xml, @Xsd)) -- With a user-defined function?
EXEC @Valid = s_ValidateXmlAgainstXsd @Xml, @Xsd -- With a stored procedure?
4

2 に答える 2

2

あなたのような要件については、おそらくCLR統合を検討します。ストアドプロシージャまたはユーザー定義関数を使用します。環境で CLR 統合が許可されているかどうかを最初に確認する必要があります。

ここに投稿するには多すぎます。ただし、.NET を使用して XML ドキュメントを検証するコードは一般的です。また、SQL Server のオンライン ブックに追加したリンクは、SQL 2008 が存在する限り有効です...

一般に、SQL Server での XSD のサポート方法に制限されない検証を実装するには、CLR 統合に依存する必要があると思います。ここで説明されている SQL サーバーでの XSD コレクションの制限により、多くの人がこの方向に向かう可能性があります。大量の環境で把握しなければならない問題がいくつかありますが、コンパイルされた XSD のキャッシュは、私の中で最も重要なものです。もう 1 つは、XSD の複雑さと、XSD のソースおよび参照方法 (インクルード/インポート/再定義のサポート) です。これらの側面を自分で実装しようとすると、xsd:include が SQL Server でサポートされていない理由を確実に理解できます...

于 2012-05-22T02:22:43.290 に答える