Мой вопрос очень похож на Что xsd позволит элементу бесконечно иметь себя как подэлемент? .
Что я хочу сделать, это использовать структуру XML, которая способнасоздать скелет в XML.XML будет иметь сложный тип верхнего уровня, который включает в себя рекурсивный список сложных типов кости, который включает их собственные атрибуты и данные элемента.
Я использую XML здесь:
<SkeletalMapping xmlns="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="test SkeletalDefinition.xsd">
<Skeleton sourceSkeleton="Max" targetSkeleton="UDK" version="1.0">
<Bone name="Origin" target="ROOT">
<PivotPoint x="0.0" y="0.0" z="0.0" />
<Bone name="UpperBody" target="SPINE">
<PivotPoint x="0.0" y="0.033" z="0.438" />
<Bone name="Head" target="HEAD">
<PivotPoint x="0.0" y="0.006" z="0.667" />
</Bone>
<Bone name="RightArm" target="RIGHT_ARM">
<PivotPoint x="-0.203" y="0.05" z="0.477" />
<Bone name="LRightHand" target="RIGHT_HAND">
<PivotPoint x="-0.586" y="0.074" z="0.067" />
</Bone> <!-- LeftHand -->
</Bone> <!-- LeftArm -->
<Bone name="LeftArm" target="LEFT_ARM">
<PivotPoint x="0.203" y="0.05" z="0.477" />
<Bone name="LeftHand" target="LEFT_HAND">
<PivotPoint x="0.587" y="0.074" z="0.066" />
</Bone> <!-- LeftHand -->
</Bone> <!-- LeftArm -->
</Bone> <!-- UpperBody -->
<Bone name="RightLeg" target="RIGHT_LEG">
<PivotPoint x="-0.14" y="-0.019" z="-0.467" />
<Bone name="RightFoot" target="RIGHT_FOOT">
<PivotPoint x="-0.17" y="0.083" z="-0.889" />
</Bone> <!-- RightFoot -->
</Bone> <!-- RightLeg -->
<Bone name="LeftLeg" target="LEFT_LEG">
<PivotPoint x="0.14" y="-0.019" z="-0.467" />
<Bone name="LeftFoot" target="LEFT_FOOT">
<PivotPoint x="0.17" y="0.083" z="-0.889" />
</Bone> <!-- LegFoot -->
</Bone> <!-- LeftLeg -->
</Bone> <!-- Origin -->
</Skeleton>
XSDЯ использую:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Vec3">
<xs:attribute name="x" type="xs:float"/>
<xs:attribute name="y" type="xs:float"/>
<xs:attribute name="z" type="xs:float"/>
</xs:complexType>
<xs:element name="Bone">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="Bone" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:element name="PivotPoint" type="Vec3" minOccurs="0" maxOccurs="1"/>
<xs:attribute name="name" type="xsd:string" use="required"/>
<xs:attribute name="target" type="xsd:string" />
</xs:complexType>
</xs:element>
<xs:element name="Skeleton">
<xs:complexType>
<xs:sequence>
<xs:element ref="Bone" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="sourceSkeleton" type="xs:string" />
<xs:attribute name="targetSkeleton" type="xs:string" />
<xs:attribute name="version" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="SkeletonMapping">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Skeleton"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Редактор, который я использую, это Notepad ++ с плагинами XML.Синтаксис XML и XSD проходит проверку, однако я не могу понять, почему проверка XSD с помощью инструмента XML не позволяет анализировать XML.
Если кто-то знает, как я могу это исправить, пожалуйста, дайте мне знатькак я пытался разорвать наследство Bone от:
<Skeleton>
<Bone>
<Bone>
<Bone/>
</Bone>
</Bone>
</Skeleton>
до
<Skeleton>
<BoneGroup>
<Bone>
<BoneGroup>
<Bone>
<BoneGroup>
<Bone/>
</BoneGroup>
</Bone>
</BoneGroup>
</Bone>
</BoneGroup>
</Skeleton>
, для которого я создал новый элемент BoneGroup, имеющий ссылку на Bone, а Bone имелссылка на BoneGroup, но это не сработало.