2012-02-06 12 views
9

Mam schemat XML zawierający wiele importów, które z kolei zawierają import. Potrzebuję wygenerować schemat semantycznie równy, w którym wszystkie importowane są inline. Chcę je zastąpić:Schemat XML: zastępowanie importów odpowiadającym schematom

<xs:import namespace="http://some.name/" schemaLocation="./path/to/it.xsd"/> 

z zawartością schematów referencyjnych. I potrzebuję uzyskać dane wyjściowe jako ciąg, a nie jako wewnętrzną reprezentację.

Próbowałem Apache Xerces, ale nie znalazłem sposobu, aby napisać XSModel na ciąg znaków. Jest tu?

Próbowałem Apache XmlSchema 2, ale kiedy zapisuje XML Schema nie zastępuje deklaracji przywozowych schematem.

Czy istnieje jakaś biblioteka, która może to zrobić? Jakieś sugestie?

Dzięki.

+1

Dlaczego musisz to zrobić? –

+0

To długa historia i jest to możliwe rozwiązanie problemu, który mam – Thresh

Odpowiedz

10

xsd: include może zwykle być inline, ale xsd: import nie może. Dzieje się tak, ponieważ xsd: import jest używany do odwoływania się do dokumentu schematu dla innej docelowej przestrzeni nazw i nie można mieć komponentów z różnymi docelowymi przestrzeniami nazw w tym samym dokumencie schematu.

5

Jak wskazano here i here, ograniczenie XSD posiadania jednej docelowej przestrzeni nazw na plik sprawia, że ​​twoje "semantycznie równoważne" żądanie jest niemożliwe do rozwiązania. Jest to prawdą, a także typową we wszystkich scenariuszach, w których sama przestrzeń nazw służy do definiowania granic (lub zawężania) zbiorów semantycznych.

Do refaktoryzacji jednorazowej lub czasowej, gdy nie trzeba programowo zajmować się taką rzeczą w sposób powtarzalny lub dynamicznie, można również spróbować spojrzeć na nią: here; Być może problem w twoim przypadku nie polega na tym, że import nie jest obsługiwany (co wydaje mi się dziwne), ale raczej, że złożoność włączenia/importu sprawia, że ​​wykres jest zbyt skomplikowany dla twoich narzędzi. Jak pokazano w tym ostatnim poście, poprzez zawalenie załączników, przy efekcie netto zmniejszenia liczby wymaganych importów, problem został rozwiązany.

Alternatywnie, jeśli w jakiś sposób twoja "semantyczna równoważność" nie obejmuje przestrzeni nazw (na przykład widziałem ludzi, którzy byli raczej zainteresowani opracowaniem modelu relacyjnego z XSD), może być możliwe, poprzez refaktoryzację, przestrzenie nazw w jedną (lub żadną, tzn. bez docelowej przestrzeni nazw), a następnie przekazują ją do Twojego narzędzia. Jedynym haczykiem, z punktu widzenia automatycznej refaktoryzacji, jest zapewnienie, że nie ma duplikatów o nazwanych składnikach XSD w różnych przestrzeniach nazw; na przykład nie może mieć tej samej nazwy dla elementu, typu, atrybutu, grupy itp. w różnych obszarach nazw.

Powiązane problemy