自定义XSD文件

时间:2017-09-06 10:06:34

标签: xml validation xsd

我使用xsd文件从microsoft生成cs类,如xsd.exe。 我还从同一个xsd文件生成WPF表单。 在某些情况下,我需要在我的xs:element标签中定义自定义属性。 我使用这个属性来生成我的WPF表单中的一些功能。

我想要的是一个“高级”xsd文件,在某些元素上有一些自定义属性。 它应该对任何xsd解析器都有效。

像myCutomAttribute一样:

<xs:element name="mycustomName" type="someComplexType" myCutomAttribute="generateIndex">

我试图用外部命名空间扩展xsd文件, 但我不知道如何使其有效。我将名称空间generatorTools添加为gt。

<xs:element name="mycustomName" type="someComplexType" gt:myCutomAttribute="generateIndex">

这是应该扩展的xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
xmlns:ns1="http://www.mycompany.com" 
targetNamespace="http://www.mycompany.com" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
<xs:attribute name="myCutomAttribute" type="ns1:functions" />
<xs:simpleType name="functions">
    <xs:restriction base="xs:string">
        <xs:enumeration value="generateIndex"/>
        <xs:enumeration value="someOtherEntry"/>
    </xs:restriction>
</xs:simpleType>

问题是,如果我输入属性gt:myCustomAttribute right,它就可以了。 gt:myCustomAttribute的值将使用名为“functions”的extenal simpletype中的枚举进行验证。但是如果我输入了错误,那么该属性将被接受任何值。但为什么?如何获得验证错误?

有效:

<xs:element name="mycustomName" type="someComplexType" gt:myCutomAttribute="generateIndex">
<xs:element name="mycustomName" type="someComplexType" gt:myCutomAttribute="someOtherEntry">

无效:

<xs:element name="mycustomName" type="someComplexType" gt:myCutomAttribute="xyz123">

这是有效的,但为什么?:

<xs:element name="mycustomName" type="someComplexType" gt:myMissspelledAttribute="xyz123">

任何想法,任何解决方案,或者我完全错误? 谢谢你的帮助

PS:英语不是我最好的语言。 ;)

1 个答案:

答案 0 :(得分:0)

希望我能够解决你所遇到的问题。 如果您要验证其他属性,例如myMissspelledAttribute就像你的情况一样,你需要在你的模式中添加必要的自定义属性<xs:attribute name="myMissspelledAttribute" type="ns1:functions"/>

架构示例如下所示

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:ns1="http://www.mycompany.com"
           targetNamespace="http://www.mycompany.com" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
    <xs:attribute name="myCutomAttribute" type="ns1:functions"/>
    <xs:attribute name="myMissspelledAttribute" type="ns1:functions"/>
    <xs:simpleType name="functions">
        <xs:restriction base="xs:string">
            <xs:enumeration value="generateIndex"/>
            <xs:enumeration value="someOtherEntry"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>