xml - 在 SQL Server 2008 中使用运行时指定的 XSD 验证 XML?

标签 xml sql-server-2008 tsql xsd

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?

最佳答案

对于您的要求,我可能会探索 CLR 集成:使用 stored proceduresuser defined functions ;您应该首先检查您的环境中是否允许 CLR 集成。

这里发帖太多了;但是,使用 .NET 验证 XML 文档的代码很常见;只要 SQL 2008 存在,我添加到 SQL Server 联机书籍的链接就会存在...

总的来说,我认为要实现不受 SQL Server 支持 XSD 方式限制的验证,应该依赖 CLR 集成。 SQL 服务器上 XSD 集合的限制,如所述here无论如何都可以让很多人朝这个方向发展。在大容量环境中有一些问题需要解决,我认为缓存已编译的 XSD 是最重要的问题。另一个是 XSD 的复杂性,以及 XSD 的来源和引用方式(包括/导入/重新定义支持)。尝试自己实现这些方面会让您肯定地理解为什么 SQL Server 不支持 xsd:include...

关于xml - 在 SQL Server 2008 中使用运行时指定的 XSD 验证 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10693123/

相关文章:

tsql - 转换 HH :MM:SS string to number of minutes

sql - 在 SQL 数据库中设计同义词库的最佳方法?

c# - 在使用 XmlSerializer 序列化期间排除对象

php - SimpleXML 解析具有相同名称和属性的子项

sql - 在规范化数据库时从单个表插入多个表

Java/SQL Server 2008 R2 Express 连接问题

sql - 带有 many-ISNULL 的多列 UPDATE-JOIN 需要很长时间?

sql-server - 这个联合国是什么意思?

PHPWord 导出给出损坏的 Word 文件

java - Java类中的变量@XmlElement(nillable = true)之前是什么意思