如何在xsd / xml中使用xml:lang?

时间:2013-12-09 14:58:22

标签: xml internationalization xsd phpstorm

我有以下XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://www.vibrogym.com/schema"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.vibrogym.com/schema"
        elementFormDefault="qualified" >

    <xs:import schemaLocation="http://www.w3.org/2001/xml.xsd" 
               namespace="http://www.w3.org/XML/1998/namespace"/>

    <xs:complexType name="localizedNameType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute ref="xml:lang" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:element name="exercise">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" 
                            type="localizedNameType" 
                            minOccurs="1" 
                            maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<exercise xmlns="http://www.vibrogym.com/schema">
    <name xml:lang="en">test</name>
</exercise>

PHPStorm提供以下验证错误:Element name doesn't have the required attribute lang

PHPStorm在给我验证错误时是否正确?如果是这样,我做错了什么?

更新

显然use="required"类型的localizedNameType属性会触发验证错误;为什么这是错的?

1 个答案:

答案 0 :(得分:2)

不,PHPStorm不正确;该文档对您提供的架构有效。正如kjhughes推测的那样,问题可能与其处理xml命名空间时的错误有关。如果添加他建议的命名空间声明会导致PHPStorm接受该文档,那么您有两个错误需要报告:无法正确验证此示例,并且无法在具有{{名称空间声明的版本上报告命名空间良好格式错误1}}命名空间。 (前缀xml是保留的,因此不允许声明前缀为xml的命名空间。)