使用新属性扩展 public XSD 模式
Extend a public XSD schema with new attribute
我想用名为 newAttr
的新属性扩展 the existing XSD schema(trans-unit
元素)。
因此,原始模式具有以下名为 trans-unit
的元素,我想对其进行扩展:
<xsd:element name="trans-unit">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
<xsd:anyAttribute namespace="##other" processContents="strict"/>
</xsd:complexType>
<xsd:unique name="U_tu_segsrc_mid">
<xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
<xsd:field xpath="@mid"/>
</xsd:unique>
<xsd:keyref name="KR_tu_segsrc_mid" refer="xlf:U_tu_segsrc_mid">
<xsd:selector xpath="./xlf:target/xlf:mrk|./xlf:alt-trans"/>
<xsd:field xpath="@mid"/>
</xsd:keyref>
</xsd:element>
为此,我创建了重新定义原始模式的新模式:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:oasis:names:tc:xliff:document:1.2" xml:lang="en">
<xsd:redefine schemaLocation="http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<xsd:complexType name="trans-unit">
<xsd:extension base="trans-unit">
<xsd:attribute name="newAttr" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:complexType>
</xsd:redefine>
</xsd:schema>
但是,不幸的是,使用此扩展模式验证文件失败并出现以下错误:
'attribute' is not a valid grandchild element. children of elements must have or descendants, with 'base' attributes that refer to themselves.
我不确定应该如何进行扩展。如果有人能解释我做错了什么,那就太好了。
the original schema has the following element called trans-unit which I want to extend
XML 架构不允许重新定义元素声明。见 https://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#modify-schema:
<redefine
id = ID
schemaLocation = anyURI
{any attributes with non-schema namespace . . .}>
Content: (annotation | (simpleType | complexType | group | attributeGroup))*
</redefine>
注意'element'不是xs:redefine内容的选项之一。
我想提供帮助,并提出一些扩展此架构的方法。但是 public 架构似乎是为了禁止扩展而设计的。如果复杂类型是全局的,那么它可以被扩展(比重新定义好得多,顺便说一句)。但是复杂类型是本地定义的,因此不能以任何方式修改。
我想不出任何方法来使用 XML 架构的扩展机制来更改此元素声明的类型定义。我想你需要修改 XSD.
我想用名为 newAttr
的新属性扩展 the existing XSD schema(trans-unit
元素)。
因此,原始模式具有以下名为 trans-unit
的元素,我想对其进行扩展:
<xsd:element name="trans-unit">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
<xsd:anyAttribute namespace="##other" processContents="strict"/>
</xsd:complexType>
<xsd:unique name="U_tu_segsrc_mid">
<xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
<xsd:field xpath="@mid"/>
</xsd:unique>
<xsd:keyref name="KR_tu_segsrc_mid" refer="xlf:U_tu_segsrc_mid">
<xsd:selector xpath="./xlf:target/xlf:mrk|./xlf:alt-trans"/>
<xsd:field xpath="@mid"/>
</xsd:keyref>
</xsd:element>
为此,我创建了重新定义原始模式的新模式:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:oasis:names:tc:xliff:document:1.2" xml:lang="en">
<xsd:redefine schemaLocation="http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
<xsd:complexType name="trans-unit">
<xsd:extension base="trans-unit">
<xsd:attribute name="newAttr" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:complexType>
</xsd:redefine>
</xsd:schema>
但是,不幸的是,使用此扩展模式验证文件失败并出现以下错误:
'attribute' is not a valid grandchild element. children of elements must have or descendants, with 'base' attributes that refer to themselves.
我不确定应该如何进行扩展。如果有人能解释我做错了什么,那就太好了。
the original schema has the following element called trans-unit which I want to extend
XML 架构不允许重新定义元素声明。见 https://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#modify-schema:
<redefine
id = ID
schemaLocation = anyURI
{any attributes with non-schema namespace . . .}>
Content: (annotation | (simpleType | complexType | group | attributeGroup))*
</redefine>
注意'element'不是xs:redefine内容的选项之一。
我想提供帮助,并提出一些扩展此架构的方法。但是 public 架构似乎是为了禁止扩展而设计的。如果复杂类型是全局的,那么它可以被扩展(比重新定义好得多,顺便说一句)。但是复杂类型是本地定义的,因此不能以任何方式修改。
我想不出任何方法来使用 XML 架构的扩展机制来更改此元素声明的类型定义。我想你需要修改 XSD.