如何在XML模式中定义用户定义数据类型?
发布时间:2020-12-16 07:49:33 所属栏目:百科 来源:网络整理
导读:我定义了两个复杂的元素类型 – Developer和App. 开发者孩子 – 身份证,姓名,电子邮件 应用程序子项 – ID,名称,开发人员 这里的Developer in App复杂元素指的是Developer / ID. 如何在xml架构中定义此关系.我正在使用XML spy2013编辑器. 我已尝试在简单类型
我定义了两个复杂的元素类型 – Developer和App.
开发者孩子 – 身份证,姓名,电子邮件 应用程序子项 – ID,名称,开发人员 这里的Developer in App复杂元素指的是Developer / ID. 如何在xml架构中定义此关系.我正在使用XML spy2013编辑器. 我已尝试在简单类型Developer-> ID的声明中指定name.并在App-> Developer数据类型中使用此名称.但它给出了错误.. <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSpy v2013 (x64) (http://www.altova.com) by Piyush (USC) --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="appinfo"> <xs:complexType> <xs:sequence> <xs:element name="Developer"> <xs:complexType> <xs:all> **<xs:element name="ID">** <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="5"/> <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-zA-Z])+"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Email"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[^@]+@[^.]+..+"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Company" type="xs:string"/> <xs:element name="Website" type="xs:string"/> <xs:element name="Phone"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="13"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:all> </xs:complexType> </xs:element> <xs:element name="App"> <xs:complexType> <xs:all> <xs:element name="ID"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="5"/> <xs:pattern value="[0-9][0-9][0-9][0-9][A-Z]"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-zA-Z])+"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Developer" ***type="xs:anySimpleType"/>*** <xs:element name="Price"> <xs:simpleType> <xs:restriction base="xs:float"> <xs:minInclusive value="0.00"/> <xs:maxInclusive value="6.99"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="TabletCompatible" type="xs:boolean" minOccurs="0"/> <xs:element name="Category"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Travel"/> <xs:enumeration value="Productivity"/> <xs:enumeration value="Game"/> <xs:enumeration value="Music"/> <xs:enumeration value="Education"/> <xs:enumeration value="Lifestyle"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Platform"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Android"/> <xs:enumeration value="iOS"/> <xs:enumeration value="Blackberry"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:all> </xs:complexType> </xs:element> <xs:element name="AppStat"> <xs:complexType> <xs:all> <xs:element name="AppID" type="xs:anySimpleType"/> <xs:element name="Statistics"> <xs:complexType> <xs:sequence maxOccurs="unbounded"> <xs:element name="Platform" type="xs:anySimpleType"/> <xs:element name="Downloads" type="xs:positiveInteger"/> <xs:element name="Rating"> <xs:simpleType> <xs:restriction base="xs:float"> <xs:minInclusive value="0.0"/> <xs:maxInclusive value="5.0"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="LastChecked" type="xs:date"/> </xs:all> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>
为开发人员ID使用通用简单类型的方法是在开头将其声明为命名类型:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="developerID"> <xs:restriction base="xs:string"> <xs:length value="5"/> <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> </xs:restriction> </xs:simpleType> . . . 然后使用它: . . . <xs:element name="Developer" maxOccurs="unbounded"> <xs:complexType> <xs:all> <xs:element name="ID" type="developerID"> . . . <xs:element name="App" maxOccurs="unbounded"> <xs:complexType> <xs:all> . . . <xs:element name="Developer" type="developerID"/> 但这还不足以创建一个约束,以便appinfo / App / Developer只能包含appinfo / Developer / ID中声明的开发人员ID之一.为此,必须使用xs:key创建唯一键定义,并使用xs:keyref引用它(请参阅here). 这是完整的XSD: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="developerID"> <xs:restriction base="xs:string"> <xs:length value="5"/> <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> </xs:restriction> </xs:simpleType> <xs:element name="appinfo"> <xs:complexType> <xs:sequence> <xs:element name="Developer" maxOccurs="unbounded"> <xs:complexType> <xs:all> <xs:element name="ID" type="developerID"> </xs:element> <xs:element name="Name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-zA-Z])+"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Email"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[^@]+@[^.]+..+"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Company" type="xs:string"/> <xs:element name="Website" type="xs:string"/> <xs:element name="Phone"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="13"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:all> </xs:complexType> </xs:element> <xs:element name="App" maxOccurs="unbounded"> <xs:complexType> <xs:all> <xs:element name="ID"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="5"/> <xs:pattern value="[0-9][0-9][0-9][0-9][A-Z]"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-zA-Z])+"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Developer" type="developerID"/> <xs:element name="Price"> <xs:simpleType> <xs:restriction base="xs:float"> <xs:minInclusive value="0.00"/> <xs:maxInclusive value="6.99"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="TabletCompatible" type="xs:boolean" minOccurs="0"/> <xs:element name="Category"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Travel"/> <xs:enumeration value="Productivity"/> <xs:enumeration value="Game"/> <xs:enumeration value="Music"/> <xs:enumeration value="Education"/> <xs:enumeration value="Lifestyle"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Platform"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Android"/> <xs:enumeration value="iOS"/> <xs:enumeration value="Blackberry"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:all> </xs:complexType> <xs:keyref name="developerIDref" refer="developerID"> <xs:selector xpath="."/> <xs:field xpath="Developer"/> </xs:keyref> </xs:element> <xs:element name="AppStat"> <xs:complexType> <xs:all> <xs:element name="AppID" type="xs:anySimpleType"/> <xs:element name="Statistics"> <xs:complexType> <xs:sequence maxOccurs="unbounded"> <xs:element name="Platform" type="xs:anySimpleType"/> <xs:element name="Downloads" type="xs:positiveInteger"/> <xs:element name="Rating"> <xs:simpleType> <xs:restriction base="xs:float"> <xs:minInclusive value="0.0"/> <xs:maxInclusive value="5.0"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="LastChecked" type="xs:date"/> </xs:all> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="developerID"> <xs:selector xpath="Developer"/> <xs:field xpath="ID"/> </xs:key> </xs:element> </xs:schema> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |