Xml 为什么必须为导入的XSD中的属性添加前缀?
我有以下两个xsd,test.xsdXml 为什么必须为导入的XSD中的属性添加前缀?,xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,我有以下两个xsd,test.xsd <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd" xmlns:ns1="http://www.test.com/ns1" targetNamespace="http://www.test.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd"
xmlns:ns1="http://www.test.com/ns1"
targetNamespace="http://www.test.com"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<import namespace="http://www.test.com/ns1" schemaLocation="test1.xsd"/>
<element name="Root">
<complexType>
<sequence>
<element name="Child" type="string"/>
</sequence>
<attribute ref="ns1:myAttrib1" use="required"/>
<attribute ref="ns1:myAttrib2" use="required"/>
</complexType>
</element>
</schema>
. 另一个有趣的来源是。因此,这确实支持了公认的答案。然而,我还没有看到W3C rec(以神秘著称)详细提到这一点的确切位置。毕竟,他们是这个问题的管理机构。模式中的顶级元素和属性声明始终位于模式的targetNamespace中。elementFormDefault
和attributeFormDefault
仅适用于嵌套在复杂类型中的匿名元素/属性声明。如果您的test.xsd
架构没有指定elementFormDefault=“qualified”
,那么复杂类型中的子元素将不在名称空间中,实例文档需要如下所示
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root xmlns:ns="http://www.test.com" xmlns:ns1="http://www.test.com/ns1"
ns1:myAttrib1="1" ns1:myAttrib2="2">
<Child>Child 1</Child>
</Root>
无效-myAttrib1和myAttrib2不在命名空间中。1)正确。但是,attributeFormDefault
和elementFormDefault
仅适用于本地定义的属性和元素。换句话说,那些不是模式和的直接子元素的元素将重新定义,嵌套在其他模式组件中
2) .2显示ref必须是QName。通常,在XSD中的任何地方都可以看到ref属性,它将是QName类型 谢谢伊恩,我重新编辑了我的问题(诚然措辞很糟糕)。关于targetNamespace的部分。重新。对于elementFormDefault=“unqualified”,我之前的印象是,控制这种行为的是默认名称空间的使用。谢谢你让我关注这个机制+1.
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="http://www.test.com" xmlns:ns1="http://www.test.com/ns1"
ns1:myAttrib1="1" ns1:myAttrib2="2">
<Child>Child 1</Child>
</Root>
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root xmlns:ns="http://www.test.com" xmlns:ns1="http://www.test.com/ns1"
ns1:myAttrib1="1" ns1:myAttrib2="2">
<Child>Child 1</Child>
</Root>
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root xmlns="http://www.test.com/nl1" xmlns:ns="http://www.test.com"
myAttrib1="1" myAttrib2="2">
<ns:Child>Child 1</ns:Child>
</ns:Root>