2009-07-02 9 views
35

Po prostu chcę wiedzieć, czy istnieje program, który może konwertować plik XSD do klasy Python jako JAXB robi dla Java?Jak przekonwertować XSD na Python Class

+2

Od dynamiki pytony oznacza, że ​​można ustawić niezależnie od atrybutów chcesz w klasie, to naprawdę nie ma definicji pól w taki sam sposób, więc nie jestem pewien, jak to sprawia, że ​​wiele sensu . Ale oczywiście można użyć modułów pobierających i ustawiających do wykonywania kontroli typów i innych. Co ciekawsze, byłoby to coś, co tworzy definicje schematów dla różnych schematów schematów Pythona, takich jak schematy Zope, Zręczność lub SQLAlchemy. Byłoby naprawdę fajnie, gdyby to istniało. –

Odpowiedz

28

generateDS: Myślę, że jest to dobre narzędzie muszę

Edit: Właściwie generateDS robi bardzo dobrze zadanie !! Generuje klasę Python wszystkimi metodami (setter i getters, eksport do XML, import z XML). Pracuje bardzo dobrze !

+3

Po przetestowaniu generDSDS i PyXB zdecydowałem się na użycie PyXB, ponieważ ma on lepszą obsługę sprawdzania poprawności (wzory) i możliwe jest wywołanie generatora z poziomu modułu pythonowego (setup.py) bez użycia czegoś podobnego do system(). –

+0

@ EnnoGröper Powinieneś prawdopodobnie generować klasy przed czasem. Jeden z moich XSD-ów daje plik Pythona o rozmiarze 29k (35k z PyXB). Jeśli nie masz dostępu do wymaganego XSD do czasu instalacji/środowiska wykonawczego, nie generuj klas podczas instalacji/runtime. –

+0

Eksportowanie XML jest bardzo powolne w generDSDS .... Czy jest jakaś inna alternatywa? Które mogą być szybkie i wydajne. – Nilesh

1

Spójrz na http://pypi.python.org/pypi/rsl.xsd/0.2.3

Również warto http://pyxsd.org/ działa bardzo ładnie.

+0

Widzę, że pyxsd nigdy nie przekroczył limitu 0.1. Jakieś istotne ograniczenia? – Marcin

+0

@Marcin: "Wszelkie istotne ograniczenia" nie są możliwe. XSD pozwala pisać rzeczy, które nie są * łatwe * do przetłumaczenia na język Python. Czy to jest "ograniczenie"? A jeśli tak, czy nie jest to ograniczenie w samym Pythonie? Jedyne, co możesz zrobić, to użyć PyXSD do swoich określonych XSD i sprawdzić, czy to działa. Jeśli to nie działa, oznacza to znaczne ograniczenie. Dany zbiór XSD może być dość złożony lub całkiem prosty. –

+0

Proszę pokazać przykład tej biblioteki w użyciu. –

8
+0

Błędy PyXB na XSD I utworzonym przy użyciu dtd2xsd.pl (generateDS nie ma problemu z tym XSD). PyXB wydaje się również generować większe pliki (29k linii vs 35k dla jednego z moich XSD). Jeśli chodzi o szybkość, czas kompilacji będzie taki sam dla obu (prawdopodobnie pełna sekunda - ogromne pliki), a w czasie działania generateDS jest dość szybki, więc nie przejmowałem się testowaniem wyników PyXB - nie może to być naprawdę znacznie szybsze. –

+1

Spędziłem większą część dwóch dni próbując użyć PyXB. Dokumentacja jest straszna, generuje błędy składniowe podczas generowania z tego XSD http://www.companieshouse.gov.uk/ef/xbrl/uk/fr/gaap/ae/2009-06-21/uk-gaap-ae- 2009-06-21.xsd, ze względu na to, że identyfikatory nie mogą zawierać myślników. –

+1

Kiedy naprawiłem te błędy, po prostu chcę zacząć uzyskiwać dostęp do elementów po przeczytaniu w XML .... nie, wszystkie przykłady używają trywialnego XML bez przestrzeni nazw i prawie nie ma dokumentacji API dla obiektów poza garść niezrozumiałych wykresów –