如何向XML模式元素添加属性?

4
我有一个项目,其中加载了一个xsd文档,并为每个元素创建一个编辑器。然后将实现该模式的xml加载到编辑器中。这可以是字符串的简单文本框,日期的日期选择器或类似于具有相关元数据的章节的更复杂的数据。
编辑器是通用的,因此必须基于模式生成编辑器。对于简单类型(如字符串和日期),我们可以使用type属性。但是对于更复杂的自定义类型,我们需要向xsd文档添加属性,以定义要使用的编辑器子元素。 因此,我添加了一个名为UIType的自定义属性,但是这不被w3模式模式允许。是否有任何方法可以扩展w3模式模式,最好不要复制它并添加所需内容,而是实际扩展它?还是有其他更聪明的方法吗? 谢谢。 只是为了明确;我不想将属性添加到实际的xml数据中,而是添加到模式中。 以下是模式示例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:element name="PublishDate" type="xs:date" />
    <xs:element name="Chapters">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="ID" type="xs:int" />
                            <xs:element name="FileID" type="xs:int" />
                            <xs:element name="Title" type="xs:string" />
                            <xs:element name="Artist" type="xs:string" />
                            <xs:element name="Year" type="xs:int" />
                            <xs:element name="Timestamp" type="xs:string"  />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我也在想这个问题。 - Jesper Fyhr Knudsen
1个回答

2

您似乎已经在创建扩展类型了。您不必局限于使用“xs:int”或“xs:string”作为类型。您可以通过提取complexType元素并对其命名来定义自己的类型。然后,您可以将它们的名称用作其他元素的类型。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:element name="PublishDate" type="xs:date" />
    <xs:element name="Chapters" type="Chapters_t" />
    <xs:complexType name="Chapters_t">
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" >
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ID" type="xs:int" />
                        <xs:element name="FileID" type="xs:int" />
                        <xs:element name="Title" type="xs:string" />
                        <xs:element name="Artist" type="xs:string" />
                        <xs:element name="Year" type="xs:int" />
                        <xs:element name="Timestamp" type="xs:string"  />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

啊,我觉得我在 w3schools 上读过这个问题...... 我认为这应该可以解决问题。我会试一下的,等我测试过了再给你确认。 - Jacob Poul Richardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接