SQL Server 架构集合中的可重用 simpleType 定义

Posted

技术标签:

【中文标题】SQL Server 架构集合中的可重用 simpleType 定义【英文标题】:Reusable simpleType definition in SQL Server schema collection 【发布时间】:2020-06-02 21:53:17 【问题描述】:

我正在尝试在 SQL Server XML 架构集合中创建一个可重用的 simpleType,但我遇到了一个错误。例如:

<?xml version="1.0" encoding="UTF-16"?>
<xs:schema
    attributeFormDefault="unqualified"
    elementFormDefault="qualified"
    targetNamespace="SomethingUnique"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="dateTimeOrEmpty">
        <xs:union memberTypes="xs:dateTime">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=""/>
                </xs:restriction>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>

    <xs:element name="Root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="SomeDate"/>
                    <xs:simpleType>
                        <xs:union memberTypes="xs:dateTime">
                            <xs:simpleType>
                                <xs:restriction base="xs:string">
                                    <xs:enumeration value=""/>
                                </xs:restriction>
                            </xs:simpleType>
                        </xs:union>
                    </xs:simpleType>
                <xs:element name="OtherDate" type="dateTimeOrEmpty" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

如果我尝试使用此架构创建 XML 架构集合,我会收到此错误

对未定义名称“dateTimeOrEmpty”的引用

是否可以重用命名的 simpleType 定义,或者我必须为每个要使用它的元素重新键入整个 simpleType 定义?

【问题讨论】:

【参考方案1】:

看起来像是命名空间问题。我想我一次就明白了这一点,但现在我只需要摆弄它直到它起作用。 EG

CREATE XML SCHEMA COLLECTION foo AS  
N'<?xml version="1.0" encoding="UTF-16"?>
<xs:schema
    attributeFormDefault="unqualified"
    elementFormDefault="qualified"
    targetNamespace="SomethingUnique"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:s="SomethingUnique"
    >

    <xs:simpleType name="dateTimeOrEmpty">
        <xs:union memberTypes="xs:dateTime">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=""/>
                </xs:restriction>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>

    <xs:complexType name="RootType">
        <xs:sequence>
                <xs:element name="SomeDate" type="s:dateTimeOrEmpty"/>
                <xs:element name="OtherDate" type="s:dateTimeOrEmpty" />
            </xs:sequence>
    </xs:complexType>

    <xs:element name="Root" type="s:RootType"/>

</xs:schema>'

【讨论】:

谢谢。发布此内容后,我意识到我缺少名称空间引用。

以上是关于SQL Server 架构集合中的可重用 simpleType 定义的主要内容,如果未能解决你的问题,请参考以下文章

如何重用 CRUD 方法中的可观察值

修改 SQL Server 架构集合

SQL Server 2012 上的可插入 UNION ALL VIEW

SQL Server 中的可延迟约束

SQL Server 存储过程中的可选参数?

软件构架,架构和框架的区别