具有两个名称空间的文档的XML Schema

时间:2017-01-04 15:25:06

标签: xml xsd

我想准备.xsd来验证我给出的XML文档。

在bespoken文档中定义了两个名称空间:

<?xml version="1.0" encoding="UTF-8"?>
    <komunikat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="www.example.com/xml"
        xmlns:nfz="www.example.com/xml/nfz" 

        nfz:version="1.7"
        nfz:info-aplik-nad="KS-PPS 2016.00.3.1">

        type="someType"
        version="4"
    </komunikat>

在我的架构中,我尝试过:

   targetNamespace="www.example.com/xml"
   xmlns:nfz="www.example.com/xml/nfz"
   ...
   <xs:attribute name="nfz:info-aplik-nad" use="optional" >
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:length value="40" />
        </xs:restriction>
    </xs:simpleType> ...

但是在我的验证器中我收到错误:

.XMLSchemaParseError: Element '{http://www.w3.org/2001/XMLSchema}attribute', attribute 'name': 'nfz:info-aplik-nad' is not a valid value of the atomic type 'xs:NCName'., line 25

我理解: attribute名称属性中不允许使用ArrayAdapter字符。

是否可以不更改xml文件?

1 个答案:

答案 0 :(得分:1)

只有名称空间中的属性可以在其名称中包含冒号(以指定名称空间前缀)。

您的XML和XSD存在许多无关紧要的问题。这是一个完整的,更小的示例,它显示了一个对XSD有效的XML实例,其中属性位于命名空间中:

XML

<?xml version="1.0" encoding="UTF-8"?>
<komunikat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://myNameSpace.com" 
           xmlns:nfz="http://myNameSpace.com" 
           nfz:info-aplik-nad="KS-PPS 2016.00.3.1"/>

XSD

<xs:schema targetNamespace="http://myNameSpace.com" 
           xmlns:m="http://myNameSpace.com"
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           attributeFormDefault="qualified" >
  <xs:element name="komunikat">
    <xs:complexType>
      <xs:sequence/>
      <xs:attribute name="info-aplik-nad" use="optional" >
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:length value="18" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>

特别注意在XSD中使用attributeFormDefault="qualified"

为了使用额外的命名空间,您必须有一个额外的XSD,然后将其导入(使用xs:import)到主XSD。