在XSD中,可以在架构元素下定义一个属性,就像我在下面的XSD中定义someAttr
一样:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.example.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="Companys">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Company" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="companyname" type="xs:string" default="test1"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:attribute name="someAttr" type="xs:string" default="R"/>
</xs:schema>
你会怎么用?
答案 0 :(得分:1)
您可以通过xs:attribute/@ref
使用它,这对于允许在多个位置使用someAttr
的一个定义特别方便。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.example.com"
xmlns:e="http://www.example.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="Companys">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Company" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="companyname" type="xs:string" default="test1"/>
<xs:attribute ref="e:someAttr"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:attribute name="someAttr" type="xs:string" default="R"/>
</xs:schema>
答案 1 :(得分:1)
事实上,全局属性很少使用。这样做的一个原因是它们必然位于定义模式文档的目标名称空间中,这通常不是您想要的。如果您拥有许多元素共有的属性,那么一种流行的替代方法是定义全局attributeSet(即使它只包含一个属性),因为这些属性可以不在命名空间中。