在 XSD 中全局定义属性的目的
Purpose of defining an attribute globally in XSD
在 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>
你会如何使用它?
您可以通过 xs:attribute/@ref
使用它,这对于允许在多个位置使用 someAttr
的一个定义特别方便。
XSD
<?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>
全局属性其实很少用到。原因之一是它们必须位于定义模式文档的目标名称空间中,而这通常不是您想要的。如果您有许多元素共有的属性,一种流行的替代方法是定义一个全局属性集(即使它只包含一个属性),因为这样属性就可以不在任何命名空间中。
在 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>
你会如何使用它?
您可以通过 xs:attribute/@ref
使用它,这对于允许在多个位置使用 someAttr
的一个定义特别方便。
XSD
<?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>
全局属性其实很少用到。原因之一是它们必须位于定义模式文档的目标名称空间中,而这通常不是您想要的。如果您有许多元素共有的属性,一种流行的替代方法是定义一个全局属性集(即使它只包含一个属性),因为这样属性就可以不在任何命名空间中。