我可以在具有扩展名的架构中使用唯一约束吗?

时间:2015-07-07 16:53:00

标签: xsd schema

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.irs.gov/efile" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.irs.gov/efile" 
elementFormDefault="qualified" 
attributeFormDefault="unqualified" 
version="1.0">
    <xsd:element name="Form1120" type="Form1120Type">
        <xsd:unique name="uniqueCreditCode">
            <xsd:selector xpath="IncomeTaxCredits"/>
            <xsd:field xpath="CreditCode"/>
        </xsd:unique>
    </xsd:element>
    <xsd:complexType name="Form1120Type">
        <xsd:sequence>
            <xsd:element name="CreditAvailable" type="CheckboxType" minOccurs="0"/>
            <xsd:element name="IncomeTaxCredits" maxOccurs="10">
                <xsd:complexType>
                    <xsd:complexContent>
                        <xsd:extension base="MSOtherIncFrancCreditsType">
                            <xsd:attribute name="referenceDocumentId" type="IdListType"/>
                        </xsd:extension>
                    </xsd:complexContent>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

实施例

<IncomeTaxCredits>
 <CreditCode>10</CreditCode>
 <Amount>100</Amount>
<IncomeTaxCredits>

<IncomeTaxCredits>
 <CreditCode>10</CreditCode>
 <Amount>100</Amount>
<IncomeTaxCredits>

让我们说MSOtherIncFrancCreditsType包含两个元素 - CreditCode和Amount。 CreditCode 10只能在整个xml文档中使用一次。在示例中,它使用了两次。为什么这基于架构有效?

1 个答案:

答案 0 :(得分:0)

我认为你应该使用带前缀的命名空间。改变:

<xsd:schema xmlns="http://www.irs.gov/efile" ...>

为:

<xsd:schema xmlns:p="http://www.irs.gov/efile" ...>

然后在xpath中使用此前缀,如下所示:

<xsd:element name="Form1120" type="Form1120Type">
    <xsd:unique name="uniqueCreditCode">
        <xsd:selector xpath="p:IncomeTaxCredits"/>
        <xsd:field xpath="p:CreditCode"/>
    </xsd:unique>
</xsd:element>

您的完整xsd应如下所示:

 <xsd:schema xmlns:p="http://www.irs.gov/efile" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.irs.gov/efile" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified" 
    version="1.0">
    <xsd:element name="Form1120" type="p:Form1120Type">
        <xsd:unique name="uniqueCreditCode">
            <xsd:selector xpath="p:IncomeTaxCredits"/>
            <xsd:field xpath="p:CreditCode"/>
        </xsd:unique>
    </xsd:element>
    <xsd:complexType name="Form1120Type">
        <xsd:sequence>
            <xsd:element name="CreditAvailable" type="p:CheckboxType" minOccurs="0"/>
            <xsd:element name="IncomeTaxCredits" maxOccurs="10">
                <xsd:complexType>
                    <xsd:complexContent>
                        <xsd:extension base="p:MSOtherIncFrancCreditsType">
                            <xsd:attribute name="referenceDocumentId" type="p:IdListType"/>
                        </xsd:extension>
                    </xsd:complexContent>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>