首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSD无法验证包含dt:dt属性的XML

XSD无法验证包含dt:dt属性的XML
EN

Stack Overflow用户
提问于 2017-01-16 13:24:02
回答 1查看 586关注 0票数 0

XSD文件无法验证包含dt:dt属性的XML文件。dt:dt属性在XSD文件中不被接受。

例如。

代码语言:javascript
运行
复制
<xs:attribute name="dt:dt" type="xs:nonNegativeInteger" use="optional"/>

在上面的xs:attribute中,不接受dt:dt名称。因此,无法验证包含属性dt:dt="10"的XML文件。

是否有解决方案可以修改XSD,以便验证dt:dt属性?

XML文件:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<OperationalTopology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xmlns:dt="urn:schemas-microsoft-com:datatypes"
                     xsi:noNamespaceSchemaLocation="xsd.xsd">
   <Element1>
      <Element1_In ID="xx" dt:dt="string"/>
   </Element1>
</OperationalTopology>

XSD文件:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="OperationalTopology">
        <xs:annotation>
            <xs:documentation>Comment describing your root element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:all>
                <xs:element name="Element1" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                <xs:attribute name="ID" use="optional"/>
                                <xs:attribute name="dt" use="optional"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>

在上面的代码中,xsd在验证XML时给出了错误。错误发生在dt:dt属性中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-16 23:25:41

xs:attribute元素的name属性的值必须仅为本地名称(dt)。应该在它自己的模式(比如xsd2.xsd)中声明它,因为它有一个不同的名称空间(当然,除非这个模式已经存在于某个地方):

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="urn:schemas-microsoft-com:datatypes">
    <xs:attribute name="dt"/>
</xs:schema>

然后,原始模式可以导入上述模式,将名称空间绑定到dt前缀,并使用对dt:dt的属性引用,而不是声明它:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:dt="urn:schemas-microsoft-com:datatypes"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xs:import namespace="urn:schemas-microsoft-com:datatypes" schemaLocation="xsd2.xsd"/>
    <xs:element name="OperationalTopology">
        <xs:annotation>
            <xs:documentation>Comment describing your root element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:all>
                <xs:element name="Element1" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:attribute name="ID" use="optional"/>
                                    <xs:attribute ref="dt:dt" use="optional" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41669938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档