如何向 xml 架构元素添加属性?

发布于 2024-08-22 05:25:07 字数 1701 浏览 3 评论 0原文

我有一个加载 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>

I have a project where a xsd document is loaded, and based on that a editor is created for each element. And then xml that implements that schema is loaded into the editor. This could be a simple textbox for a string, a datepicker for a date or a more complex data like a chapter with associated metadata.
The editor is generic so the editor has be generated based on the schema. For simple types ( like string and date) we can use the type attribute. But for more complex custom types we need to add a attribute to the xsd document that defines what editor subelement to use.

So I added a custom attribute called UIType, but this is not allowed by the w3 schema schema. Is there any way I can extend the w3 schema schema, prefably without making a copy of it and adding what I need, but actually extend it? Or is there another smarter way of doing this?

Thanks.

Just to make it clear; I do not want to add the attribute to the actual xml data, but to the schema.

Here is an example of the schema:

<?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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒解孤独 2024-08-29 05:25:07

您似乎已经在创建扩展类型。您不限于使用“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>

You already seem to be creating your extended types. You aren't limited to using "xs:int" or "xs:string" as the type. You can define your own types by extracting the complexType elements and naming them. You can then use their name as a type for other elements.

<?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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文